diff options
author | Richard Guenther <rguenther@suse.de> | 2008-05-13 14:01:53 +0000 |
---|---|---|
committer | Richard Biener <rguenth@gcc.gnu.org> | 2008-05-13 14:01:53 +0000 |
commit | 8ebc39d80aceb9bf0e0a49160c3fe6843759bddb (patch) | |
tree | 2f6651d22d1a494fcf417cb3eb39bfffc2c0529a /gcc | |
parent | f80cddcb5d45179f285da0a56a36db694935148d (diff) | |
download | gcc-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/ChangeLog | 6 | ||||
-rw-r--r-- | gcc/fold-const.c | 3 | ||||
-rw-r--r-- | gcc/testsuite/ChangeLog | 5 | ||||
-rw-r--r-- | gcc/testsuite/gcc.dg/pr36227.c | 12 |
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; +} + |