diff options
author | Jason Merrill <jason@gcc.gnu.org> | 2003-10-14 14:43:27 -0400 |
---|---|---|
committer | Jason Merrill <jason@gcc.gnu.org> | 2003-10-14 14:43:27 -0400 |
commit | 1b4d5fde31787e652ca03dcd9143911d34eab136 (patch) | |
tree | 6ce23fe6c27297992fbc3d02ada01154a587901a /gcc | |
parent | 415c96ca6aba0c768f212dce3cffb85ff34dc1d1 (diff) | |
download | gcc-1b4d5fde31787e652ca03dcd9143911d34eab136.zip gcc-1b4d5fde31787e652ca03dcd9143911d34eab136.tar.gz gcc-1b4d5fde31787e652ca03dcd9143911d34eab136.tar.bz2 |
stor-layout.c (do_type_align): New fn, split out from...
* stor-layout.c (do_type_align): New fn, split out from...
(layout_decl): ...here. Do all alignment calculations for
FIELD_DECLs here.
(update_alignment_for_field): Not here.
(start_record_layout, debug_rli): Remove unpadded_align.
* tree.h (struct record_layout_info_s): Remove unpadded_align.
* c-decl.c (finish_enum): Don't set DECL_SIZE, DECL_ALIGN
or DECL_MODE on the CONST_DECLs.
(finish_struct): Don't mess with DECL_ALIGN.
From-SVN: r72485
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/testsuite/gcc.dg/pack-test-4.c | 32 |
1 files changed, 32 insertions, 0 deletions
diff --git a/gcc/testsuite/gcc.dg/pack-test-4.c b/gcc/testsuite/gcc.dg/pack-test-4.c new file mode 100644 index 0000000..e0cfdf7 --- /dev/null +++ b/gcc/testsuite/gcc.dg/pack-test-4.c @@ -0,0 +1,32 @@ +// PR c/11885 +// Bug: flag4 was allocated into the same byte as the other flags. +// { dg-do run } + +typedef unsigned char uint8_t; + +typedef struct { + + uint8_t flag1:2; + uint8_t flag2:1; + uint8_t flag3:1; + + uint8_t flag4; + +} __attribute__ ((packed)) MyType; + +int main (void) +{ + MyType a; + MyType *b = &a; + + b->flag1 = 0; + b->flag2 = 0; + b->flag3 = 0; + + b->flag4 = 0; + + b->flag4++; + + if (b->flag1 != 0) + abort (); +} |