diff options
author | jakub <jakub@138bc75d-0d04-0410-961f-82ee72b054a4> | 2008-01-02 23:33:54 +0000 |
---|---|---|
committer | jakub <jakub@138bc75d-0d04-0410-961f-82ee72b054a4> | 2008-01-02 23:33:54 +0000 |
commit | fbe86b1bab666d62a7f36bb3a250f7cf972a6c3e (patch) | |
tree | abd2d1a421d905cb6b31b59654548df767291992 | |
parent | f6da67ae7b2c27b1a280c87c2b59915db212205f (diff) | |
download | gcc-fbe86b1bab666d62a7f36bb3a250f7cf972a6c3e.tar.gz |
PR middle-end/34608
* omp-low.c (expand_omp_parallel): Purge dead EH edges in the
child fn.
* g++.dg/gomp/pr34608.C: New test.
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@131264 138bc75d-0d04-0410-961f-82ee72b054a4
-rw-r--r-- | gcc/ChangeLog | 6 | ||||
-rw-r--r-- | gcc/omp-low.c | 20 | ||||
-rw-r--r-- | gcc/testsuite/ChangeLog | 5 | ||||
-rw-r--r-- | gcc/testsuite/g++.dg/gomp/pr34608.C | 19 |
4 files changed, 49 insertions, 1 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 803461c6284..f08d3af6ade 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,9 @@ +2008-01-03 Jakub Jelinek <jakub@redhat.com> + + PR middle-end/34608 + * omp-low.c (expand_omp_parallel): Purge dead EH edges in the + child fn. + 2008-01-02 Richard Sandiford <rsandifo@nildram.co.uk> * tree-sra.c (scalarize_init): Insert the generate_element_init diff --git a/gcc/omp-low.c b/gcc/omp-low.c index 36fb13de55f..cf4ae12e291 100644 --- a/gcc/omp-low.c +++ b/gcc/omp-low.c @@ -3,7 +3,7 @@ marshalling to implement data sharing and copying clauses. Contributed by Diego Novillo <dnovillo@redhat.com> - Copyright (C) 2005, 2006, 2007 Free Software Foundation, Inc. + Copyright (C) 2005, 2006, 2007, 2008 Free Software Foundation, Inc. This file is part of GCC. @@ -2646,6 +2646,24 @@ expand_omp_parallel (struct omp_region *region) if (optimize) optimize_omp_library_calls (); rebuild_cgraph_edges (); + + /* Some EH regions might become dead, see PR34608. If + pass_cleanup_cfg isn't the first pass to happen with the + new child, these dead EH edges might cause problems. + Clean them up now. */ + if (flag_exceptions) + { + basic_block bb; + tree save_current = current_function_decl; + bool changed = false; + + current_function_decl = child_fn; + FOR_EACH_BB (bb) + changed |= tree_purge_dead_eh_edges (bb); + if (changed) + cleanup_tree_cfg (); + current_function_decl = save_current; + } pop_cfun (); } diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index b16a2b16940..c23446b70b6 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,8 @@ +2008-01-03 Jakub Jelinek <jakub@redhat.com> + + PR middle-end/34608 + * g++.dg/gomp/pr34608.C: New test. + 2008-01-02 Richard Guenther <rguenther@suse.de> PR middle-end/34093 diff --git a/gcc/testsuite/g++.dg/gomp/pr34608.C b/gcc/testsuite/g++.dg/gomp/pr34608.C new file mode 100644 index 00000000000..759ab3fca94 --- /dev/null +++ b/gcc/testsuite/g++.dg/gomp/pr34608.C @@ -0,0 +1,19 @@ +// PR middle-end/34608 +// { dg-do compile } +// { dg-options "-ftest-coverage -fopenmp" } + +struct A +{ + ~A () throw (); +}; + +void foo (A); + +void +bar () +{ +#pragma omp parallel + foo (A ()); +} + +// { dg-final { cleanup-coverage-files } } |