From 54714c680a46d4290c10b7369c1c1b2afd1e8d97 Mon Sep 17 00:00:00 2001 From: Richard Biener Date: Wed, 20 Mar 2013 13:25:08 +0000 Subject: [PATCH] tree-inline.c (copy_tree_body_r): Sync MEM_REF code with remap_gimple_op_r. 2013-03-20 Richard Biener * tree-inline.c (copy_tree_body_r): Sync MEM_REF code with remap_gimple_op_r. From-SVN: r196824 --- gcc/ChangeLog | 5 +++++ gcc/tree-inline.c | 30 +++++++++++++++--------------- 2 files changed, 20 insertions(+), 15 deletions(-) diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 9579b6a3fb2..217a76d9a00 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,8 @@ +2013-03-20 Richard Biener + + * tree-inline.c (copy_tree_body_r): Sync MEM_REF code with + remap_gimple_op_r. + 2013-03-20 Bill Schmidt Steven Bosscher diff --git a/gcc/tree-inline.c b/gcc/tree-inline.c index 5121765fd35..b7f76c839f3 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 -- 2.30.2