aboutsummaryrefslogtreecommitdiff
path: root/gcc/tree-ssa-propagate.c
diff options
context:
space:
mode:
authorJakub Jelinek <jakub@redhat.com>2010-11-09 12:54:32 +0100
committerJakub Jelinek <jakub@gcc.gnu.org>2010-11-09 12:54:32 +0100
commit277dc8106a0e984c7183d650283515cfe49045b4 (patch)
tree1266db03a7c5be51f082e7ae4130491500777996 /gcc/tree-ssa-propagate.c
parent8810610ef1ef35a9f731c5b9c700c05b68799a4a (diff)
downloadgcc-277dc8106a0e984c7183d650283515cfe49045b4.zip
gcc-277dc8106a0e984c7183d650283515cfe49045b4.tar.gz
gcc-277dc8106a0e984c7183d650283515cfe49045b4.tar.bz2
re PR middle-end/46360 (ICE in release_defs, at tree-ssanames.c:313)
PR middle-end/46360 * tree-ssa-propagate.c (update_call_from_tree): Fix for use not in SSA mode. * gcc.c-torture/compile/pr46360.c: New test. From-SVN: r166482
Diffstat (limited to 'gcc/tree-ssa-propagate.c')
-rw-r--r--gcc/tree-ssa-propagate.c10
1 files changed, 7 insertions, 3 deletions
diff --git a/gcc/tree-ssa-propagate.c b/gcc/tree-ssa-propagate.c
index c97960c..7f1d84e 100644
--- a/gcc/tree-ssa-propagate.c
+++ b/gcc/tree-ssa-propagate.c
@@ -760,8 +760,11 @@ update_call_from_tree (gimple_stmt_iterator *si_p, tree expr)
/* No value is expected, and EXPR has no effect.
Replace it with an empty statement. */
new_stmt = gimple_build_nop ();
- unlink_stmt_vdef (stmt);
- release_defs (stmt);
+ if (gimple_in_ssa_p (cfun))
+ {
+ unlink_stmt_vdef (stmt);
+ release_defs (stmt);
+ }
}
else
{
@@ -773,7 +776,8 @@ update_call_from_tree (gimple_stmt_iterator *si_p, tree expr)
lhs = create_tmp_var (TREE_TYPE (expr), NULL);
new_stmt = gimple_build_assign (lhs, expr);
add_referenced_var (lhs);
- lhs = make_ssa_name (lhs, new_stmt);
+ if (gimple_in_ssa_p (cfun))
+ lhs = make_ssa_name (lhs, new_stmt);
gimple_assign_set_lhs (new_stmt, lhs);
gimple_set_vuse (new_stmt, gimple_vuse (stmt));
gimple_set_vdef (new_stmt, gimple_vdef (stmt));