diff options
| -rw-r--r-- | gcc/ChangeLog | 5 | ||||
| -rw-r--r-- | gcc/expr.c | 11 |
2 files changed, 11 insertions, 5 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog index f34fbd2..75b33fb 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -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. @@ -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), |
