From b1483e87c9e95b7950571b7eff59643985480c39 Mon Sep 17 00:00:00 2001 From: Jakub Jelinek Date: Sat, 14 Apr 2007 20:52:45 +0200 Subject: [PATCH] re PR c++/25874 ([gomp] ICE in calc_dfs_tree()) PR c++/25874 * omp-low.c (expand_omp_parallel): If child_cfun->cfg, free dominators, post dominators and cleanup cfg before returning. * gcc.dg/gomp/pr25874.c: Add dg-options. * g++.dg/gomp/pr25874.C: Add dg-options. From-SVN: r123822 --- gcc/ChangeLog | 6 ++++++ gcc/omp-low.c | 10 ++++++++++ gcc/testsuite/ChangeLog | 6 ++++++ gcc/testsuite/g++.dg/gomp/pr25874.C | 2 ++ gcc/testsuite/gcc.dg/gomp/pr25874.c | 2 ++ 5 files changed, 26 insertions(+) diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 016c62ade40..c564780fe1f 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,9 @@ +2007-04-14 Jakub Jelinek + + PR c++/25874 + * omp-low.c (expand_omp_parallel): If child_cfun->cfg, free dominators, + post dominators and cleanup cfg before returning. + 2007-04-14 Bernd Schmidt * config/bfin/bfin.h (MODES_TIEABLE_P): Allow more modes to be tied. diff --git a/gcc/omp-low.c b/gcc/omp-low.c index f176f9e4102..5715812c2dc 100644 --- a/gcc/omp-low.c +++ b/gcc/omp-low.c @@ -2409,6 +2409,7 @@ expand_omp_parallel (struct omp_region *region) block_stmt_iterator si; tree entry_stmt; edge e; + bool do_cleanup_cfg = false; entry_stmt = last_stmt (region->entry); child_fn = OMP_PARALLEL_FN (entry_stmt); @@ -2444,6 +2445,7 @@ expand_omp_parallel (struct omp_region *region) exit_succ_e = single_succ_edge (exit_bb); make_edge (new_bb, exit_succ_e->dest, EDGE_FALLTHRU); } + do_cleanup_cfg = true; } else { @@ -2537,6 +2539,14 @@ expand_omp_parallel (struct omp_region *region) /* Emit a library call to launch the children threads. */ expand_parallel_call (region, new_bb, entry_stmt, ws_args); + + if (do_cleanup_cfg) + { + /* Clean up the unreachable sub-graph we created above. */ + free_dominance_info (CDI_DOMINATORS); + free_dominance_info (CDI_POST_DOMINATORS); + cleanup_tree_cfg (); + } } diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 29ee918ee37..2d2c891a366 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,9 @@ +2007-04-14 Jakub Jelinek + + PR c++/25874 + * gcc.dg/gomp/pr25874.c: Add dg-options. + * g++.dg/gomp/pr25874.C: Add dg-options. + 2007-04-14 Bernhard Fischer PR fortran/21061 diff --git a/gcc/testsuite/g++.dg/gomp/pr25874.C b/gcc/testsuite/g++.dg/gomp/pr25874.C index 02adef97f56..83573f10a57 100644 --- a/gcc/testsuite/g++.dg/gomp/pr25874.C +++ b/gcc/testsuite/g++.dg/gomp/pr25874.C @@ -1,3 +1,5 @@ +// { dg-options "-O -fopenmp" } + int foo(); struct wigner_d diff --git a/gcc/testsuite/gcc.dg/gomp/pr25874.c b/gcc/testsuite/gcc.dg/gomp/pr25874.c index 568e1f04f88..2afd02ea326 100644 --- a/gcc/testsuite/gcc.dg/gomp/pr25874.c +++ b/gcc/testsuite/gcc.dg/gomp/pr25874.c @@ -1,3 +1,5 @@ +/* { dg-options "-O -fopenmp" } */ + void foo(); inline void bar()