Commit cb27986c by Eric Botcazou Committed by Eric Botcazou

stor-layout.c (place_field): Finalize non-constant offset for the field, if any.

	* stor-layout.c (place_field): Finalize non-constant offset for the
	field, if any.
ada/
	* gcc-interface/decl.c (create_field_decl_from): Finalize non-constant
	offset for the field, if any.

From-SVN: r209369
parent 069fdd05
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> 2014-04-14 Richard Biener <rguenther@suse.de>
* tree-switch-conversion.c (lshift_cheap_p): Get speed_p * 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> 2014-04-09 Eric Botcazou <ebotcazou@adacore.com>
Svante Signell <svante.signell@gmail.com> Svante Signell <svante.signell@gmail.com>
......
...@@ -8443,7 +8443,8 @@ create_field_decl_from (tree old_field, tree field_type, tree record_type, ...@@ -8443,7 +8443,8 @@ create_field_decl_from (tree old_field, tree field_type, tree record_type,
if (!new_pos) if (!new_pos)
{ {
normalize_offset (&pos, &bitpos, offset_align); 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; DECL_FIELD_BIT_OFFSET (new_field) = bitpos;
SET_DECL_OFFSET_ALIGN (new_field, offset_align); SET_DECL_OFFSET_ALIGN (new_field, offset_align);
DECL_SIZE (new_field) = size; DECL_SIZE (new_field) = size;
......
...@@ -1417,6 +1417,10 @@ place_field (record_layout_info rli, tree field) ...@@ -1417,6 +1417,10 @@ place_field (record_layout_info rli, tree field)
DECL_FIELD_BIT_OFFSET (field) = rli->bitpos; DECL_FIELD_BIT_OFFSET (field) = rli->bitpos;
SET_DECL_OFFSET_ALIGN (field, rli->offset_align); 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 /* 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 approximate this by seeing if its position changed), lay out the field
again; perhaps we can use an integral mode for it now. */ again; perhaps we can use an integral mode for it now. */
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment