re PR rtl-optimization/25224 (ICE in initialize_original_copy_tables)
authorJan Hubicka <jh@suse.cz>
Thu, 15 Dec 2005 23:52:16 +0000 (00:52 +0100)
committerJan Hubicka <hubicka@gcc.gnu.org>
Thu, 15 Dec 2005 23:52:16 +0000 (23:52 +0000)
PR rtl-optimization/25224
* tree-ssa-loop-unswitch.c (tree_unswitch_single_loop): Free copy
tables.

From-SVN: r108606

gcc/ChangeLog
gcc/testsuite/ChangeLog
gcc/testsuite/gcc.c-torture/compile/pr25224.c [new file with mode: 0644]
gcc/tree-ssa-loop-unswitch.c

index a3f97a1..0690daa 100644 (file)
@@ -1,3 +1,9 @@
+2005-12-16  Jan Hubicka  <jh@suse.cz>
+
+       PR rtl-optimization/25224
+       * tree-ssa-loop-unswitch.c (tree_unswitch_single_loop): Free copy
+       tables.
+
 2005-12-15  Zdenek Dvorak <dvorakz@suse.cz>
            Steven Bosscher <stevenb@suse.de>
 
index 39fa89c..ddc0b83 100644 (file)
@@ -1,3 +1,7 @@
+2005-12-16  Jan Hubicka  <jh@suse.cz>
+
+       * gcc.c-torture/combine/pr25224.c: New.
+
 2005-12-15  Joseph S. Myers  <joseph@codesourcery.com>
 
        PR other/25028
diff --git a/gcc/testsuite/gcc.c-torture/compile/pr25224.c b/gcc/testsuite/gcc.c-torture/compile/pr25224.c
new file mode 100644 (file)
index 0000000..0ccf0cd
--- /dev/null
@@ -0,0 +1,20 @@
+/* { dg-options "-funswitch-loops" } */
+static float rgam;
+extern void *jmp(void *);
+
+void drotmg(float d1) {
+void *labels[] = { &&L170, &&L180, 0 };
+
+  for(;;) {
+    goto *jmp(labels);
+    if (d1 <= rgam)
+      goto L170;
+
+L170:
+    if (d1 <= rgam)
+      goto L170;
+  }
+
+L180:
+  goto L170;
+}
index d0625c5..f896354 100644 (file)
@@ -253,7 +253,10 @@ tree_unswitch_single_loop (struct loops *loops, struct loop *loop, int num)
   /* Unswitch the loop on this condition.  */
   nloop = tree_unswitch_loop (loops, loop, bbs[i], cond);
   if (!nloop)
-    return changed;
+    {
+      free_original_copy_tables ();
+      return changed;
+    }
 
   /* Update the SSA form after unswitching.  */
   update_ssa (TODO_update_ssa);