OSDN Git Service

PR middle-end/27942
authorkkojima <kkojima@138bc75d-0d04-0410-961f-82ee72b054a4>
Sun, 11 Jun 2006 23:09:58 +0000 (23:09 +0000)
committerkkojima <kkojima@138bc75d-0d04-0410-961f-82ee72b054a4>
Sun, 11 Jun 2006 23:09:58 +0000 (23:09 +0000)
* 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.

git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@114552 138bc75d-0d04-0410-961f-82ee72b054a4

gcc/ChangeLog
gcc/stor-layout.c
gcc/testsuite/ChangeLog
gcc/testsuite/gcc.dg/attr-ms_struct-packed1.c [new file with mode: 0644]

index c3e3980..16f77b0 100644 (file)
@@ -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.
index 50068a4..bf67099 100644 (file)
@@ -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
index 58def48..e2c222f 100644 (file)
@@ -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 (file)
index 0000000..d885c6f
--- /dev/null
@@ -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;
+}