From 6c89c39a4880297da031f52ade9b839c6e73ef48 Mon Sep 17 00:00:00 2001 From: Richard Kenner Date: Tue, 4 May 2004 19:57:35 +0000 Subject: [PATCH] expr.c (store_constructor_field): Don't call store_constructor if bitsize is not a multiple of a byte. * expr.c (store_constructor_field): Don't call store_constructor if bitsize is not a multiple of a byte. From-SVN: r81487 --- gcc/ChangeLog | 5 +++++ gcc/expr.c | 3 +++ 2 files changed, 8 insertions(+) diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 95a70e6851a..e0510a9429b 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,8 @@ +2004-05-04 Richard Kenner + + * expr.c (store_constructor_field): Don't call store_constructor + if bitsize is not a multiple of a byte. + 2004-05-04 Richard Sandiford * reload1.c (inherit_piecemeal_p): New function. diff --git a/gcc/expr.c b/gcc/expr.c index e8c3ab53c81..9239c4a0415 100644 --- a/gcc/expr.c +++ b/gcc/expr.c @@ -4492,7 +4492,10 @@ store_constructor_field (rtx target, unsigned HOST_WIDE_INT bitsize, tree exp, tree type, int cleared, int alias_set) { if (TREE_CODE (exp) == CONSTRUCTOR + /* We can only call store_constructor recursively if the size and + bit position are on a byte boundary. */ && bitpos % BITS_PER_UNIT == 0 + && (bitsize > 0 && bitsize % BITS_PER_UNIT == 0) /* If we have a nonzero bitpos for a register target, then we just let store_field do the bitfield handling. This is unlikely to generate unnecessary clear instructions anyways. */ -- 2.30.2