diff options
author | Richard Guenther <rguenther@suse.de> | 2012-01-20 10:10:46 +0000 |
---|---|---|
committer | Richard Biener <rguenth@gcc.gnu.org> | 2012-01-20 10:10:46 +0000 |
commit | a88b3135730c7e2334812b9e4ec5631f00446015 (patch) | |
tree | 19ef645206cc67b8ecbab0599f58d40c96dcf5b1 /gcc | |
parent | f06129ead48be9ed77ae85c7b908c60fc1eeff7a (diff) | |
download | gcc-a88b3135730c7e2334812b9e4ec5631f00446015.zip gcc-a88b3135730c7e2334812b9e4ec5631f00446015.tar.gz gcc-a88b3135730c7e2334812b9e4ec5631f00446015.tar.bz2 |
re PR tree-optimization/51903 (ICE: in gimple_purge_all_dead_eh_edges, at tree-cfg.c:7196 with -fnon-call-exceptions)
2012-01-20 Richard Guenther <rguenther@suse.de>
PR tree-optimization/51903
* tree-ssa-pre.c (eliminate): Properly purging of EH edges
when removing stmts.
* g++.dg/torture/pr51903.C: New testcase.
From-SVN: r183329
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/ChangeLog | 6 | ||||
-rw-r--r-- | gcc/testsuite/ChangeLog | 5 | ||||
-rw-r--r-- | gcc/testsuite/g++.dg/torture/pr51903.C | 9 | ||||
-rw-r--r-- | gcc/tree-ssa-pre.c | 6 |
4 files changed, 24 insertions, 2 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 4e35838..030bedb 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,9 @@ +2012-01-20 Richard Guenther <rguenther@suse.de> + + PR tree-optimization/51903 + * tree-ssa-pre.c (eliminate): Properly purging of EH edges + when removing stmts. + 2012-01-20 Ramana Radhakrishnan <ramana.radhakrishnan@linaro.org> PR target/50313 diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 2d42abf..0a726fc 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,8 @@ +2012-01-20 Richard Guenther <rguenther@suse.de> + + PR tree-optimization/51903 + * g++.dg/torture/pr51903.C: New testcase. + 2012-01-20 Tobias Burnus <burnus@net-b.de> Janus Weil <janus@gcc.gnu.org> diff --git a/gcc/testsuite/g++.dg/torture/pr51903.C b/gcc/testsuite/g++.dg/torture/pr51903.C new file mode 100644 index 0000000..925021b --- /dev/null +++ b/gcc/testsuite/g++.dg/torture/pr51903.C @@ -0,0 +1,9 @@ +// { dg-do compile } +// { dg-options "-O2 -fnon-call-exceptions -fno-guess-branch-probability" } + +#include <vector> + +void foo () +{ + std::vector < std::vector< int > > (20000); +} diff --git a/gcc/tree-ssa-pre.c b/gcc/tree-ssa-pre.c index c5d253c..b95ac78 100644 --- a/gcc/tree-ssa-pre.c +++ b/gcc/tree-ssa-pre.c @@ -4541,8 +4541,10 @@ eliminate (void) gsi = gsi_for_stmt (stmt); unlink_stmt_vdef (stmt); gsi_remove (&gsi, true); - if (gimple_purge_dead_eh_edges (bb)) - todo |= TODO_cleanup_cfg; + /* ??? gsi_remove doesn't tell us whether the stmt was + in EH tables and thus whether we need to purge EH edges. + Simply schedule the block for a cleanup. */ + bitmap_set_bit (need_eh_cleanup, bb->index); if (TREE_CODE (lhs) == SSA_NAME) bitmap_clear_bit (inserted_exprs, SSA_NAME_VERSION (lhs)); release_defs (stmt); |