expr.c (store_constructor_field): Don't call store_constructor if bitsize is not...
authorRichard Kenner <kenner@vlsi1.ultra.nyu.edu>
Tue, 4 May 2004 19:57:35 +0000 (19:57 +0000)
committerRichard Kenner <kenner@gcc.gnu.org>
Tue, 4 May 2004 19:57:35 +0000 (15:57 -0400)
* expr.c (store_constructor_field): Don't call store_constructor
if bitsize is not a multiple of a byte.

From-SVN: r81487

gcc/ChangeLog
gcc/expr.c

index 95a70e6851a91ced1822972d84ca74934eb049a5..e0510a9429b462505c5be82a32829af3a3cd6bc1 100644 (file)
@@ -1,3 +1,8 @@
+2004-05-04  Richard Kenner  <kenner@vlsi1.ultra.nyu.edu>
+
+       * expr.c (store_constructor_field): Don't call store_constructor
+       if bitsize is not a multiple of a byte.
+
 2004-05-04  Richard Sandiford  <rsandifo@redhat.com>
 
        * reload1.c (inherit_piecemeal_p): New function.
index e8c3ab53c81e437aa6ec1622ccca511990d05398..9239c4a0415ba427b44a4a5a0cad10c1a71646c3 100644 (file)
@@ -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.  */