]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
varasm.c (decode_addr_const): Handle MEM_REF[&X, OFF].
authorRichard Guenther <rguenther@suse.de>
Fri, 26 Aug 2011 14:02:28 +0000 (14:02 +0000)
committerRichard Biener <rguenth@gcc.gnu.org>
Fri, 26 Aug 2011 14:02:28 +0000 (14:02 +0000)
2011-08-26  Richard Guenther  <rguenther@suse.de>

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

From-SVN: r178107

gcc/ChangeLog
gcc/varasm.c

index 9412f498569fecf132ac47aedc23ed2facf5d4f2..28c9d2f510745b2482305e2715e7122c9c27c450 100644 (file)
@@ -1,3 +1,7 @@
+2011-08-26  Richard Guenther  <rguenther@suse.de>
+
+       * varasm.c (decode_addr_const): Handle MEM_REF[&X, OFF].
+
 2011-08-26  Zdenek Dvorak  <ook@ucw.cz>
            Tom de Vries  <tom@codesourcery.com>
 
index a612888d6f3c87035f5fcf49d25297eaeb32b877..e83bebbb04e653006eeb19aa1ee686db83609ab8 100644 (file)
@@ -2592,6 +2592,12 @@ decode_addr_const (tree exp, struct addr_const *value)
                     * 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))