diff options
author | Richard Biener <rguenther@suse.de> | 2015-07-08 11:47:42 +0000 |
---|---|---|
committer | Richard Biener <rguenth@gcc.gnu.org> | 2015-07-08 11:47:42 +0000 |
commit | cd6bbb330d4f8883d2eb5fd97502291aa80853b3 (patch) | |
tree | 265fe7b6d7f9b0b2163e133b1cd957a8ff24da6b | |
parent | 9158295f82ca314206f02377f59ca1e21bb98020 (diff) | |
download | gcc-cd6bbb330d4f8883d2eb5fd97502291aa80853b3.zip gcc-cd6bbb330d4f8883d2eb5fd97502291aa80853b3.tar.gz gcc-cd6bbb330d4f8883d2eb5fd97502291aa80853b3.tar.bz2 |
re PR tree-optimization/66794 (ICE at -O2 and -O3 on x86_64-linux-gnu)
2015-07-08 Richard Biener <rguenther@suse.de>
PR tree-optimization/66794
* passes.c (execute_function_todo): Assert that post-dominators
are not computed.
* gimple-ssa-isolate-paths.c (gimple_ssa_isolate_erroneous_paths):
Free post-dominators.
* gcc.dg/torture/pr66794.c: New testcase.
From-SVN: r225545
-rw-r--r-- | gcc/ChangeLog | 8 | ||||
-rw-r--r-- | gcc/gimple-ssa-isolate-paths.c | 2 | ||||
-rw-r--r-- | gcc/passes.c | 1 | ||||
-rw-r--r-- | gcc/testsuite/ChangeLog | 5 | ||||
-rw-r--r-- | gcc/testsuite/gcc.dg/torture/pr66794.c | 22 |
5 files changed, 37 insertions, 1 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog index a4c4b76..d385809 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,11 @@ +2015-07-08 Richard Biener <rguenther@suse.de> + + PR tree-optimization/66794 + * passes.c (execute_function_todo): Assert that post-dominators + are not computed. + * gimple-ssa-isolate-paths.c (gimple_ssa_isolate_erroneous_paths): + Free post-dominators. + 2015-07-08 Andreas Krebbel <krebbel@linux.vnet.ibm.com> * config/s390/s390.c (s390_init_frame_layout): Replace assertion diff --git a/gcc/gimple-ssa-isolate-paths.c b/gcc/gimple-ssa-isolate-paths.c index 8b98d76..b437182 100644 --- a/gcc/gimple-ssa-isolate-paths.c +++ b/gcc/gimple-ssa-isolate-paths.c @@ -488,10 +488,10 @@ gimple_ssa_isolate_erroneous_paths (void) /* We scramble the CFG and loop structures a bit, clean up appropriately. We really should incrementally update the loop structures, in theory it shouldn't be that hard. */ + free_dominance_info (CDI_POST_DOMINATORS); if (cfg_altered) { free_dominance_info (CDI_DOMINATORS); - free_dominance_info (CDI_POST_DOMINATORS); loops_state_set (LOOPS_NEED_FIXUP); return TODO_cleanup_cfg | TODO_update_ssa; } diff --git a/gcc/passes.c b/gcc/passes.c index 6292fd2..a2afb0a 100644 --- a/gcc/passes.c +++ b/gcc/passes.c @@ -1929,6 +1929,7 @@ execute_function_todo (function *fn, void *data) if (flags & TODO_rebuild_cgraph_edges) cgraph_edge::rebuild_edges (); + gcc_assert (dom_info_state (fn, CDI_POST_DOMINATORS) == DOM_NONE); /* If we've seen errors do not bother running any verifiers. */ if (!seen_error ()) { diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 7370e8f..7414562 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,8 @@ +2015-07-08 Richard Biener <rguenther@suse.de> + + PR tree-optimization/66794 + * gcc.dg/torture/pr66794.c: New testcase. + 2015-07-08 Marek Polacek <polacek@redhat.com> PR c++/66748 diff --git a/gcc/testsuite/gcc.dg/torture/pr66794.c b/gcc/testsuite/gcc.dg/torture/pr66794.c new file mode 100644 index 0000000..03eeec7 --- /dev/null +++ b/gcc/testsuite/gcc.dg/torture/pr66794.c @@ -0,0 +1,22 @@ +/* { dg-do compile } */ +/* { dg-additional-options "-w" } */ + +int a, *b, e; +static int **c = &b; + +struct +{ + int f0; +} d; + +int * +fn1 () +{ + int f, **g = &b; + e = a; + for (; a;) + for (; d.f0; d.f0++) + ; + *g = &f; + return *c; +} |