aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRoger Sayle <roger@eyesopen.com>2003-08-20 21:55:01 +0000
committerRoger Sayle <sayle@gcc.gnu.org>2003-08-20 21:55:01 +0000
commit2cf099a5536d13b14670d122452602a1443b0a7b (patch)
tree88d6977647ab81cb19002238244071fc6b74411d
parent68ad9159aa8f37386cc910950e1814825e2335b6 (diff)
downloadgcc-2cf099a5536d13b14670d122452602a1443b0a7b.zip
gcc-2cf099a5536d13b14670d122452602a1443b0a7b.tar.gz
gcc-2cf099a5536d13b14670d122452602a1443b0a7b.tar.bz2
re PR middle-end/11984 (ICE with -ffast_math: expected integer_cst, have real_cst)
PR middle-end/11984 * fold-const.c (fold <PLUS_EXPR>): Check for integer constant operands before calling tree_int_cst_lt when performing associative transformations. * gcc.dg/20030820-1.c: New test case. From-SVN: r70618
-rw-r--r--gcc/ChangeLog7
-rw-r--r--gcc/fold-const.c4
-rw-r--r--gcc/testsuite/ChangeLog5
-rw-r--r--gcc/testsuite/gcc.dg/20030820-1.c13
4 files changed, 28 insertions, 1 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index 2ff2414..cf5369d 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,10 @@
+2003-08-20 Roger Sayle <roger@eyesopen.com>
+
+ PR middle-end/11984
+ * fold-const.c (fold <PLUS_EXPR>): Check for integer constant
+ operands before calling tree_int_cst_lt when performing associative
+ transformations.
+
2003-08-20 Jason Merrill <jason@redhat.com>
* tree.h (IS_EXPR_CODE_CLASS): Also include 'r' and 's'.
diff --git a/gcc/fold-const.c b/gcc/fold-const.c
index ef7c086..bf6b1f8 100644
--- a/gcc/fold-const.c
+++ b/gcc/fold-const.c
@@ -5884,7 +5884,9 @@ fold (tree expr)
example: ((X*2 + 4) - 8U)/2. */
if (minus_lit0 && lit0)
{
- if (tree_int_cst_lt (lit0, minus_lit0))
+ if (TREE_CODE (lit0) == INTEGER_CST
+ && TREE_CODE (minus_lit0) == INTEGER_CST
+ && tree_int_cst_lt (lit0, minus_lit0))
{
minus_lit0 = associate_trees (minus_lit0, lit0,
MINUS_EXPR, type);
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog
index bbbf552..869e26e 100644
--- a/gcc/testsuite/ChangeLog
+++ b/gcc/testsuite/ChangeLog
@@ -1,3 +1,8 @@
+2003-08-20 Roger Sayle <roger@eyesopen.com>
+
+ PR middle-end/11984
+ * gcc.dg/20030820-1.c: New test case.
+
2003-08-20 Nathan Sidwell <nathan@codesourcery.com>
PR c++/11945
diff --git a/gcc/testsuite/gcc.dg/20030820-1.c b/gcc/testsuite/gcc.dg/20030820-1.c
new file mode 100644
index 0000000..f86fb39
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/20030820-1.c
@@ -0,0 +1,13 @@
+/* PR middle-end/11984 */
+/* The following program used to ICE in fold because we didn't check
+ whether the constants we were reassociating were integer constants
+ before calling tree_int_cst_lt. */
+
+/* { dg-do compile } */
+/* { dg-options "-O2 -ffast-math" } */
+
+double f(double x)
+{
+ return 1.0 - x - 0.1;
+}
+