From 6c84d8f35e6e268478c0e94bcef994564752278a Mon Sep 17 00:00:00 2001 From: kenner Date: Fri, 24 Dec 1999 17:27:36 +0000 Subject: [PATCH] * expr.c (store_constructor): Don't call clear_storage if size is variable. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@31086 138bc75d-0d04-0410-961f-82ee72b054a4 --- gcc/ChangeLog | 5 +++++ 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 + + * expr.c (store_constructor): Don't call clear_storage if size is + variable. + 1999-12-24 Kaveh R. Ghazi * Makefile.in (toplev.o): Depend on loop.h. diff --git a/gcc/expr.c b/gcc/expr.c index 2290b98..ac498a4 100644 --- a/gcc/expr.c +++ b/gcc/expr.c @@ -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), -- 2.7.4