From 2cf099a5536d13b14670d122452602a1443b0a7b Mon Sep 17 00:00:00 2001 From: Roger Sayle Date: Wed, 20 Aug 2003 21:55:01 +0000 Subject: [PATCH] re PR middle-end/11984 (ICE with -ffast_math: expected integer_cst, have real_cst) PR middle-end/11984 * fold-const.c (fold ): 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 --- gcc/ChangeLog | 7 +++++++ gcc/fold-const.c | 4 +++- gcc/testsuite/ChangeLog | 5 +++++ gcc/testsuite/gcc.dg/20030820-1.c | 13 +++++++++++++ 4 files changed, 28 insertions(+), 1 deletion(-) create mode 100644 gcc/testsuite/gcc.dg/20030820-1.c diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 2ff2414d9e7c..cf5369d3a31a 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,10 @@ +2003-08-20 Roger Sayle + + PR middle-end/11984 + * fold-const.c (fold ): Check for integer constant + operands before calling tree_int_cst_lt when performing associative + transformations. + 2003-08-20 Jason Merrill * tree.h (IS_EXPR_CODE_CLASS): Also include 'r' and 's'. diff --git a/gcc/fold-const.c b/gcc/fold-const.c index ef7c086087b6..bf6b1f8e9f15 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 bbbf552c5305..869e26edf576 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,8 @@ +2003-08-20 Roger Sayle + + PR middle-end/11984 + * gcc.dg/20030820-1.c: New test case. + 2003-08-20 Nathan Sidwell 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 000000000000..f86fb3978f4f --- /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; +} + -- 2.47.2