]> gcc.gnu.org Git - gcc.git/commitdiff
re PR middle-end/57026 (ice: SSA corruption)
authorRichard Biener <rguenther@suse.de>
Tue, 23 Apr 2013 08:08:25 +0000 (08:08 +0000)
committerRichard Biener <rguenth@gcc.gnu.org>
Tue, 23 Apr 2013 08:08:25 +0000 (08:08 +0000)
2013-04-23  Richard Biener  <rguenther@suse.de>

PR tree-optimization/57026
* tree-vrp.c (simplify_conversion_using_ranges): Do not propagate
from SSA names occuring in abnormal PHI nodes.

* gcc.dg/torture/pr57026.c: New testcase.

From-SVN: r198175

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

index 6349376789381affc697910d1c99821e02a7f3fa..fea5059e8e2b9727a01b6f94ccef7ae1b46b46b6 100644 (file)
@@ -1,3 +1,9 @@
+2013-04-23  Richard Biener  <rguenther@suse.de>
+
+       PR tree-optimization/57026
+       * tree-vrp.c (simplify_conversion_using_ranges): Do not propagate
+       from SSA names occuring in abnormal PHI nodes.
+
 2013-04-22  Andi Kleen  <ak@linux.intel.com>
 
        * lto/lto.c (print_lto_report_1): Fix LTO report names.
index d6be55c605fdc9de9b524574d9a6504cc829de6e..538ed997b2daa12258b5a7d1700c572e0da917cd 100644 (file)
@@ -1,3 +1,8 @@
+2013-04-23  Richard Biener  <rguenther@suse.de>
+
+       PR tree-optimization/57026
+       * gcc.dg/torture/pr57026.c: New testcase.
+
 2013-04-22  Janus Weil  <janus@gcc.gnu.org>
 
        PR fortran/53685
diff --git a/gcc/testsuite/gcc.dg/torture/pr57026.c b/gcc/testsuite/gcc.dg/torture/pr57026.c
new file mode 100644 (file)
index 0000000..e378954
--- /dev/null
@@ -0,0 +1,22 @@
+/* { dg-do compile } */
+
+typedef struct __jmp_buf_tag { char buf[1024]; } jmp_buf[1];
+extern int setjmp (jmp_buf);
+extern int bar (unsigned int *);
+extern jmp_buf *baz (void);
+struct C { int c1; unsigned int c2, c3, c4; };
+
+void
+foo (struct C *x, const int *y, unsigned int *z, unsigned int e, unsigned int g)
+{
+  unsigned int d = 0;
+  unsigned long f;
+  setjmp (*baz ());
+  f = d;
+  if ((x->c1 || x->c2) && g && (!e || d >= 8))
+    d = 16;
+  else
+    d = 8;
+  if ((!x->c3 && !x->c4 || *y == 0) && !e && bar (z))
+    *z = f;
+}
index 5b4321a3a27d3286c2a445122f5bf1d2d46997c7..cb4a09aa75c2505fcff2f38a94563dc1e1bf9224 100644 (file)
@@ -8752,7 +8752,8 @@ simplify_conversion_using_ranges (gimple stmt)
       || !CONVERT_EXPR_CODE_P (gimple_assign_rhs_code (def_stmt)))
     return false;
   innerop = gimple_assign_rhs1 (def_stmt);
-  if (TREE_CODE (innerop) != SSA_NAME)
+  if (TREE_CODE (innerop) != SSA_NAME
+      || SSA_NAME_OCCURS_IN_ABNORMAL_PHI (innerop))
     return false;
 
   /* Get the value-range of the inner operand.  */
This page took 0.103675 seconds and 5 git commands to generate.