diff options
| author | ian <ian@138bc75d-0d04-0410-961f-82ee72b054a4> | 2007-06-01 22:47:02 +0000 |
|---|---|---|
| committer | ian <ian@138bc75d-0d04-0410-961f-82ee72b054a4> | 2007-06-01 22:47:02 +0000 |
| commit | 7192d2a6766449e2b9e222498f798ce46dcfcab0 (patch) | |
| tree | 103f55ccc2020c73fac60b1aac6912c7db6c30af | |
| parent | 532efc2a17b60a1a38b61fbe33004232fa0eb881 (diff) | |
| download | ppe42-gcc-7192d2a6766449e2b9e222498f798ce46dcfcab0.tar.gz ppe42-gcc-7192d2a6766449e2b9e222498f798ce46dcfcab0.zip | |
./:
* tree-vrp.c (compare_name_with_value): Always set
used_strict_overflow if we get a result from the variable itself.
testsuite/:
* gcc.dg/Wstrict-overflow-17.c: New test.
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@125269 138bc75d-0d04-0410-961f-82ee72b054a4
| -rw-r--r-- | gcc/ChangeLog | 5 | ||||
| -rw-r--r-- | gcc/testsuite/ChangeLog | 4 | ||||
| -rw-r--r-- | gcc/testsuite/gcc.dg/Wstrict-overflow-17.c | 20 | ||||
| -rw-r--r-- | gcc/tree-vrp.c | 4 |
4 files changed, 31 insertions, 2 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog index ece60c7ae48..87d2444b48b 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,5 +1,10 @@ 2007-06-01 Ian Lance Taylor <iant@google.com> + * tree-vrp.c (compare_name_with_value): Always set + used_strict_overflow if we get a result from the variable itself. + +2007-06-01 Ian Lance Taylor <iant@google.com> + PR rtl-optimization/31455 * lower-subreg.c (find_decomposable_subregs): Don't decompose subregs which have a cast between modes which are not tieable. diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 9f011b00809..6d4256893a1 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,7 @@ +2007-06-01 Ian Lance Taylor <iant@google.com> + + * gcc.dg/Wstrict-overflow-17.c: New test. + 2007-06-01 Kazu Hirata <kazu@codesourcery.com> * gcc.dg/builtin-return-1.c (g): New. diff --git a/gcc/testsuite/gcc.dg/Wstrict-overflow-17.c b/gcc/testsuite/gcc.dg/Wstrict-overflow-17.c new file mode 100644 index 00000000000..5625bc2a7f3 --- /dev/null +++ b/gcc/testsuite/gcc.dg/Wstrict-overflow-17.c @@ -0,0 +1,20 @@ +/* { dg-do compile } */ +/* { dg-options "-fstrict-overflow -O2 -Wstrict-overflow" } */ + +/* This erroneously gave an overflow warning. */ + +extern void bar (char); +void +foo (char *s) +{ + int len, i; + + for (len = 1; len < 5000; ++len) + { + for (i = 0; i < len; ++i) + { + if (s[i] != '\0') + bar (s[i]); + } + } +} diff --git a/gcc/tree-vrp.c b/gcc/tree-vrp.c index 80744d67968..e0a55a86eac 100644 --- a/gcc/tree-vrp.c +++ b/gcc/tree-vrp.c @@ -4676,8 +4676,8 @@ compare_name_with_value (enum tree_code comp, tree var, tree val, equiv_vr = get_vr_for_comparison (SSA_NAME_VERSION (var)); sop = false; retval = compare_range_with_value (comp, &equiv_vr, val, &sop); - if (sop) - used_strict_overflow = 1; + if (retval) + used_strict_overflow = sop ? 1 : 0; /* If the equiv set is empty we have done all work we need to do. */ if (e == NULL) |

