--- gcc/stor-layout.c (revision 117906) +++ gcc/stor-layout.c (working copy) @@ -525,7 +525,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; --- gcc/testsuite/gcc.dg/pragma-pack-4.c (revision 0) +++ gcc/testsuite/gcc.dg/pragma-pack-4.c (revision 0) @@ -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];