From cd6bbb330d4f8883d2eb5fd97502291aa80853b3 Mon Sep 17 00:00:00 2001 From: Richard Biener Date: Wed, 8 Jul 2015 11:47:42 +0000 Subject: [PATCH] re PR tree-optimization/66794 (ICE at -O2 and -O3 on x86_64-linux-gnu) 2015-07-08 Richard Biener 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 --- gcc/ChangeLog | 8 ++++++++ gcc/gimple-ssa-isolate-paths.c | 2 +- gcc/passes.c | 1 + gcc/testsuite/ChangeLog | 5 +++++ gcc/testsuite/gcc.dg/torture/pr66794.c | 22 ++++++++++++++++++++++ 5 files changed, 37 insertions(+), 1 deletion(-) create mode 100644 gcc/testsuite/gcc.dg/torture/pr66794.c diff --git a/gcc/ChangeLog b/gcc/ChangeLog index a4c4b7686c7..d3858096dea 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,11 @@ +2015-07-08 Richard Biener + + 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 * 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 8b98d76e510..b437182be6d 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 6292fd263c4..a2afb0aa614 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 7370e8fe3db..7414562229f 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,8 @@ +2015-07-08 Richard Biener + + PR tree-optimization/66794 + * gcc.dg/torture/pr66794.c: New testcase. + 2015-07-08 Marek Polacek 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 00000000000..03eeec732bc --- /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; +} -- 2.30.2