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. */
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
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)))
{
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)))
{
#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