aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorKaz Kojima <kkojima@gcc.gnu.org>2006-06-11 23:09:58 +0000
committerKaz Kojima <kkojima@gcc.gnu.org>2006-06-11 23:09:58 +0000
commitcb3123765e3c7052c9164ac756a82be63f3df4ae (patch)
treeb9d2857c2c76cfb2b205e1818c71fcd7c0d3f8ef /gcc
parent9b317af39e43401fe191a50f9a06cf0e0ab3e235 (diff)
downloadgcc-cb3123765e3c7052c9164ac756a82be63f3df4ae.zip
gcc-cb3123765e3c7052c9164ac756a82be63f3df4ae.tar.gz
gcc-cb3123765e3c7052c9164ac756a82be63f3df4ae.tar.bz2
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
Diffstat (limited to 'gcc')
-rw-r--r--gcc/ChangeLog7
-rw-r--r--gcc/stor-layout.c2
-rw-r--r--gcc/testsuite/ChangeLog4
-rw-r--r--gcc/testsuite/gcc.dg/attr-ms_struct-packed1.c25
4 files changed, 37 insertions, 1 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index c3e3980..16f77b0 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,10 @@
+2006-06-11 Kaz Kojima <kkojima@gcc.gnu.org>
+
+ 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 <ralf.corsepius@rtems.org>
* config/mips/t-rtems: Add EL/EB multilib variants.
diff --git a/gcc/stor-layout.c b/gcc/stor-layout.c
index 50068a4..bf67099 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 58def48..e2c222f 100644
--- a/gcc/testsuite/ChangeLog
+++ b/gcc/testsuite/ChangeLog
@@ -1,3 +1,7 @@
+2006-06-11 Kaz Kojima <kkojima@gcc.gnu.org>
+
+ * gcc.dg/attr-ms_struct-packed1.c: New.
+
2006-06-09 Mike Stump <mrs@apple.com>
* 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 0000000..d885c6f
--- /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;
+}