diff options
author | Marek Polacek <polacek@redhat.com> | 2015-08-27 17:07:35 +0000 |
---|---|---|
committer | Marek Polacek <mpolacek@gcc.gnu.org> | 2015-08-27 17:07:35 +0000 |
commit | b7e36a33eb4b756440b9a93f812414a42800f38b (patch) | |
tree | cae0692e9b91e7fb38962e506c13e43fc46937bd /gcc | |
parent | 078c4a8c534aa3a22735cd0af4b168ed844b671a (diff) | |
download | gcc-b7e36a33eb4b756440b9a93f812414a42800f38b.zip gcc-b7e36a33eb4b756440b9a93f812414a42800f38b.tar.gz gcc-b7e36a33eb4b756440b9a93f812414a42800f38b.tar.bz2 |
re PR middle-end/67005 (ICE: in verify_loop_structure, at cfgloop.c:1647 (loop with header n not in loop tree))
PR middle-end/67005
* tree-ssa-dce.c (remove_dead_stmt): Also schedule fixup if removing
an entry into an irreducible region.
* gcc.dg/torture/pr67005.c: New test.
From-SVN: r227268
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/ChangeLog | 6 | ||||
-rw-r--r-- | gcc/testsuite/ChangeLog | 5 | ||||
-rw-r--r-- | gcc/testsuite/gcc.dg/torture/pr67005.c | 15 | ||||
-rw-r--r-- | gcc/tree-ssa-dce.c | 9 |
4 files changed, 31 insertions, 4 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 6661c96..c9b3c3a 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,9 @@ +2015-08-27 Marek Polacek <polacek@redhat.com> + + PR middle-end/67005 + * tree-ssa-dce.c (remove_dead_stmt): Also schedule fixup if removing + an entry into an irreducible region. + 2015-08-27 Francois-Xavier Coudert <fxcoudert@gcc.gnu.org> * configure: Regenerate. diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 45a01c5..ef3ada0 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,8 @@ +2015-08-27 Marek Polacek <polacek@redhat.com> + + PR middle-end/67005 + * gcc.dg/torture/pr67005.c: New test. + 2015-08-27 Alan Lawrence <alan.lawrence@arm.com> * gcc.dg/tree-ssa/sra-15.c: New. diff --git a/gcc/testsuite/gcc.dg/torture/pr67005.c b/gcc/testsuite/gcc.dg/torture/pr67005.c new file mode 100644 index 0000000..922c5c4 --- /dev/null +++ b/gcc/testsuite/gcc.dg/torture/pr67005.c @@ -0,0 +1,15 @@ +/* { dg-do compile } */ + +int a; +void +f (void) +{ + if (!a); + else + lbl: + a = a; + + if (a) + a = 8; + goto lbl; +} diff --git a/gcc/tree-ssa-dce.c b/gcc/tree-ssa-dce.c index 2d2edc8..50dfded 100644 --- a/gcc/tree-ssa-dce.c +++ b/gcc/tree-ssa-dce.c @@ -1125,10 +1125,11 @@ remove_dead_stmt (gimple_stmt_iterator *i, basic_block bb) if (e != e2) { cfg_altered = true; - /* If we made a BB unconditionally exit a loop then this - transform alters the set of BBs in the loop. Schedule - a fixup. */ - if (loop_exit_edge_p (bb->loop_father, e)) + /* If we made a BB unconditionally exit a loop or removed + an entry into an irreducible region, then this transform + alters the set of BBs in the loop. Schedule a fixup. */ + if (loop_exit_edge_p (bb->loop_father, e) + || (e2->dest->flags & BB_IRREDUCIBLE_LOOP)) loops_state_set (LOOPS_NEED_FIXUP); remove_edge (e2); } |