diff options
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/ChangeLog | 6 | ||||
-rw-r--r-- | gcc/testsuite/ChangeLog | 5 | ||||
-rw-r--r-- | gcc/testsuite/gcc.dg/Wstrict-overflow-26.c | 16 | ||||
-rw-r--r-- | gcc/tree-vrp.c | 5 |
4 files changed, 30 insertions, 2 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 85bc361..b8b9f30 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,9 @@ +2014-10-09 Richard Biener <rguenther@suse.de> + + PR tree-optimization/63445 + * tree-vrp.c (simplify_cond_using_ranges): Only warn about + overflow for non-equality compares. + 2014-10-09 Uros Bizjak <ubizjak@gmail.com> PR rtl-optimization/57003 diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index b282bc7..a8870ea 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,8 @@ +2014-10-09 Richard Biener <rguenther@suse.de> + + PR tree-optimization/63445 + * gcc.dg/Wstrict-overflow-26.c: New testcase. + 2014-10-08 Pat Haugen <pthaugen@us.ibm.com> * gcc.dg/vmx/3c-01a.c: Add default options from vmx.exp. diff --git a/gcc/testsuite/gcc.dg/Wstrict-overflow-26.c b/gcc/testsuite/gcc.dg/Wstrict-overflow-26.c new file mode 100644 index 0000000..ef805b5 --- /dev/null +++ b/gcc/testsuite/gcc.dg/Wstrict-overflow-26.c @@ -0,0 +1,16 @@ +/* { dg-do compile } */ +/* { dg-options "-O2 -Wstrict-overflow" } */ + +int +f (int i, int j) +{ + unsigned int c = 0; + if (i < j) + { + unsigned int n = j - i; + unsigned int i; + for (i = 0; i < n; i++) /* { dg-bogus "signed overflow" } */ + c++; + } + return c; +} diff --git a/gcc/tree-vrp.c b/gcc/tree-vrp.c index 011db78..7ca0528 100644 --- a/gcc/tree-vrp.c +++ b/gcc/tree-vrp.c @@ -9189,8 +9189,9 @@ simplify_cond_using_ranges (gimple stmt) /* If the range overflowed and the user has asked for warnings when strict overflow semantics were used to optimize code, issue an appropriate warning. */ - if ((is_negative_overflow_infinity (vr->min) - || is_positive_overflow_infinity (vr->max)) + if (cond_code != EQ_EXPR && cond_code != NE_EXPR + && (is_negative_overflow_infinity (vr->min) + || is_positive_overflow_infinity (vr->max)) && issue_strict_overflow_warning (WARN_STRICT_OVERFLOW_CONDITIONAL)) { location_t location; |