re PR tree-optimization/71881 (ICE on valid code at -O3 with -g enabled on x86_64...
authorRichard Biener <rguenther@suse.de>
Fri, 15 Jul 2016 13:05:56 +0000 (13:05 +0000)
committerRichard Biener <rguenth@gcc.gnu.org>
Fri, 15 Jul 2016 13:05:56 +0000 (13:05 +0000)
2016-07-15  Richard Biener  <rguenther@suse.de>

PR tree-optimization/71881
* tree-loop-distribution.c (destroy_loop): Remove blocks in
reverse DOM order to make debug temp generation happy.

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

From-SVN: r238374

gcc/ChangeLog
gcc/testsuite/ChangeLog
gcc/testsuite/gcc.dg/torture/pr71881.c [new file with mode: 0644]
gcc/tree-loop-distribution.c

index 318baa2041136dac98a9cd6ba4841404096ee7fe..9e393803eb2310468240b1f077fd507d32d968fc 100644 (file)
@@ -1,3 +1,9 @@
+2016-07-15  Richard Biener  <rguenther@suse.de>
+
+       PR tree-optimization/71881
+       * tree-loop-distribution.c (destroy_loop): Remove blocks in
+       reverse DOM order to make debug temp generation happy.
+
 2016-07-15  Richard Biener  <rguenther@suse.de>
 
        PR tree-optimization/71887
index b4892fcd51518b2dbc01124a4b856dea8fe4f314..c3a56007ac07ed5038a3ba92a31388c7bc8f5b30 100644 (file)
@@ -1,3 +1,8 @@
+2016-07-15  Richard Biener  <rguenther@suse.de>
+
+       PR tree-optimization/71881
+       * gcc.dg/torture/pr71881.c: New testcase.
+
 2016-07-15  Richard Biener  <rguenther@suse.de>
 
        PR tree-optimization/71887
diff --git a/gcc/testsuite/gcc.dg/torture/pr71881.c b/gcc/testsuite/gcc.dg/torture/pr71881.c
new file mode 100644 (file)
index 0000000..b17db1b
--- /dev/null
@@ -0,0 +1,25 @@
+/* { dg-do compile } */
+/* { dg-additional-options "-g" } */
+
+int a, b, c, d, *e, f, g;
+
+int fn1 ()
+{
+  char h[2];
+  int i = 0;
+  for (; i < 2; i++)
+    {
+      if (c)
+       for (*e = 0; *e;)
+         {
+           int j[f];
+           i = *e;
+         }
+      h[i] = 0;
+    }
+  for (; a;)
+    return h[0];
+  for (b = 0; b;)
+    i = g = (1 & i) < d;
+  return 0;
+}
index 9bca56a9b6f6682881a894052d1ba05c0e4bc16e..181e4e9ed7d8b43be2e482c1ed68e98590868930 100644 (file)
@@ -888,13 +888,15 @@ destroy_loop (struct loop *loop)
   cancel_loop_tree (loop);
   rescan_loop_exit (exit, false, true);
 
-  for (i = 0; i < nbbs; i++)
+  i = nbbs;
+  do
     {
       /* We have made sure to not leave any dangling uses of SSA
          names defined in the loop.  With the exception of virtuals.
         Make sure we replace all uses of virtual defs that will remain
         outside of the loop with the bare symbol as delete_basic_block
         will release them.  */
+      --i;
       for (gphi_iterator gsi = gsi_start_phis (bbs[i]); !gsi_end_p (gsi);
           gsi_next (&gsi))
        {
@@ -912,6 +914,8 @@ destroy_loop (struct loop *loop)
        }
       delete_basic_block (bbs[i]);
     }
+  while (i != 0);
+
   free (bbs);
 
   set_immediate_dominator (CDI_DOMINATORS, dest,