aboutsummaryrefslogtreecommitdiff
path: root/gcc/fold-const.c
diff options
context:
space:
mode:
Diffstat (limited to 'gcc/fold-const.c')
-rw-r--r--gcc/fold-const.c7
1 files changed, 6 insertions, 1 deletions
diff --git a/gcc/fold-const.c b/gcc/fold-const.c
index 6492f11..0f80675 100644
--- a/gcc/fold-const.c
+++ b/gcc/fold-const.c
@@ -7626,8 +7626,13 @@ build_fold_addr_expr_with_type_loc (location_t loc, tree t, tree ptrtype)
t = build1_loc (loc, NOP_EXPR, ptrtype, t);
}
else if (TREE_CODE (t) == MEM_REF
- && integer_zerop (TREE_OPERAND (t, 1)))
+ && integer_zerop (TREE_OPERAND (t, 1)))
return TREE_OPERAND (t, 0);
+ else if (TREE_CODE (t) == MEM_REF
+ && TREE_CODE (TREE_OPERAND (t, 0)) == INTEGER_CST)
+ return fold_binary (POINTER_PLUS_EXPR, ptrtype,
+ TREE_OPERAND (t, 0),
+ convert_to_ptrofftype (TREE_OPERAND (t, 1)));
else if (TREE_CODE (t) == VIEW_CONVERT_EXPR)
{
t = build_fold_addr_expr_loc (loc, TREE_OPERAND (t, 0));