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:
parent
a2b9916174
commit
ce64861eed
@ -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.
|
||||
|
||||
|
11
gcc/expr.c
11
gcc/expr.c
@ -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
|
||||
|
Loading…
Reference in New Issue
Block a user