aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorRichard Guenther <rguenther@suse.de>2008-05-13 14:01:53 +0000
committerRichard Biener <rguenth@gcc.gnu.org>2008-05-13 14:01:53 +0000
commit8ebc39d80aceb9bf0e0a49160c3fe6843759bddb (patch)
tree2f6651d22d1a494fcf417cb3eb39bfffc2c0529a /gcc
parentf80cddcb5d45179f285da0a56a36db694935148d (diff)
downloadgcc-8ebc39d80aceb9bf0e0a49160c3fe6843759bddb.zip
gcc-8ebc39d80aceb9bf0e0a49160c3fe6843759bddb.tar.gz
gcc-8ebc39d80aceb9bf0e0a49160c3fe6843759bddb.tar.bz2
re PR middle-end/36227 (POINTER_PLUS folding introduces undefined overflow)
2008-05-13 Richard Guenther <rguenther@suse.de> PR middle-end/36227 * fold-const.c (fold_sign_changed_comparison): Do not allow changes in pointer-ness. * gcc.dg/pr36227.c: New testcase. From-SVN: r135260
Diffstat (limited to 'gcc')
-rw-r--r--gcc/ChangeLog6
-rw-r--r--gcc/fold-const.c3
-rw-r--r--gcc/testsuite/ChangeLog5
-rw-r--r--gcc/testsuite/gcc.dg/pr36227.c12
4 files changed, 25 insertions, 1 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index cf2d013..efb05f2 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,9 @@
+2008-05-13 Richard Guenther <rguenther@suse.de>
+
+ PR middle-end/36227
+ * fold-const.c (fold_sign_changed_comparison): Do not allow
+ changes in pointer-ness.
+
2008-05-12 Kaz Kojima <kkojima@gcc.gnu.org>
PR target/24713
diff --git a/gcc/fold-const.c b/gcc/fold-const.c
index 358a616..c167bc4 100644
--- a/gcc/fold-const.c
+++ b/gcc/fold-const.c
@@ -6831,7 +6831,8 @@ fold_sign_changed_comparison (enum tree_code code, tree type,
&& TREE_TYPE (TREE_OPERAND (arg1, 0)) == inner_type))
return NULL_TREE;
- if (TYPE_UNSIGNED (inner_type) != TYPE_UNSIGNED (outer_type)
+ if ((TYPE_UNSIGNED (inner_type) != TYPE_UNSIGNED (outer_type)
+ || POINTER_TYPE_P (inner_type) != POINTER_TYPE_P (outer_type))
&& code != NE_EXPR
&& code != EQ_EXPR)
return NULL_TREE;
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog
index e870fb4..199a80e 100644
--- a/gcc/testsuite/ChangeLog
+++ b/gcc/testsuite/ChangeLog
@@ -1,3 +1,8 @@
+2008-05-13 Richard Guenther <rguenther@suse.de>
+
+ PR middle-end/36227
+ * gcc.dg/pr36227.c: New testcase.
+
2008-05-13 Eric Botcazou <ebotcazou@adacore.com>
* gnat.dg/discr7.adb: New test
diff --git a/gcc/testsuite/gcc.dg/pr36227.c b/gcc/testsuite/gcc.dg/pr36227.c
new file mode 100644
index 0000000..d665763
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/pr36227.c
@@ -0,0 +1,12 @@
+/* { dg-do compile } */
+/* { dg-options "-O2 -Wstrict-overflow=3" } */
+
+volatile unsigned long *
+sat_add(volatile unsigned long *ptr, unsigned long i, volatile unsigned long *end)
+{
+ if ((unsigned long)ptr + i * sizeof(*ptr) > (unsigned long)ptr) /* { dg-bogus "pointer wraparound" } */
+ return ptr + i;
+ else
+ return end;
+}
+