diff options
-rw-r--r-- | gcc/ChangeLog | 5 | ||||
-rw-r--r-- | gcc/tree-ssa-ccp.c | 8 |
2 files changed, 10 insertions, 3 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 5856b0ce06d..b3483cbc91d 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,8 @@ +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. + 2010-01-29 Jakub Jelinek <jakub@redhat.com> PR rtl-optimization/42889 diff --git a/gcc/tree-ssa-ccp.c b/gcc/tree-ssa-ccp.c index f6380ebdbe7..238361166b9 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; } } |