diff options
author | Jakub Jelinek <jakub@redhat.com> | 2001-10-24 23:47:23 +0200 |
---|---|---|
committer | Jakub Jelinek <jakub@gcc.gnu.org> | 2001-10-24 23:47:23 +0200 |
commit | c163d21d79193fb3463998fe81395b0a9f81da55 (patch) | |
tree | ae608d3d6e2328c23270d903f6faaa81040abc11 | |
parent | 6dee3a2320540b9b654d9a5ef7626e90246ffe80 (diff) | |
download | gcc-c163d21d79193fb3463998fe81395b0a9f81da55.zip gcc-c163d21d79193fb3463998fe81395b0a9f81da55.tar.gz gcc-c163d21d79193fb3463998fe81395b0a9f81da55.tar.bz2 |
stor-layout.c (place_union_field): If any field was aligned with attribute aligned, set record type's TYPE_USER_ALIGN.
* 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.
From-SVN: r46475
-rw-r--r-- | gcc/ChangeLog | 8 | ||||
-rw-r--r-- | gcc/stor-layout.c | 6 |
2 files changed, 13 insertions, 1 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 7733953..f704e4a 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,11 @@ +2001-10-24 Jakub Jelinek <jakub@redhat.com> + + * 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. + 2001-10-24 Zack Weinberg <zack@codesourcery.com> * c-common.h (struct c_common_identifier): Remove rid_code field. diff --git a/gcc/stor-layout.c b/gcc/stor-layout.c index c0837da..22dd86b 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) |