re PR tree-optimization/69214 (ICE (segfault) at -Os on x86_64-linux-gnu in "fail_abn...
authorJakub Jelinek <jakub@redhat.com>
Mon, 11 Jan 2016 17:56:39 +0000 (18:56 +0100)
committerJakub Jelinek <jakub@gcc.gnu.org>
Mon, 11 Jan 2016 17:56:39 +0000 (18:56 +0100)
PR tree-optimization/69214
* tree-vrp.c (simplify_cond_using_ranges): Don't propagate
innerop into a comparison if SSA_NAME_OCCURS_IN_ABNORMAL_PHI.
Formatting fix.

* gcc.c-torture/compile/pr69214.c: New test.

From-SVN: r232235

gcc/ChangeLog
gcc/testsuite/ChangeLog
gcc/testsuite/gcc.c-torture/compile/pr69214.c [new file with mode: 0644]
gcc/tree-vrp.c

index 6ae3248..4f4bb00 100644 (file)
@@ -1,5 +1,10 @@
 2016-01-11  Jakub Jelinek  <jakub@redhat.com>
 
+       PR tree-optimization/69214
+       * tree-vrp.c (simplify_cond_using_ranges): Don't propagate
+       innerop into a comparison if SSA_NAME_OCCURS_IN_ABNORMAL_PHI.
+       Formatting fix.
+
        PR tree-optimization/69207
        * tree-vect-slp.c (vect_get_constant_vectors): For
        VECTOR_BOOLEAN_TYPE_P, assert op has integral type instead of
index 8c05bf8..1497f00 100644 (file)
@@ -1,3 +1,8 @@
+2016-01-11  Jakub Jelinek  <jakub@redhat.com>
+
+       PR tree-optimization/69214
+       * gcc.c-torture/compile/pr69214.c: New test.
+
 2016-01-11  Uros Bizjak  <ubizjak@gmail.com>
 
        * gcc.target/i386/pr66232-10.c: Do not compile on ia32 target.
diff --git a/gcc/testsuite/gcc.c-torture/compile/pr69214.c b/gcc/testsuite/gcc.c-torture/compile/pr69214.c
new file mode 100644 (file)
index 0000000..61728f5
--- /dev/null
@@ -0,0 +1,17 @@
+/* PR tree-optimization/69214 */
+
+extern void bar (void);
+extern int __setjmp (char *);
+
+void
+foo (char *p)
+{
+  int d = 0;
+  bar ();
+  if (__setjmp (p))
+    return;
+  long a = d;
+  d = 8;
+  if (!a)
+    bar ();
+}
index e6c11e0..920a9b1 100644 (file)
@@ -9478,7 +9478,8 @@ simplify_cond_using_ranges (gcond *stmt)
 
       if (TREE_CODE (innerop) == SSA_NAME
          && !POINTER_TYPE_P (TREE_TYPE (innerop))
-         && desired_pro_or_demotion_p (TREE_TYPE (innerop), TREE_TYPE (op0)))
+         && !SSA_NAME_OCCURS_IN_ABNORMAL_PHI (innerop)
+         && desired_pro_or_demotion_p (TREE_TYPE (innerop), TREE_TYPE (op0)))
        {
          value_range *vr = get_value_range (innerop);
 
@@ -9509,8 +9510,8 @@ simplify_cond_using_ranges (gcond *stmt)
                  else
                    location = gimple_location (stmt);
                  warning_at (location, OPT_Wstrict_overflow,
-                     "assuming signed overflow does not occur when "
-                     "simplifying conditional");
+                             "assuming signed overflow does not occur when "
+                             "simplifying conditional");
                }
 
              tree newconst = fold_convert (TREE_TYPE (innerop), op1);