aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorRichard Kenner <kenner@gcc.gnu.org>1997-04-20 21:27:07 -0400
committerRichard Kenner <kenner@gcc.gnu.org>1997-04-20 21:27:07 -0400
commit3c9b009121d8d034401ad260359a8d1f80ef7a95 (patch)
tree650ee01127ecc5bd9ad5c5363027d8a44e1f0685 /gcc
parent116758a7279462ae7a8546c9c94a2de8efe08adf (diff)
downloadgcc-3c9b009121d8d034401ad260359a8d1f80ef7a95.zip
gcc-3c9b009121d8d034401ad260359a8d1f80ef7a95.tar.gz
gcc-3c9b009121d8d034401ad260359a8d1f80ef7a95.tar.bz2
(operand_equal_p): Constants are not equal if there has been an overflow.
From-SVN: r13949
Diffstat (limited to 'gcc')
-rw-r--r--gcc/fold-const.c9
1 files changed, 7 insertions, 2 deletions
diff --git a/gcc/fold-const.c b/gcc/fold-const.c
index f75d479..84e098a 100644
--- a/gcc/fold-const.c
+++ b/gcc/fold-const.c
@@ -1759,11 +1759,16 @@ operand_equal_p (arg0, arg1, only_const)
switch (TREE_CODE (arg0))
{
case INTEGER_CST:
- return (TREE_INT_CST_LOW (arg0) == TREE_INT_CST_LOW (arg1)
+ return (! TREE_CONSTANT_OVERFLOW (arg0)
+ && ! TREE_CONSTANT_OVERFLOW (arg1)
+ && TREE_INT_CST_LOW (arg0) == TREE_INT_CST_LOW (arg1)
&& TREE_INT_CST_HIGH (arg0) == TREE_INT_CST_HIGH (arg1));
case REAL_CST:
- return REAL_VALUES_EQUAL (TREE_REAL_CST (arg0), TREE_REAL_CST (arg1));
+ return (! TREE_CONSTANT_OVERFLOW (arg0)
+ && ! TREE_CONSTANT_OVERFLOW (arg1)
+ && REAL_VALUES_EQUAL (TREE_REAL_CST (arg0),
+ TREE_REAL_CST (arg1)));
case COMPLEX_CST:
return (operand_equal_p (TREE_REALPART (arg0), TREE_REALPART (arg1),