stor-layout.c (layout_decl): Don't misalign field of variable size for packed record.

* stor-layout.c (layout_decl): Don't misalign field of variable size
	for packed record.

From-SVN: r48384
This commit is contained in:
Richard Kenner 2001-12-29 21:00:51 +00:00 committed by Richard Kenner
parent f11c304305
commit 6790d1bd90
2 changed files with 12 additions and 1 deletions

View File

@ -1,5 +1,8 @@
Sat Dec 29 15:48:54 2001 Richard Kenner <kenner@vlsi1.ultra.nyu.edu>
* stor-layout.c (layout_decl): Don't misalign field of variable size
for packed record.
* dwarf2out.c (compute_section_prefix): Avoid cast warning.
(gen_decl_die): Only check DECL_IGNORED_P on decls.
(dwarf2out_decl): Check for DECL_IGNORED_P only when needed.

View File

@ -389,7 +389,15 @@ layout_decl (decl, known_align)
DECL_BIT_FIELD_TYPE (decl) = DECL_BIT_FIELD (decl) ? type : 0;
if (maximum_field_alignment != 0)
DECL_ALIGN (decl) = MIN (DECL_ALIGN (decl), maximum_field_alignment);
else if (DECL_PACKED (decl))
/* If the field is of variable size, we can't misalign it since we
have no way to make a temporary to align the result. But this
isn't an issue if the decl is not addressable. Likewise if it
is of unknown size. */
else if (DECL_PACKED (decl)
&& (DECL_NONADDRESSABLE_P (decl)
|| DECL_SIZE_UNIT (decl) == 0
|| TREE_CODE (DECL_SIZE_UNIT (decl)) == INTEGER_CST))
{
DECL_ALIGN (decl) = MIN (DECL_ALIGN (decl), BITS_PER_UNIT);
DECL_USER_ALIGN (decl) = 0;