diff options
author | Richard Guenther <rguenther@suse.de> | 2010-08-25 12:53:30 +0000 |
---|---|---|
committer | Richard Biener <rguenth@gcc.gnu.org> | 2010-08-25 12:53:30 +0000 |
commit | a2c0ed2ee91b8e30a47466ce3a18779248718c1b (patch) | |
tree | da1565336f65c5b40e2c7bf1103066ef5de9eb74 /gcc | |
parent | 90bc1cb81b70ba0635cc18d84d65230e68c8c48c (diff) | |
download | gcc-a2c0ed2ee91b8e30a47466ce3a18779248718c1b.zip gcc-a2c0ed2ee91b8e30a47466ce3a18779248718c1b.tar.gz gcc-a2c0ed2ee91b8e30a47466ce3a18779248718c1b.tar.bz2 |
re PR middle-end/45316 (ICE: verify_flow_info failed: BB 3 can not throw but has an EH edge with -O1 -ftree-pre -fnon-call-exceptions)
2010-08-25 Richard Guenther <rguenther@suse.de>
PR tree-optimization/45316
* tree-ssa-pre.c (eliminate): Properly clean EH info.
* g++.dg/opt/pr45316.C: New testcase.
From-SVN: r163543
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/ChangeLog | 5 | ||||
-rw-r--r-- | gcc/testsuite/ChangeLog | 5 | ||||
-rw-r--r-- | gcc/testsuite/g++.dg/opt/pr45316.C | 28 | ||||
-rw-r--r-- | gcc/tree-ssa-pre.c | 3 |
4 files changed, 41 insertions, 0 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 9f85999..b3ff516 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,5 +1,10 @@ 2010-08-25 Richard Guenther <rguenther@suse.de> + PR tree-optimization/45316 + * tree-ssa-pre.c (eliminate): Properly clean EH info. + +2010-08-25 Richard Guenther <rguenther@suse.de> + PR tree-optimization/45393 * tree-ssa-math-opts.c (execute_cse_sincos_1): Properly transfer and clean EH info. Avoid SSA update. diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index c8871f7..ba13e9e 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,5 +1,10 @@ 2010-08-25 Richard Guenther <rguenther@suse.de> + PR tree-optimization/45316 + * g++.dg/opt/pr45316.C: New testcase. + +2010-08-25 Richard Guenther <rguenther@suse.de> + PR tree-optimization/45393 * g++.dg/torture/pr45393.C: New testcase. diff --git a/gcc/testsuite/g++.dg/opt/pr45316.C b/gcc/testsuite/g++.dg/opt/pr45316.C new file mode 100644 index 0000000..74ad30e --- /dev/null +++ b/gcc/testsuite/g++.dg/opt/pr45316.C @@ -0,0 +1,28 @@ +// { dg-do compile } +// { dg-options "-O1 -ftree-pre -fnon-call-exceptions" } + +struct A +{ + int i; +}; + +struct B : A +{ + int i[6]; + B (int = 0) : A () + { + m (); + } + int m (); +}; + +struct C : B +{ +}; + +void +foo () +{ + new C (); +} + diff --git a/gcc/tree-ssa-pre.c b/gcc/tree-ssa-pre.c index 6d48123..fd3da9e 100644 --- a/gcc/tree-ssa-pre.c +++ b/gcc/tree-ssa-pre.c @@ -4498,9 +4498,12 @@ eliminate (void) if (TREE_CODE (lhs) != SSA_NAME || has_zero_uses (lhs)) { + basic_block bb = gimple_bb (stmt); gsi = gsi_for_stmt (stmt); unlink_stmt_vdef (stmt); gsi_remove (&gsi, true); + if (gimple_purge_dead_eh_edges (bb)) + todo |= TODO_cleanup_cfg; if (TREE_CODE (lhs) == SSA_NAME) bitmap_clear_bit (inserted_exprs, SSA_NAME_VERSION (lhs)); release_defs (stmt); |