]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
re PR tree-optimization/80788 (ICE in set_value_range, at tree-vrp.c:252)
authorJakub Jelinek <jakub@redhat.com>
Tue, 28 Nov 2017 08:40:36 +0000 (09:40 +0100)
committerJakub Jelinek <jakub@gcc.gnu.org>
Tue, 28 Nov 2017 08:40:36 +0000 (09:40 +0100)
PR tree-optimization/80788
* match.pd (X +- C1 CMP C2 -> X CMP C2 -+ C1): If res
has TREE_OVERFLOW set, call drop_tree_overflow.

* gcc.dg/pr80788.c: New test.

From-SVN: r255191

gcc/ChangeLog
gcc/match.pd
gcc/testsuite/ChangeLog
gcc/testsuite/gcc.dg/pr80788.c [new file with mode: 0644]

index 7f5e6cb4573516d47dc828a923c84aea8b44a1cc..fd378bd5267565cb1dc024b7d6c6960cf01694f4 100644 (file)
@@ -1,3 +1,9 @@
+2017-11-28  Jakub Jelinek  <jakub@redhat.com>
+
+       PR tree-optimization/80788
+       * match.pd (X +- C1 CMP C2 -> X CMP C2 -+ C1): If res
+       has TREE_OVERFLOW set, call drop_tree_overflow.
+
 2017-11-28  Richard Biener  <rguenther@suse.de>
 
        PR tree-optimization/83158
index 9db48bda047b6af8278894f38e521a1b757baa5f..53f8b86b7d5613cf880090e6f2f51d6605d7b082 100644 (file)
@@ -4393,7 +4393,8 @@ DEFINE_INT_AND_FLOAT_ROUND_FN (RINT)
          && TYPE_OVERFLOW_UNDEFINED (TREE_TYPE (@0)))
       { constant_boolean_node (cmp == NE_EXPR, type); }
       (if (single_use (@3))
-       (cmp @0 { res; }))))))))
+       (cmp @0 { TREE_OVERFLOW (res)
+                ? drop_tree_overflow (res) : res; }))))))))
 (for cmp (lt le gt ge)
  (for op (plus minus)
       rop (minus plus)
index ab587a0d83f63be2f82906260e7ef5c66ff97567..fd6475f31b3a43ee9b22d858f7842555b588a3b1 100644 (file)
@@ -1,3 +1,8 @@
+2017-11-28  Jakub Jelinek  <jakub@redhat.com>
+
+       PR tree-optimization/80788
+       * gcc.dg/pr80788.c: New test.
+
 2017-11-27  Martin Sebor  <msebor@redhat.com>
 
        PR c++/83058
diff --git a/gcc/testsuite/gcc.dg/pr80788.c b/gcc/testsuite/gcc.dg/pr80788.c
new file mode 100644 (file)
index 0000000..b14d371
--- /dev/null
@@ -0,0 +1,13 @@
+/* PR tree-optimization/80788 */
+/* { dg-do compile } */
+/* { dg-options "-O2 -fwrapv" } */
+
+void
+foo (signed char x)
+{
+  signed char a = (x + 1) ^ 128;
+  x &= !!a;
+  if (x != 0)
+    for (;;)
+      ;
+}