}
return NULL_TREE;
}
+ if (TREE_CODE (*tp) == DECL_EXPR
+ && VAR_P (DECL_EXPR_DECL (*tp))
+ && DECL_ARTIFICIAL (DECL_EXPR_DECL (*tp))
+ && !TREE_STATIC (DECL_EXPR_DECL (*tp)))
+ {
+ tree t;
+ splay_tree_node n
+ = splay_tree_lookup (target_remap,
+ (splay_tree_key) DECL_EXPR_DECL (*tp));
+ if (n)
+ t = (tree) n->value;
+ else
+ {
+ t = create_temporary_var (TREE_TYPE (DECL_EXPR_DECL (*tp)));
+ DECL_INITIAL (t) = DECL_INITIAL (DECL_EXPR_DECL (*tp));
+ splay_tree_insert (target_remap,
+ (splay_tree_key) DECL_EXPR_DECL (*tp),
+ (splay_tree_value) t);
+ }
+ copy_tree_r (tp, walk_subtrees, NULL);
+ DECL_EXPR_DECL (*tp) = t;
+ if (data.clear_location && EXPR_HAS_LOCATION (*tp))
+ SET_EXPR_LOCATION (*tp, input_location);
+ return NULL_TREE;
+ }
+ if (TREE_CODE (*tp) == BIND_EXPR && BIND_EXPR_VARS (*tp))
+ {
+ copy_tree_r (tp, walk_subtrees, NULL);
+ for (tree *p = &BIND_EXPR_VARS (*tp); *p; p = &DECL_CHAIN (*p))
+ {
+ gcc_assert (VAR_P (*p) && DECL_ARTIFICIAL (*p) && !TREE_STATIC (*p));
+ tree t = create_temporary_var (TREE_TYPE (*p));
+ DECL_INITIAL (t) = DECL_INITIAL (*p);
+ DECL_CHAIN (t) = DECL_CHAIN (*p);
+ splay_tree_insert (target_remap, (splay_tree_key) *p,
+ (splay_tree_value) t);
+ *p = t;
+ }
+ if (data.clear_location && EXPR_HAS_LOCATION (*tp))
+ SET_EXPR_LOCATION (*tp, input_location);
+ return NULL_TREE;
+ }
/* Make a copy of this node. */
t = copy_tree_r (tp, walk_subtrees, NULL);