re PR middle-end/11771 (Segfault with simple double arithmetics)
PR middle-end/11771 * fold-const.c (negate_expr_p <MINUS_EXPR>): Change to match the logic in negate_expr, i.e. we don't invert (A-B) for floating point types unless flag_unsafe_math_optimizations. * gcc.c-torture/compile/20030804-1.c: New test case. From-SVN: r70159
This commit is contained in:
parent
f2593a6649
commit
02a1994cba
4 changed files with 25 additions and 1 deletions
|
@ -1,3 +1,10 @@
|
|||
2003-08-04 Roger Sayle <roger@eyesopen.com>
|
||||
|
||||
PR middle-end/11771
|
||||
* fold-const.c (negate_expr_p <MINUS_EXPR>): Change to match the
|
||||
logic in negate_expr, i.e. we don't invert (A-B) for floating
|
||||
point types unless flag_unsafe_math_optimizations.
|
||||
|
||||
2003-08-04 Roger Sayle <roger@eyesopen.com>
|
||||
|
||||
* fold-const.c (fold <PLUS_EXPR>): Transform x+x into x*2.0.
|
||||
|
|
|
@ -841,9 +841,12 @@ negate_expr_p (tree t)
|
|||
|
||||
case REAL_CST:
|
||||
case NEGATE_EXPR:
|
||||
case MINUS_EXPR:
|
||||
return true;
|
||||
|
||||
case MINUS_EXPR:
|
||||
/* We can't turn -(A-B) into B-A when we honor signed zeros. */
|
||||
return ! FLOAT_TYPE_P (type) || flag_unsafe_math_optimizations;
|
||||
|
||||
default:
|
||||
break;
|
||||
}
|
||||
|
|
|
@ -1,3 +1,8 @@
|
|||
2003-08-04 Roger Sayle <roger@eyesopen.com>
|
||||
|
||||
PR middle-end/11771
|
||||
* gcc.c-torture/compile/20030804-1.c: New test case.
|
||||
|
||||
2003-08-04 Roger Sayle <roger@eyesopen.com>
|
||||
|
||||
* gcc.dg/20030804-1.c: New test case.
|
||||
|
|
9
gcc/testsuite/gcc.c-torture/compile/20030804-1.c
Normal file
9
gcc/testsuite/gcc.c-torture/compile/20030804-1.c
Normal file
|
@ -0,0 +1,9 @@
|
|||
/* Extracted from PR middle-end/11771. */
|
||||
/* The following testcase used to ICE without -ffast-math from unbounded
|
||||
recursion in fold. This was due to the logic in negate_expr_p not
|
||||
matching that in negate_expr. */
|
||||
|
||||
double f(double x) {
|
||||
return -(1 - x) + (x ? -(1 - x) : 0);
|
||||
}
|
||||
|
Loading…
Add table
Reference in a new issue