summaryrefslogtreecommitdiff
path: root/gcc/stor-layout.c
diff options
context:
space:
mode:
authorjakub <jakub@138bc75d-0d04-0410-961f-82ee72b054a4>2001-10-24 21:47:23 +0000
committerjakub <jakub@138bc75d-0d04-0410-961f-82ee72b054a4>2001-10-24 21:47:23 +0000
commite647551769827d68434acab38033cdc1fbeda627 (patch)
treeae608d3d6e2328c23270d903f6faaa81040abc11 /gcc/stor-layout.c
parenta15437e77609c89b52109c6ff36aa01bdc3f2a15 (diff)
downloadgcc-e647551769827d68434acab38033cdc1fbeda627.tar.gz
* stor-layout.c (place_union_field): If any field was aligned with
attribute aligned, set record type's TYPE_USER_ALIGN. (place_field): Likewise. (finalize_record_size): Don't clear TYPE_USER_ALIGN. (layout_type) [ARRAY_TYPE]: Copy element's TYPE_USER_ALIGN. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@46475 138bc75d-0d04-0410-961f-82ee72b054a4
Diffstat (limited to 'gcc/stor-layout.c')
-rw-r--r--gcc/stor-layout.c6
1 files changed, 5 insertions, 1 deletions
diff --git a/gcc/stor-layout.c b/gcc/stor-layout.c
index c0837dafd5e..22dd86b709e 100644
--- a/gcc/stor-layout.c
+++ b/gcc/stor-layout.c
@@ -650,6 +650,8 @@ place_union_field (rli, field)
MIN (desired_align, (unsigned) BIGGEST_FIELD_ALIGNMENT);
#endif
+ TYPE_USER_ALIGN (rli->t) |= DECL_USER_ALIGN (field);
+
/* Union must be at least as aligned as any field requires. */
rli->record_align = MAX (rli->record_align, desired_align);
rli->unpadded_align = MAX (rli->unpadded_align, desired_align);
@@ -924,6 +926,8 @@ place_field (rli, field)
DECL_FIELD_BIT_OFFSET (field) = rli->bitpos;
SET_DECL_OFFSET_ALIGN (field, rli->offset_align);
+ TYPE_USER_ALIGN (rli->t) |= user_align;
+
/* 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. */
@@ -993,7 +997,6 @@ finalize_record_size (rli)
#else
TYPE_ALIGN (rli->t) = MAX (TYPE_ALIGN (rli->t), rli->record_align);
#endif
- TYPE_USER_ALIGN (rli->t) = 0;
/* Compute the size so far. Be sure to allow for extra bits in the
size in bytes. We have guaranteed above that it will be no more
@@ -1454,6 +1457,7 @@ layout_type (type)
#else
TYPE_ALIGN (type) = MAX (TYPE_ALIGN (element), BITS_PER_UNIT);
#endif
+ TYPE_USER_ALIGN (type) = TYPE_USER_ALIGN (element);
#ifdef ROUND_TYPE_SIZE
if (TYPE_SIZE (type) != 0)