aboutsummaryrefslogtreecommitdiff
path: root/gcc/tree-inline.c
diff options
context:
space:
mode:
Diffstat (limited to 'gcc/tree-inline.c')
-rw-r--r--gcc/tree-inline.c33
1 files changed, 17 insertions, 16 deletions
diff --git a/gcc/tree-inline.c b/gcc/tree-inline.c
index 5121765fd35..a41dd5aeb82 100644
--- a/gcc/tree-inline.c
+++ b/gcc/tree-inline.c
@@ -1092,22 +1092,22 @@ copy_tree_body_r (tree *tp, int *walk_subtrees, void *data)
}
else if (TREE_CODE (*tp) == MEM_REF)
{
- /* We need to re-canonicalize MEM_REFs from inline substitutions
- that can happen when a pointer argument is an ADDR_EXPR. */
- tree decl = TREE_OPERAND (*tp, 0);
- tree *n;
+ tree ptr = TREE_OPERAND (*tp, 0);
+ tree type = remap_type (TREE_TYPE (*tp), id);
+ tree old = *tp;
- n = (tree *) pointer_map_contains (id->decl_map, decl);
- if (n)
- {
- tree old = *tp;
- *tp = fold_build2 (MEM_REF, TREE_TYPE (*tp),
- unshare_expr (*n), TREE_OPERAND (*tp, 1));
- TREE_THIS_VOLATILE (*tp) = TREE_THIS_VOLATILE (old);
- TREE_NO_WARNING (*tp) = TREE_NO_WARNING (old);
- *walk_subtrees = 0;
- return NULL;
- }
+ /* We need to re-canonicalize MEM_REFs from inline substitutions
+ that can happen when a pointer argument is an ADDR_EXPR.
+ Recurse here manually to allow that. */
+ walk_tree (&ptr, copy_tree_body_r, data, NULL);
+ *tp = fold_build2 (MEM_REF, type,
+ ptr, TREE_OPERAND (*tp, 1));
+ TREE_THIS_NOTRAP (*tp) = TREE_THIS_NOTRAP (old);
+ TREE_THIS_VOLATILE (*tp) = TREE_THIS_VOLATILE (old);
+ TREE_SIDE_EFFECTS (*tp) = TREE_SIDE_EFFECTS (old);
+ TREE_NO_WARNING (*tp) = TREE_NO_WARNING (old);
+ *walk_subtrees = 0;
+ return NULL;
}
/* Here is the "usual case". Copy this tree node, and then
@@ -3762,7 +3762,7 @@ add_local_variables (struct function *callee, struct function *caller,
/* Remap debug-expressions. */
if (TREE_CODE (new_var) == VAR_DECL
- && DECL_DEBUG_EXPR_IS_FROM (new_var)
+ && DECL_HAS_DEBUG_EXPR_P (var)
&& new_var != var)
{
tree tem = DECL_DEBUG_EXPR (var);
@@ -3772,6 +3772,7 @@ add_local_variables (struct function *callee, struct function *caller,
id->remapping_type_depth--;
id->regimplify = old_regimplify;
SET_DECL_DEBUG_EXPR (new_var, tem);
+ DECL_HAS_DEBUG_EXPR_P (new_var) = 1;
}
add_local_decl (caller, new_var);
}