+2014-04-14 Eric Botcazou <ebotcazou@adacore.com>
+
+ * stor-layout.c (place_field): Finalize non-constant offset for the
+ field, if any.
+
2014-04-14 Richard Biener <rguenther@suse.de>
* tree-switch-conversion.c (lshift_cheap_p): Get speed_p
+2014-04-14 Eric Botcazou <ebotcazou@adacore.com>
+
+ * gcc-interface/decl.c (create_field_decl_from): Finalize non-constant
+ offset for the field, if any.
+
2014-04-09 Eric Botcazou <ebotcazou@adacore.com>
Svante Signell <svante.signell@gmail.com>
if (!new_pos)
{
normalize_offset (&pos, &bitpos, offset_align);
- DECL_FIELD_OFFSET (new_field) = pos;
+ /* Finalize the position. */
+ DECL_FIELD_OFFSET (new_field) = variable_size (pos);
DECL_FIELD_BIT_OFFSET (new_field) = bitpos;
SET_DECL_OFFSET_ALIGN (new_field, offset_align);
DECL_SIZE (new_field) = size;
DECL_FIELD_BIT_OFFSET (field) = rli->bitpos;
SET_DECL_OFFSET_ALIGN (field, rli->offset_align);
+ /* Evaluate nonconstant offsets only once, either now or as soon as safe. */
+ if (TREE_CODE (DECL_FIELD_OFFSET (field)) != INTEGER_CST)
+ DECL_FIELD_OFFSET (field) = variable_size (DECL_FIELD_OFFSET (field));
+
/* If this field ended up more aligned than we thought it would be (we
approximate this by seeing if its position changed), lay out the field
again; perhaps we can use an integral mode for it now. */