diff --git a/gcc/ChangeLog b/gcc/ChangeLog index a3f97a1d303..0690daa5b3f 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,9 @@ +2005-12-16 Jan Hubicka + + PR rtl-optimization/25224 + * tree-ssa-loop-unswitch.c (tree_unswitch_single_loop): Free copy + tables. + 2005-12-15 Zdenek Dvorak Steven Bosscher diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 39fa89ceb60..ddc0b83b775 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,7 @@ +2005-12-16 Jan Hubicka + + * gcc.c-torture/combine/pr25224.c: New. + 2005-12-15 Joseph S. Myers 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 index 00000000000..0ccf0cdf333 --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/compile/pr25224.c @@ -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; +} diff --git a/gcc/tree-ssa-loop-unswitch.c b/gcc/tree-ssa-loop-unswitch.c index d0625c52ec9..f8963548fee 100644 --- a/gcc/tree-ssa-loop-unswitch.c +++ b/gcc/tree-ssa-loop-unswitch.c @@ -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);