Mon Nov 29 16:56:42 1999 Richard Kenner <kenner@vlsi1.ultra.nyu.edu>
+ * expr.c (store_constructor_field): If bit position is not multiple
+ of alignment of TARGET's mode, use BLKmode.
+
* expr.c (expand_expr_unaligned): Add more code from full case
that is needed when OP0 is in a register.
&& (bitpos == 0 || GET_CODE (target) == MEM))
{
if (bitpos != 0)
- target = change_address (target, VOIDmode,
- plus_constant (XEXP (target, 0),
- bitpos / BITS_PER_UNIT));
+ target
+ = change_address (target,
+ GET_MODE (target) == BLKmode
+ || 0 != (bitpos
+ % GET_MODE_ALIGNMENT (GET_MODE (target)))
+ ? BLKmode : VOIDmode,
+ plus_constant (XEXP (target, 0),
+ bitpos / BITS_PER_UNIT));
store_constructor (exp, target, align, cleared);
}
else