diff options
Diffstat (limited to 'gcc/tree-mudflap.c')
-rw-r--r-- | gcc/tree-mudflap.c | 15 |
1 files changed, 14 insertions, 1 deletions
diff --git a/gcc/tree-mudflap.c b/gcc/tree-mudflap.c index 2437bc48470..e70524543c5 100644 --- a/gcc/tree-mudflap.c +++ b/gcc/tree-mudflap.c @@ -790,7 +790,8 @@ mf_xform_derefs_1 (gimple_stmt_iterator *iter, tree *tp, } else if (TREE_CODE (var) == COMPONENT_REF) var = TREE_OPERAND (var, 0); - else if (INDIRECT_REF_P (var)) + else if (INDIRECT_REF_P (var) + || TREE_CODE (var) == MEM_REF) { base = TREE_OPERAND (var, 0); break; @@ -868,6 +869,18 @@ mf_xform_derefs_1 (gimple_stmt_iterator *iter, tree *tp, size_int (-1)); break; + case MEM_REF: + addr = build2 (POINTER_PLUS_EXPR, TREE_TYPE (TREE_OPERAND (t, 1)), + TREE_OPERAND (t, 0), + fold_convert (sizetype, TREE_OPERAND (t, 1))); + base = addr; + limit = fold_build2_loc (location, POINTER_PLUS_EXPR, ptr_type_node, + fold_build2_loc (location, + POINTER_PLUS_EXPR, ptr_type_node, base, + size), + size_int (-1)); + break; + case TARGET_MEM_REF: addr = tree_mem_ref_addr (ptr_type_node, t); base = addr; |