From eb6b98c71cbb85510d9b85c2b7439176b730a9b7 Mon Sep 17 00:00:00 2001 From: Richard Guenther Date: Fri, 29 Jan 2010 12:19:36 +0000 Subject: [PATCH] tree-ssa-ccp.c (ccp_fold_stmt): Unshare values we substitute. 2010-01-29 Richard Guenther * tree-ssa-ccp.c (ccp_fold_stmt): Unshare values we substitute. Assert we successfully updated the call. From-SVN: r156346 --- gcc/ChangeLog | 5 +++++ 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 + + * tree-ssa-ccp.c (ccp_fold_stmt): Unshare values we substitute. + Assert we successfully updated the call. + 2010-01-29 Jakub Jelinek 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; } } -- 2.30.2