expr.c (store_constructor): Don't call clear_storage if size is variable.

* expr.c (store_constructor): Don't call clear_storage if size is
	variable.

From-SVN: r31086
This commit is contained in:
Richard Kenner 1999-12-24 17:27:36 +00:00 committed by Richard Kenner
parent 272df862c2
commit 9376fcd631
2 changed files with 11 additions and 5 deletions

View 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.

View 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),