aboutsummaryrefslogtreecommitdiff
path: root/gcc/fold-const.c
diff options
context:
space:
mode:
authorRichard Biener <rguenther@suse.de>2014-10-28 11:42:43 +0000
committerRichard Biener <rguenth@gcc.gnu.org>2014-10-28 11:42:43 +0000
commit9ccaac1188959d2b35cfa820c46277ebef5f75e0 (patch)
treedfad2841958e84ccd1eaf6859b533ff386a916aa /gcc/fold-const.c
parente29dfbf07d93e89e92d8b95bef247fc95a8024ef (diff)
downloadgcc-9ccaac1188959d2b35cfa820c46277ebef5f75e0.zip
gcc-9ccaac1188959d2b35cfa820c46277ebef5f75e0.tar.gz
gcc-9ccaac1188959d2b35cfa820c46277ebef5f75e0.tar.bz2
re PR tree-optimization/63665 (wrong code with signed overflow even with -fwrapv)
2014-10-28 Richard Biener <rguenther@suse.de> PR middle-end/63665 * fold-const.c (fold_comparison): Properly guard simplifying against INT_MAX/INT_MIN with !TYPE_OVERFLOW_WRAPS. * gcc.dg/pr63665.c: New testcase. From-SVN: r216781
Diffstat (limited to 'gcc/fold-const.c')
-rw-r--r--gcc/fold-const.c3
1 files changed, 2 insertions, 1 deletions
diff --git a/gcc/fold-const.c b/gcc/fold-const.c
index 8166070..218afa0 100644
--- a/gcc/fold-const.c
+++ b/gcc/fold-const.c
@@ -8749,7 +8749,8 @@ fold_comparison (location_t loc, enum tree_code code, tree type,
/* If the constant operation overflowed this can be
simplified as a comparison against INT_MAX/INT_MIN. */
- if (TREE_OVERFLOW (new_const))
+ if (TREE_OVERFLOW (new_const)
+ && !TYPE_OVERFLOW_WRAPS (TREE_TYPE (arg0)))
{
int const1_sgn = tree_int_cst_sgn (const1);
enum tree_code code2 = code;