diff options
author | Jakub Jelinek <jakub@redhat.com> | 2008-09-08 21:31:18 +0200 |
---|---|---|
committer | Jakub Jelinek <jakub@gcc.gnu.org> | 2008-09-08 21:31:18 +0200 |
commit | c5cac099b7420d4c3df6664edd8e6e2f92909b70 (patch) | |
tree | a54110c3122e438cc13741215d76b6c9b404f677 /gcc/tree-ssa-dom.c | |
parent | 7220ca2b3822219e56497f4d18ceb043656acb71 (diff) | |
download | gcc-c5cac099b7420d4c3df6664edd8e6e2f92909b70.tar.gz |
re PR middle-end/37337 (ICE: verify_flow_info failed)
PR middle-end/37337
* tree-ssa-dom.c (optimize_stmt): Call maybe_clean_or_replace_eh_stmt
even when a stmt has been gimple_modified_p, but after fold_stmt is
not any longer. Remove unneeded may_have_exposed_new_symbols
initializations.
* g++.dg/tree-ssa/pr37337.C: New test.
From-SVN: r140117
Diffstat (limited to 'gcc/tree-ssa-dom.c')
-rw-r--r-- | gcc/tree-ssa-dom.c | 10 |
1 files changed, 7 insertions, 3 deletions
diff --git a/gcc/tree-ssa-dom.c b/gcc/tree-ssa-dom.c index cd7defa869c..bf2049eb8d8 100644 --- a/gcc/tree-ssa-dom.c +++ b/gcc/tree-ssa-dom.c @@ -2179,7 +2179,8 @@ optimize_stmt (struct dom_walk_data *walk_data ATTRIBUTE_UNUSED, { gimple stmt, old_stmt; bool may_optimize_p; - bool may_have_exposed_new_symbols = false; + bool may_have_exposed_new_symbols; + bool modified_p = false; old_stmt = stmt = gsi_stmt (si); @@ -2188,7 +2189,6 @@ optimize_stmt (struct dom_walk_data *walk_data ATTRIBUTE_UNUSED, update_stmt_if_modified (stmt); opt_stats.num_stmts++; - may_have_exposed_new_symbols = false; push_stmt_changes (gsi_stmt_ptr (&si)); if (dump_file && (dump_flags & TDF_DETAILS)) @@ -2237,6 +2237,10 @@ optimize_stmt (struct dom_walk_data *walk_data ATTRIBUTE_UNUSED, Indicate we will need to rescan and rewrite the statement. */ may_have_exposed_new_symbols = true; + /* Indicate that maybe_clean_or_replace_eh_stmt needs to be called, + even if fold_stmt updated the stmt already and thus cleared + gimple_modified_p flag on it. */ + modified_p = true; } /* Check for redundant computations. Do this optimization only @@ -2285,7 +2289,7 @@ optimize_stmt (struct dom_walk_data *walk_data ATTRIBUTE_UNUSED, Ultimately I suspect we're going to need to change the interface into the SSA_NAME manager. */ - if (gimple_modified_p (stmt)) + if (gimple_modified_p (stmt) || modified_p) { tree val = NULL; |