(store_field): Convert EXP to MODE before calling store_bit_field.
authorRichard Kenner <kenner@gcc.gnu.org>
Fri, 19 Nov 1993 23:48:17 +0000 (18:48 -0500)
committerRichard Kenner <kenner@gcc.gnu.org>
Fri, 19 Nov 1993 23:48:17 +0000 (18:48 -0500)
From-SVN: r6119

gcc/expr.c

index f82c2abc3967003eff5a212cebf3c22eecbf775c..95a51a32517be993a3a2624a792d821562821aed 100644 (file)
@@ -3028,6 +3028,13 @@ store_field (target, bitsize, bitpos, mode, exp, value_mode,
       || (STRICT_ALIGNMENT && bitpos % GET_MODE_ALIGNMENT (mode) != 0))
     {
       rtx temp = expand_expr (exp, NULL_RTX, VOIDmode, 0);
+
+      /* Unless MODE is VOIDmode or BLKmode, convert TEMP to
+        MODE.  */
+      if (mode != VOIDmode && mode != BLKmode
+         && mode != TYPE_MODE (TREE_TYPE (exp)))
+       temp = convert_modes (mode, TYPE_MODE (TREE_TYPE (exp)), temp, 1);
+
       /* Store the value in the bitfield.  */
       store_bit_field (target, bitsize, bitpos, mode, temp, align, total_size);
       if (value_mode != VOIDmode)