summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorpbrook <pbrook@138bc75d-0d04-0410-961f-82ee72b054a4>2006-10-23 16:36:51 +0000
committerpbrook <pbrook@138bc75d-0d04-0410-961f-82ee72b054a4>2006-10-23 16:36:51 +0000
commit546e12a7e55a940c2d4fc314277a10ff8003ad29 (patch)
treeb5a2423de4a0bde33164ad736843458ea9f47818
parent88f9884fb160ffeab7fea3702367772f3143e12d (diff)
downloadppe42-gcc-546e12a7e55a940c2d4fc314277a10ff8003ad29.tar.gz
ppe42-gcc-546e12a7e55a940c2d4fc314277a10ff8003ad29.zip
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. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@117977 138bc75d-0d04-0410-961f-82ee72b054a4
-rw-r--r--gcc/ChangeLog5
-rw-r--r--gcc/stor-layout.c10
-rw-r--r--gcc/testsuite/ChangeLog4
-rw-r--r--gcc/testsuite/gcc.dg/pragma-pack-5.c10
4 files changed, 28 insertions, 1 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index 4c022e5071b..6e9c9f583e4 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -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
diff --git a/gcc/stor-layout.c b/gcc/stor-layout.c
index d1e18a243d0..51db310bd48 100644
--- a/gcc/stor-layout.c
+++ b/gcc/stor-layout.c
@@ -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;
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog
index b5cd9012f62..d6acf665e19 100644
--- a/gcc/testsuite/ChangeLog
+++ b/gcc/testsuite/ChangeLog
@@ -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
index 00000000000..897686f772a
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/pragma-pack-5.c
@@ -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];
OpenPOWER on IntegriCloud