aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
Diffstat (limited to 'gcc')
-rw-r--r--gcc/ChangeLog5
-rw-r--r--gcc/expr.c7
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;
diff --git a/gcc/expr.c b/gcc/expr.c
index 41b0188..087aaa3 100644
--- a/gcc/expr.c
+++ b/gcc/expr.c
@@ -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;