diff options
Diffstat (limited to 'gcc/fold-const.c')
-rw-r--r-- | gcc/fold-const.c | 7 |
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)); |