On 5/26/24 7:08 PM, liuhongt wrote:
Update in V2:
Guard constant folding for overflow value in
fold_convert_const_int_from_real with flag_trapping_math.
Add -fno-trapping-math to related testcases which warn for overflow
in conversion from floating point to integer.

Bootstrapped and regtested on x86_64-pc-linux-gnu{-m32,}.
Ok for trunk?

According to IEEE standard, for conversions from floating point to
integer. When a NaN or infinite operand cannot be represented in the
destination format and this cannot otherwise be indicated, the invalid
operation exception shall be signaled. When a numeric operand would
convert to an integer outside the range of the destination format, the
invalid operation exception shall be signaled if this situation cannot
otherwise be indicated.

The patch prevent simplication of the conversion from floating point
to integer for NAN/INF/out-of-range constant when flag_trapping_math.

gcc/ChangeLog:

        PR rtl-optimization/100927
        PR rtl-optimization/115161
        PR rtl-optimization/115115
        * simplify-rtx.cc (simplify_const_unary_operation): Prevent
        simplication of FIX/UNSIGNED_FIX for NAN/INF/out-of-range
        constant when flag_trapping_math.
        * fold-const.cc (fold_convert_const_int_from_real): Don't fold
        for overflow value when_trapping_math.

gcc/testsuite/ChangeLog:

        * gcc.dg/pr100927.c: New test.
        * c-c++-common/Wconversion-1.c: Add -fno-trapping-math.
        * c-c++-common/dfp/convert-int-saturate.c: Ditto.
        * g++.dg/ubsan/pr63956.C: Ditto.
        * g++.dg/warn/Wconversion-real-integer.C: Ditto.
        * gcc.c-torture/execute/20031003-1.c: Ditto.
        * gcc.dg/Wconversion-complex-c99.c: Ditto.
        * gcc.dg/Wconversion-real-integer.c: Ditto.
        * gcc.dg/c90-const-expr-11.c: Ditto.
        * gcc.dg/overflow-warn-8.c: Ditto.
OK.  Thanks.

jeff


Reply via email to