From cb3123765e3c7052c9164ac756a82be63f3df4ae Mon Sep 17 00:00:00 2001 From: Kaz Kojima Date: Sun, 11 Jun 2006 23:09:58 +0000 Subject: [PATCH] re PR middle-end/27942 (packed union doesn't make the unaligned magic on sh64-*) PR middle-end/27942 * stor-layout.c (update_alignment_for_field): Don't add extra alignment for packed non-bitfield fields in ms_bitfield_layout_p code. * gcc.dg/attr-ms_struct-packed1.c: New. From-SVN: r114552 --- gcc/ChangeLog | 7 ++++++ gcc/stor-layout.c | 2 +- gcc/testsuite/ChangeLog | 4 +++ gcc/testsuite/gcc.dg/attr-ms_struct-packed1.c | 25 +++++++++++++++++++ 4 files changed, 37 insertions(+), 1 deletion(-) create mode 100644 gcc/testsuite/gcc.dg/attr-ms_struct-packed1.c diff --git a/gcc/ChangeLog b/gcc/ChangeLog index c3e3980aff8..16f77b00a9a 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,10 @@ +2006-06-11 Kaz Kojima + + PR middle-end/27942 + * stor-layout.c (update_alignment_for_field): Don't add extra + alignment for packed non-bitfield fields in ms_bitfield_layout_p + code. + 2006-06-09 Ralf Corsepius * config/mips/t-rtems: Add EL/EB multilib variants. diff --git a/gcc/stor-layout.c b/gcc/stor-layout.c index 50068a4349b..bf67099bad0 100644 --- a/gcc/stor-layout.c +++ b/gcc/stor-layout.c @@ -693,7 +693,7 @@ update_alignment_for_field (record_layout_info rli, tree field, the type, except that for zero-size bitfields this only applies if there was an immediately prior, nonzero-size bitfield. (That's the way it is, experimentally.) */ - if (!is_bitfield + if ((!is_bitfield && !DECL_PACKED (field)) || (!integer_zerop (DECL_SIZE (field)) ? !DECL_PACKED (field) : (rli->prev_field diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 58def48a2d2..e2c222f36a8 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,7 @@ +2006-06-11 Kaz Kojima + + * gcc.dg/attr-ms_struct-packed1.c: New. + 2006-06-09 Mike Stump * gcc.dg/vla-7.c: Add. diff --git a/gcc/testsuite/gcc.dg/attr-ms_struct-packed1.c b/gcc/testsuite/gcc.dg/attr-ms_struct-packed1.c new file mode 100644 index 00000000000..d885c6ff306 --- /dev/null +++ b/gcc/testsuite/gcc.dg/attr-ms_struct-packed1.c @@ -0,0 +1,25 @@ +/* Test for MS structure with packed attribute. */ +/* { dg-do run { target *-*-interix* *-*-mingw* *-*-cygwin* i?86-*-darwin* } } +/* { dg-options "-std=gnu99" } */ + +extern void abort (); + +union u +{ + int a; +} __attribute__((__ms_struct__, __packed__)); + +struct s +{ + char c; + union u u; +}; + +int +main (void) +{ + if (sizeof (struct s) != (sizeof (char) + sizeof (union u))) + abort (); + + return 0; +} -- 2.30.2