diff options
-rw-r--r-- | gcc/ChangeLog | 6 | ||||
-rw-r--r-- | gcc/testsuite/ChangeLog | 4 | ||||
-rw-r--r-- | gcc/testsuite/gcc.dg/tree-ssa/vrp117.c | 16 | ||||
-rw-r--r-- | gcc/tree-vrp.c | 6 |
4 files changed, 30 insertions, 2 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 658a8e2..bed4516 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,9 @@ +2017-08-17 Richard Biener <rguenther@suse.de> + + * tree-vrp.c (vrp_int_const_binop): Do not set *overflow_p + to true when overflow is undefined and we saturated the + result. + 2017-08-17 Alan Modra <amodra@gmail.com> PR target/80938 diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index c6f729a..2b2183f 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,7 @@ +2017-08-17 Richard Biener <rguenther@suse.de> + + * gcc.dg/tree-ssa/vrp117.c: New testcase. + 2017-08-16 Uros Bizjak <ubizjak@gmail.com> * c-c++-common/patchable_function_entry-decl.c (dg-final): Adapt diff --git a/gcc/testsuite/gcc.dg/tree-ssa/vrp117.c b/gcc/testsuite/gcc.dg/tree-ssa/vrp117.c new file mode 100644 index 0000000..d07a672 --- /dev/null +++ b/gcc/testsuite/gcc.dg/tree-ssa/vrp117.c @@ -0,0 +1,16 @@ +/* { dg-do compile } */ +/* { dg-options "-O2 -fdump-tree-evrp" } */ + +void link_error (void); + +void foo (int i) +{ + if (i > __INT_MAX__ - 10) + { + int j = i * 10; + if (j < i) + link_error (); + } +} + +/* { dg-final { scan-tree-dump-not "link_error" "evrp" } } */ diff --git a/gcc/tree-vrp.c b/gcc/tree-vrp.c index 657a8d1..e3735ff 100644 --- a/gcc/tree-vrp.c +++ b/gcc/tree-vrp.c @@ -1614,6 +1614,8 @@ vrp_int_const_binop (enum tree_code code, tree val1, tree val2, signop sign = TYPE_SIGN (TREE_TYPE (val1)); wide_int res; + *overflow_p = false; + switch (code) { case RSHIFT_EXPR: @@ -1685,8 +1687,6 @@ vrp_int_const_binop (enum tree_code code, tree val1, tree val2, gcc_unreachable (); } - *overflow_p = overflow; - if (overflow && TYPE_OVERFLOW_UNDEFINED (TREE_TYPE (val1))) { @@ -1730,6 +1730,8 @@ vrp_int_const_binop (enum tree_code code, tree val1, tree val2, TYPE_SIGN (TREE_TYPE (val1))); } + *overflow_p = overflow; + return res; } |