aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorJakub Jelinek <jakub@redhat.com>2007-04-14 20:52:45 +0200
committerJakub Jelinek <jakub@gcc.gnu.org>2007-04-14 20:52:45 +0200
commitb1483e87c9e95b7950571b7eff59643985480c39 (patch)
tree6d8feafd44f2de9032de4ce2c227a0a65c29c51f /gcc
parented5ee445f9f8f9147aa7367eec0d3ae08d902c60 (diff)
downloadgcc-b1483e87c9e95b7950571b7eff59643985480c39.zip
gcc-b1483e87c9e95b7950571b7eff59643985480c39.tar.gz
gcc-b1483e87c9e95b7950571b7eff59643985480c39.tar.bz2
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
Diffstat (limited to 'gcc')
-rw-r--r--gcc/ChangeLog6
-rw-r--r--gcc/omp-low.c10
-rw-r--r--gcc/testsuite/ChangeLog6
-rw-r--r--gcc/testsuite/g++.dg/gomp/pr25874.C2
-rw-r--r--gcc/testsuite/gcc.dg/gomp/pr25874.c2
5 files changed, 26 insertions, 0 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index 016c62a..c564780 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,9 @@
+2007-04-14 Jakub Jelinek <jakub@redhat.com>
+
+ 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 <bernd.schmidt@analog.com>
* 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 f176f9e..5715812 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 29ee918..2d2c891 100644
--- a/gcc/testsuite/ChangeLog
+++ b/gcc/testsuite/ChangeLog
@@ -1,3 +1,9 @@
+2007-04-14 Jakub Jelinek <jakub@redhat.com>
+
+ PR c++/25874
+ * gcc.dg/gomp/pr25874.c: Add dg-options.
+ * g++.dg/gomp/pr25874.C: Add dg-options.
+
2007-04-14 Bernhard Fischer <aldot@gcc.gnu.org>
PR fortran/21061
diff --git a/gcc/testsuite/g++.dg/gomp/pr25874.C b/gcc/testsuite/g++.dg/gomp/pr25874.C
index 02adef9..83573f1 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 568e1f0..2afd02e 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()