stor-layout.c (start_record_layout): maximum_field_alignment overrides STRUCTURE_SIZE...
authorPaul Brook <paul@codesourcery.com>
Mon, 23 Oct 2006 16:36:51 +0000 (16:36 +0000)
committerPaul Brook <pbrook@gcc.gnu.org>
Mon, 23 Oct 2006 16:36:51 +0000 (16:36 +0000)
2006-10-23  Paul Brook  <paul@codesourcery.com>

gcc/
* stor-layout.c (start_record_layout): maximum_field_alignment
overrides STRUCTURE_SIZE_BOUNDARY.

gcc/testsuite/
* gcc.dg/pragma-pack-5.c: New test.

From-SVN: r117977

gcc/ChangeLog
gcc/stor-layout.c
gcc/testsuite/ChangeLog
gcc/testsuite/gcc.dg/pragma-pack-5.c [new file with mode: 0644]

index 4c022e5071b53ea752499e1cd41b36fc8b180eae..6e9c9f583e40632772d6e24b768ffaa4036108ac 100644 (file)
@@ -1,3 +1,8 @@
+2006-10-23  Paul Brook  <paul@codesourcery.com>
+
+       * stor-layout.c (start_record_layout): maximum_field_alignment
+       overrides STRUCTURE_SIZE_BOUNDARY.
+
 2006-10-23  Ulrich Weigand  <uweigand@de.ibm.com>
 
        * config/s390/predicates.md ("bras_sym_operand"): Do not accept
index d1e18a243d04bb332182c0ad5281f14cecc7420e..51db310bd48ad84f89b100e24b56f21d8927ed6a 100644 (file)
@@ -531,7 +531,15 @@ start_record_layout (tree t)
 #ifdef STRUCTURE_SIZE_BOUNDARY
   /* Packed structures don't need to have minimum size.  */
   if (! TYPE_PACKED (t))
-    rli->record_align = MAX (rli->record_align, (unsigned) STRUCTURE_SIZE_BOUNDARY);
+    {
+      unsigned tmp;
+
+      /* #pragma pack overrides STRUCTURE_SIZE_BOUNDARY.  */
+      tmp = (unsigned) STRUCTURE_SIZE_BOUNDARY;
+      if (maximum_field_alignment != 0)
+       tmp = MIN (tmp, maximum_field_alignment);
+      rli->record_align = MAX (rli->record_align, tmp);
+    }
 #endif
 
   rli->offset = size_zero_node;
index b5cd9012f62f587160a5e3360cf48f375006ddd8..d6acf665e190a0923ffe7769f69e1bdff5e03bc5 100644 (file)
@@ -1,3 +1,7 @@
+2006-10-23  Paul Brook  <paul@codesourcery.com>
+
+       * gcc.dg/pragma-pack-5.c: New test.
+
 2006-10-23  Ulrich Weigand  <uweigand@de.ibm.com>
 
        * g++.dg/other/s390-1.C: New testcase.
diff --git a/gcc/testsuite/gcc.dg/pragma-pack-5.c b/gcc/testsuite/gcc.dg/pragma-pack-5.c
new file mode 100644 (file)
index 0000000..897686f
--- /dev/null
@@ -0,0 +1,10 @@
+/* Check that pragma pack overrides STRUCTURE_SIZE_BOUNDARY.  */
+/* { dg-do compile } */
+
+#pragma pack(1)
+struct S
+{
+  char a;
+};
+
+int test[sizeof(struct S) == 1 ? 1: -1];