* expr.c (store_constructor): Don't call clear_storage if size is
authorkenner <kenner@138bc75d-0d04-0410-961f-82ee72b054a4>
Fri, 24 Dec 1999 17:27:36 +0000 (17:27 +0000)
committerkenner <kenner@138bc75d-0d04-0410-961f-82ee72b054a4>
Fri, 24 Dec 1999 17:27:36 +0000 (17:27 +0000)
variable.

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

gcc/ChangeLog
gcc/expr.c

index f34fbd2..75b33fb 100644 (file)
@@ -1,3 +1,8 @@
+Fri Dec 24 12:34:26 1999  Richard Kenner  <kenner@vlsi1.ultra.nyu.edu>
+
+       * expr.c (store_constructor): Don't call clear_storage if size is
+       variable.
+
 1999-12-24  Kaveh R. Ghazi  <ghazi@caip.rutgers.edu>
 
        * Makefile.in (toplev.o): Depend on loop.h.
index 2290b98..ac498a4 100644 (file)
@@ -4151,9 +4151,10 @@ store_constructor (exp, target, align, cleared, size)
       /* If the constructor has fewer fields than the structure
         or if we are initializing the structure to mostly zeros,
         clear the whole structure first.  */
-      else if ((list_length (CONSTRUCTOR_ELTS (exp))
-               != list_length (TYPE_FIELDS (type)))
-              || mostly_zeros_p (exp))
+      else if (size > 0
+              && ((list_length (CONSTRUCTOR_ELTS (exp))
+                   != list_length (TYPE_FIELDS (type)))
+                  || mostly_zeros_p (exp)))
        {
          if (! cleared)
            clear_storage (target, GEN_INT (size),
@@ -4339,7 +4340,7 @@ store_constructor (exp, target, align, cleared, size)
              || 4 * zero_count >= 3 * count)
            need_to_clear = 1;
        }
-      if (need_to_clear)
+      if (need_to_clear && size > 0)
        {
          if (! cleared)
            clear_storage (target, GEN_INT (size),
@@ -4519,7 +4520,7 @@ store_constructor (exp, target, align, cleared, size)
         bzero/memset), and set the bits we want.  */
        
       /* Check for all zeros.  */
-      if (elt == NULL_TREE)
+      if (elt == NULL_TREE && size > 0)
        {
          if (!cleared)
            clear_storage (target, GEN_INT (size),