OSDN Git Service

* expr.c (expand_expr, case CONSTRUCTOR): Put into memory if
authorkenner <kenner@138bc75d-0d04-0410-961f-82ee72b054a4>
Thu, 22 May 2003 20:31:46 +0000 (20:31 +0000)
committerkenner <kenner@138bc75d-0d04-0410-961f-82ee72b054a4>
Thu, 22 May 2003 20:31:46 +0000 (20:31 +0000)
constant and EXPAND_CONST_ADDRESS, not just EXPAND_INITIALIZER.

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

gcc/ChangeLog
gcc/expr.c

index db4804b..d04de88 100644 (file)
@@ -2,6 +2,9 @@
 
        * c-decl.c (duplicate_decls): Test DECL for ERROR_MARK.
 
+       * expr.c (expand_expr, case CONSTRUCTOR): Put into memory if
+       constant and EXPAND_CONST_ADDRESS, not just EXPAND_INITIALIZER.
+
 2003-05-22  Kaveh R. Ghazi  <ghazi@caip.rutgers.edu>
 
        * m68hc11.c: Don't use the `0' flag for asm_fprintf specifiers.
index 9c21ac9..770bef4 100644 (file)
@@ -4982,7 +4982,7 @@ store_constructor (exp, target, cleared, size)
            {
              rtx offset_rtx;
 
-             if (contains_placeholder_p (offset))
+             if (CONTAINS_PLACEHOLDER_P (offset))
                offset = build (WITH_RECORD_EXPR, sizetype,
                                offset, make_tree (TREE_TYPE (exp), target));
 
@@ -5799,8 +5799,7 @@ get_inner_reference (exp, pbitsize, pbitpos, poffset, pmode,
             made during type construction.  */
          if (this_offset == 0)
            break;
-         else if (! TREE_CONSTANT (this_offset)
-                  && contains_placeholder_p (this_offset))
+         else if (CONTAINS_PLACEHOLDER_P (this_offset))
            this_offset = build (WITH_RECORD_EXPR, sizetype, this_offset, exp);
 
          offset = size_binop (PLUS_EXPR, offset, this_offset);
@@ -5830,11 +5829,9 @@ get_inner_reference (exp, pbitsize, pbitpos, poffset, pmode,
          /* If the index has a self-referential type, pass it to a
             WITH_RECORD_EXPR; if the component size is, pass our
             component to one.  */
-         if (! TREE_CONSTANT (index)
-             && contains_placeholder_p (index))
+         if (CONTAINS_PLACEHOLDER_P (index))
            index = build (WITH_RECORD_EXPR, TREE_TYPE (index), index, exp);
-         if (! TREE_CONSTANT (unit_size)
-             && contains_placeholder_p (unit_size))
+         if (CONTAINS_PLACEHOLDER_P (unit_size))
            unit_size = build (WITH_RECORD_EXPR, sizetype, unit_size, array);
 
          offset = size_binop (PLUS_EXPR, offset,
@@ -7163,7 +7160,9 @@ expand_expr (exp, target, tmode, modifier)
                        && ((TREE_CODE (type) == VECTOR_TYPE
                             && !is_zeros_p (exp))
                            || ! mostly_zeros_p (exp)))))
-              || (modifier == EXPAND_INITIALIZER && TREE_CONSTANT (exp)))
+              || ((modifier == EXPAND_INITIALIZER
+                   || modifier == EXPAND_CONST_ADDRESS)
+                  && TREE_CONSTANT (exp)))
        {
          rtx constructor = output_constant_def (exp, 1);