From: Richard Biener Date: Fri, 15 Jul 2016 13:05:56 +0000 (+0000) Subject: re PR tree-optimization/71881 (ICE on valid code at -O3 with -g enabled on x86_64... X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=b9aba0a05820874b01e67264a02494d5d8d27309;p=gcc.git re PR tree-optimization/71881 (ICE on valid code at -O3 with -g enabled on x86_64-linux-gnu: cannot update SSA form) 2016-07-15 Richard Biener 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 --- diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 318baa20411..9e393803eb2 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,9 @@ +2016-07-15 Richard Biener + + 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 PR tree-optimization/71887 diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index b4892fcd515..c3a56007ac0 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,8 @@ +2016-07-15 Richard Biener + + PR tree-optimization/71881 + * gcc.dg/torture/pr71881.c: New testcase. + 2016-07-15 Richard Biener 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 index 00000000000..b17db1b21c1 --- /dev/null +++ b/gcc/testsuite/gcc.dg/torture/pr71881.c @@ -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; +} diff --git a/gcc/tree-loop-distribution.c b/gcc/tree-loop-distribution.c index 9bca56a9b6f..181e4e9ed7d 100644 --- a/gcc/tree-loop-distribution.c +++ b/gcc/tree-loop-distribution.c @@ -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,