diff options
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/ChangeLog | 5 | ||||
-rw-r--r-- | gcc/expr.c | 7 |
2 files changed, 12 insertions, 0 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 523ee99..ed44d31 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -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; @@ -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; |