[Bug sanitizer/64344] [5 Regression] [UBSAN] ICE with -fsanitize=float-cast-overflow [ICE in -fsanitize=float-cast-overflow]

jakub at gcc dot gnu.org gcc-bugzilla@gcc.gnu.org
Mon Jan 5 21:47:00 GMT 2015


https://gcc.gnu.org/bugzilla/show_bug.cgi?id=64344

--- Comment #4 from Jakub Jelinek <jakub at gcc dot gnu.org> ---
Author: jakub
Date: Mon Jan  5 21:46:31 2015
New Revision: 219201

URL: https://gcc.gnu.org/viewcvs?rev=219201&root=gcc&view=rev
Log:
    PR sanitizer/64344
    * ubsan.h (ubsan_instrument_float_cast): Add ARG argument.
    * ubsan.c (ubsan_instrument_float_cast): Add ARG argument, pass
    it to libubsan handler instead of EXPR.  Fold comparisons earlier,
    if the result is integer_zerop, return NULL_TREE.
    * convert.c (convert_to_integer): Pass expr as ARG.
c/
    * c-typeck.c (convert_for_assignment, c_finish_return): For
    -fsanitize=float-cast-overflow casts from REAL_TYPE to integer/enum
    types also set in_late_binary_op around convert call.
    * c-convert.c (convert): For -fsanitize=float-cast-overflow REAL_TYPE
    to integral type casts, if not in_late_binary_op, pass c_fully_fold
    result on expr as last argument to ubsan_instrument_float_cast,
    if in_late_binary_op, don't use c_save_expr but save_expr.
testsuite/
    * c-c++-common/ubsan/pr64344-1.c: New test.
    * c-c++-common/ubsan/pr64344-2.c: New test.

Added:
    trunk/gcc/testsuite/c-c++-common/ubsan/pr64344-1.c
    trunk/gcc/testsuite/c-c++-common/ubsan/pr64344-2.c
Modified:
    trunk/gcc/ChangeLog
    trunk/gcc/c/ChangeLog
    trunk/gcc/c/c-convert.c
    trunk/gcc/c/c-typeck.c
    trunk/gcc/convert.c
    trunk/gcc/testsuite/ChangeLog
    trunk/gcc/ubsan.c
    trunk/gcc/ubsan.h



More information about the Gcc-bugs mailing list