OSDN Git Service

partial fix for PR target/10021
authorwilson <wilson@138bc75d-0d04-0410-961f-82ee72b054a4>
Wed, 9 Jul 2003 00:18:19 +0000 (00:18 +0000)
committerwilson <wilson@138bc75d-0d04-0410-961f-82ee72b054a4>
Wed, 9 Jul 2003 00:18:19 +0000 (00:18 +0000)
* emit-rtl.c (set_mem_attribute_minus_bitpos): When handle ARRAY_REF,
loop over new variable t2 instead of t.

git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@69111 138bc75d-0d04-0410-961f-82ee72b054a4

gcc/ChangeLog
gcc/emit-rtl.c

index a589359..194c807 100644 (file)
@@ -1,3 +1,9 @@
+2003-07-08  James E Wilson  <wilson@tuliptree.org>
+
+       PR target/10021
+       * emit-rtl.c (set_mem_attribute_minus_bitpos): When handle ARRAY_REF,
+       loop over new variable t2 instead of t.
+
 2003-07-08  Danny Smith  <dannysmith@users.sourceforge.net>
 
        PR bootstrap/11455
index 3b926df..cb05ea8 100644 (file)
@@ -1915,11 +1915,14 @@ set_mem_attributes_minus_bitpos (rtx ref, tree t, int objectp,
       else if (TREE_CODE (t) == ARRAY_REF)
        {
          tree off_tree = size_zero_node;
+         /* We can't modify t, because we use it at the end of the
+            function.  */
+         tree t2 = t;
 
          do
            {
-             tree index = TREE_OPERAND (t, 1);
-             tree array = TREE_OPERAND (t, 0);
+             tree index = TREE_OPERAND (t2, 1);
+             tree array = TREE_OPERAND (t2, 0);
              tree domain = TYPE_DOMAIN (TREE_TYPE (array));
              tree low_bound = (domain ? TYPE_MIN_VALUE (domain) : 0);
              tree unit_size = TYPE_SIZE_UNIT (TREE_TYPE (TREE_TYPE (array)));
@@ -1936,7 +1939,7 @@ set_mem_attributes_minus_bitpos (rtx ref, tree t, int objectp,
                 WITH_RECORD_EXPR; if the component size is, pass our
                 component to one.  */
              if (CONTAINS_PLACEHOLDER_P (index))
-               index = build (WITH_RECORD_EXPR, TREE_TYPE (index), index, t);
+               index = build (WITH_RECORD_EXPR, TREE_TYPE (index), index, t2);
              if (CONTAINS_PLACEHOLDER_P (unit_size))
                unit_size = build (WITH_RECORD_EXPR, sizetype,
                                   unit_size, array);
@@ -1947,28 +1950,28 @@ set_mem_attributes_minus_bitpos (rtx ref, tree t, int objectp,
                                            index,
                                            unit_size)),
                               off_tree));
-             t = TREE_OPERAND (t, 0);
+             t2 = TREE_OPERAND (t2, 0);
            }
-         while (TREE_CODE (t) == ARRAY_REF);
+         while (TREE_CODE (t2) == ARRAY_REF);
 
-         if (DECL_P (t))
+         if (DECL_P (t2))
            {
-             expr = t;
+             expr = t2;
              offset = NULL;
              if (host_integerp (off_tree, 1))
                {
                  HOST_WIDE_INT ioff = tree_low_cst (off_tree, 1);
                  HOST_WIDE_INT aoff = (ioff & -ioff) * BITS_PER_UNIT;
-                 align = DECL_ALIGN (t);
+                 align = DECL_ALIGN (t2);
                  if (aoff && (unsigned HOST_WIDE_INT) aoff < align)
                    align = aoff;
                  offset = GEN_INT (ioff);
                  apply_bitpos = bitpos;
                }
            }
-         else if (TREE_CODE (t) == COMPONENT_REF)
+         else if (TREE_CODE (t2) == COMPONENT_REF)
            {
-             expr = component_ref_for_mem_expr (t);
+             expr = component_ref_for_mem_expr (t2);
              if (host_integerp (off_tree, 1))
                {
                  offset = GEN_INT (tree_low_cst (off_tree, 1));
@@ -1978,10 +1981,10 @@ set_mem_attributes_minus_bitpos (rtx ref, tree t, int objectp,
                 the size we got from the type?  */
            }
          else if (flag_argument_noalias > 1
-                  && TREE_CODE (t) == INDIRECT_REF
-                  && TREE_CODE (TREE_OPERAND (t, 0)) == PARM_DECL)
+                  && TREE_CODE (t2) == INDIRECT_REF
+                  && TREE_CODE (TREE_OPERAND (t2, 0)) == PARM_DECL)
            {
-             expr = t;
+             expr = t2;
              offset = NULL;
            }
        }