aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorRichard Guenther <rguenther@suse.de>2012-01-20 10:10:46 +0000
committerRichard Biener <rguenth@gcc.gnu.org>2012-01-20 10:10:46 +0000
commita88b3135730c7e2334812b9e4ec5631f00446015 (patch)
tree19ef645206cc67b8ecbab0599f58d40c96dcf5b1 /gcc
parentf06129ead48be9ed77ae85c7b908c60fc1eeff7a (diff)
downloadgcc-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/ChangeLog6
-rw-r--r--gcc/testsuite/ChangeLog5
-rw-r--r--gcc/testsuite/g++.dg/torture/pr51903.C9
-rw-r--r--gcc/tree-ssa-pre.c6
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);