Skip to content
Snippets Groups Projects
Commit b05288d1 authored by liuhongt's avatar liuhongt
Browse files

Don't simplify NAN/INF or out-of-range constant for FIX/UNSIGNED_FIX.

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.
parent 4638e508
No related branches found
No related tags found
No related merge requests found
Loading
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment