From: Richard Stallman Date: Sun, 29 Mar 1992 03:05:58 +0000 (+0000) Subject: *** empty log message *** X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=23ad4d413056ba518720155f304d0524e248ab0e;p=gcc.git *** empty log message *** From-SVN: r619 --- diff --git a/gcc/stor-layout.c b/gcc/stor-layout.c index c2aba9c5a20..bf028003569 100644 --- a/gcc/stor-layout.c +++ b/gcc/stor-layout.c @@ -188,8 +188,10 @@ layout_decl (decl, known_align) DECL_SIZE (decl) = size_int (spec_size); } /* Force alignment required for the data type. - But if the decl itself wants greater alignment, don't override that. */ - else if (TYPE_ALIGN (type) > DECL_ALIGN (decl)) + But if the decl itself wants greater alignment, don't override that. + Likewise, if the decl is packed, don't override it. */ + else if (DECL_ALIGN (decl) == 0 + || (! DECL_PACKED (decl) && TYPE_ALIGN (type) > DECL_ALIGN (decl))) DECL_ALIGN (decl) = TYPE_ALIGN (type); /* See if we can use an ordinary integer mode for a bit-field. */ @@ -302,6 +304,7 @@ layout_record (rec) record_align = MAX (record_align, desired_align); #else if (PCC_BITFIELD_TYPE_MATTERS && TREE_TYPE (field) != error_mark_node + && DECL_BIT_FIELD (field) && ! integer_zerop (TYPE_SIZE (TREE_TYPE (field)))) { /* For these machines, a zero-length field does not @@ -350,6 +353,7 @@ layout_record (rec) if (PCC_BITFIELD_TYPE_MATTERS && TREE_CODE (field) == FIELD_DECL && TREE_TYPE (field) != error_mark_node + && DECL_BIT_FIELD (field) && !DECL_PACKED (field) && !integer_zerop (DECL_SIZE (field))) { @@ -371,6 +375,7 @@ layout_record (rec) if (BITFIELD_NBYTES_LIMITED && TREE_CODE (field) == FIELD_DECL && TREE_TYPE (field) != error_mark_node + && DECL_BIT_FIELD (field) && !DECL_PACKED (field) && !integer_zerop (DECL_SIZE (field))) { @@ -499,7 +504,7 @@ layout_union (rec) #ifdef PCC_BITFIELD_TYPE_MATTERS /* On the m88000, a bit field of declare type `int' forces the entire union to have `int' alignment. */ - if (PCC_BITFIELD_TYPE_MATTERS) + if (PCC_BITFIELD_TYPE_MATTERS && DECL_BIT_FIELD (field)) union_align = MAX (union_align, TYPE_ALIGN (TREE_TYPE (field))); #endif