expr.c (store_field): Ensure ALIGN is no stricter than the alignment of EXP.

* expr.c (store_field): Ensure ALIGN is no stricter than the
	alignment of EXP.

From-SVN: r31759
This commit is contained in:
Richard Kenner 2000-02-02 13:04:50 +00:00 committed by Richard Kenner
parent a7c197f8eb
commit c297a34efe
2 changed files with 12 additions and 0 deletions

View File

@ -1,3 +1,8 @@
Wed Feb 2 08:12:30 2000 Richard Kenner <kenner@vlsi1.ultra.nyu.edu>
* expr.c (store_field): Ensure ALIGN is no stricter than the
alignment of EXP.
2000-02-02 Richard Henderson <rth@cygnus.com>
* jump.c (delete_insn): Partially revert 19 Jan change;

View File

@ -4817,6 +4817,13 @@ store_field (target, bitsize, bitpos, mode, exp, value_mode,
plus_constant (XEXP (target, 0),
bitpos / BITS_PER_UNIT));
/* Make sure that ALIGN is no stricter than the alignment of
EXP. */
if (TREE_CODE (exp) == VAR_DECL)
align = MIN (DECL_ALIGN (exp) / BITS_PER_UNIT, align);
else
align = MIN (TYPE_ALIGN (TREE_TYPE (exp)) / BITS_PER_UNIT, align);
/* Find an alignment that is consistent with the bit position. */
while ((bitpos % (align * BITS_PER_UNIT)) != 0)
align >>= 1;