aboutsummaryrefslogtreecommitdiff
path: root/gcc/tree-mudflap.c
diff options
context:
space:
mode:
authorAlexandre Oliva <aoliva@redhat.com>2012-12-15 10:25:15 +0000
committerAlexandre Oliva <aoliva@gcc.gnu.org>2012-12-15 10:25:15 +0000
commite88ebf869e234bca2535b43fd80ab744e65a3560 (patch)
tree020f9b5c8e9194f2a72826f846f18ab34c661b39 /gcc/tree-mudflap.c
parent5a6fe81088b9a7e5242897892239b745d9273cf9 (diff)
downloadgcc-e88ebf869e234bca2535b43fd80ab744e65a3560.zip
gcc-e88ebf869e234bca2535b43fd80ab744e65a3560.tar.gz
gcc-e88ebf869e234bca2535b43fd80ab744e65a3560.tar.bz2
re PR libmudflap/53952 (FAIL: libmudflap.c++/pass55-frag.cxx ( -O[123]) execution test)
PR libmudflap/53952 * expr.c (mem_ref_refers_to_non_mem_p): Factor out implementation into... (addr_expr_of_non_mem_decl_p_1): ... this new function. (addr_expr_of_non_mem_decl_p): New. * tree.h (addr_expr_of_non_mem_decl_p): Declare. * tree-mudflap.c (mf_xform_derefs_1): Don't change MEM_REFs and TARGET_MEM_REFs that have an ADDR_EXPR of a non-mem DECL as base operand. From-SVN: r194519
Diffstat (limited to 'gcc/tree-mudflap.c')
-rw-r--r--gcc/tree-mudflap.c6
1 files changed, 6 insertions, 0 deletions
diff --git a/gcc/tree-mudflap.c b/gcc/tree-mudflap.c
index 9b9c549..90d0448 100644
--- a/gcc/tree-mudflap.c
+++ b/gcc/tree-mudflap.c
@@ -877,6 +877,9 @@ mf_xform_derefs_1 (gimple_stmt_iterator *iter, tree *tp,
break;
case MEM_REF:
+ if (addr_expr_of_non_mem_decl_p (TREE_OPERAND (t, 0)))
+ return;
+
addr = fold_build_pointer_plus_loc (location, TREE_OPERAND (t, 0),
TREE_OPERAND (t, 1));
base = addr;
@@ -886,6 +889,9 @@ mf_xform_derefs_1 (gimple_stmt_iterator *iter, tree *tp,
break;
case TARGET_MEM_REF:
+ if (addr_expr_of_non_mem_decl_p (TMR_BASE (t)))
+ return;
+
addr = tree_mem_ref_addr (ptr_type_node, t);
base = addr;
limit = fold_build_pointer_plus_hwi_loc (location,