Another missed piece, exposed by less MEM_REF -> ARRAY_REF folding.
Interestingly only for Ada testcases.

Bootstrap and regtest running on x86_64-unknown-linux-gnu.

Richard.

2011-08-26  Richard Guenther  <rguent...@suse.de>

        * varasm.c (decode_addr_const): Handle MEM_REF[&X, OFF].

Index: gcc/varasm.c
===================================================================
*** gcc/varasm.c        (revision 178096)
--- gcc/varasm.c        (working copy)
*************** decode_addr_const (tree exp, struct addr
*** 2592,2597 ****
--- 2592,2603 ----
                     * tree_low_cst (TREE_OPERAND (target, 1), 0));
          target = TREE_OPERAND (target, 0);
        }
+       else if (TREE_CODE (target) == MEM_REF
+              && TREE_CODE (TREE_OPERAND (target, 0)) == ADDR_EXPR)
+       {
+         offset += mem_ref_offset (target).low;
+         target = TREE_OPERAND (TREE_OPERAND (target, 0), 0);
+       }
        else if (TREE_CODE (target) == INDIRECT_REF
               && TREE_CODE (TREE_OPERAND (target, 0)) == NOP_EXPR
               && TREE_CODE (TREE_OPERAND (TREE_OPERAND (target, 0), 0))

Reply via email to