aboutsummaryrefslogtreecommitdiff
path: root/gcc/tree-ssa-ccp.c
diff options
context:
space:
mode:
authorRichard Guenther <rguenther@suse.de>2010-01-29 12:19:36 +0000
committerRichard Biener <rguenth@gcc.gnu.org>2010-01-29 12:19:36 +0000
commiteb6b98c71cbb85510d9b85c2b7439176b730a9b7 (patch)
treee90381126a2950ed6ced8289ff2b6053134aed29 /gcc/tree-ssa-ccp.c
parentc23cd1d60fad597684f39e56134ff918a9bab466 (diff)
downloadgcc-eb6b98c71cbb85510d9b85c2b7439176b730a9b7.zip
gcc-eb6b98c71cbb85510d9b85c2b7439176b730a9b7.tar.gz
gcc-eb6b98c71cbb85510d9b85c2b7439176b730a9b7.tar.bz2
tree-ssa-ccp.c (ccp_fold_stmt): Unshare values we substitute.
2010-01-29 Richard Guenther <rguenther@suse.de> * tree-ssa-ccp.c (ccp_fold_stmt): Unshare values we substitute. Assert we successfully updated the call. From-SVN: r156346
Diffstat (limited to 'gcc/tree-ssa-ccp.c')
-rw-r--r--gcc/tree-ssa-ccp.c8
1 files changed, 5 insertions, 3 deletions
diff --git a/gcc/tree-ssa-ccp.c b/gcc/tree-ssa-ccp.c
index f6380eb..2383611 100644
--- a/gcc/tree-ssa-ccp.c
+++ b/gcc/tree-ssa-ccp.c
@@ -1518,11 +1518,13 @@ ccp_fold_stmt (gimple_stmt_iterator *gsi)
&& (val = get_value (lhs))
&& val->lattice_val == CONSTANT)
{
- tree new_rhs = val->value;
+ tree new_rhs = unshare_expr (val->value);
+ bool res;
if (!useless_type_conversion_p (TREE_TYPE (lhs),
TREE_TYPE (new_rhs)))
new_rhs = fold_convert (TREE_TYPE (lhs), new_rhs);
- update_call_from_tree (gsi, new_rhs);
+ res = update_call_from_tree (gsi, new_rhs);
+ gcc_assert (res);
return true;
}
@@ -1542,7 +1544,7 @@ ccp_fold_stmt (gimple_stmt_iterator *gsi)
(TYPE_MAIN_VARIANT (TREE_VALUE (argt)),
TYPE_MAIN_VARIANT (TREE_TYPE (val->value))))
{
- gimple_call_set_arg (stmt, i, val->value);
+ gimple_call_set_arg (stmt, i, unshare_expr (val->value));
changed = true;
}
}