expr.c (store_constructor_field): If bit position is not multiple of alignment of TARGET's mode, use BLKmode.

* expr.c (store_constructor_field): If bit position is not multiple
	of alignment of TARGET's mode, use BLKmode.

From-SVN: r30713
This commit is contained in:
Richard Kenner 1999-11-29 22:44:52 +00:00 committed by Richard Kenner
parent a2b9916174
commit ce64861eed
2 changed files with 11 additions and 3 deletions

View File

@ -1,5 +1,8 @@
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.

View File

@ -4040,9 +4040,14 @@ store_constructor_field (target, bitsize, bitpos,
&& (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