diff options
author | Mumit Khan <khan@xraylith.wisc.edu> | 1999-06-21 05:11:15 +0000 |
---|---|---|
committer | Jeff Law <law@gcc.gnu.org> | 1999-06-20 23:11:15 -0600 |
commit | 224bb3734dd32877806ad33b28e39a70b8cb3c5b (patch) | |
tree | ee92f4ae95adf9823b844a162e6c97b3635091b9 /gcc/c-pragma.c | |
parent | 90e72e20a3808c9791c2fc1e062f260359adb771 (diff) | |
download | gcc-224bb3734dd32877806ad33b28e39a70b8cb3c5b.tar.gz |
c-pragma.c (push_alignment): Don't ignore alignments greater than 4 bytes.
* c-pragma.c (push_alignment): Don't ignore alignments greater than
4 bytes.
(insert_pack_attributes): Take into account member natural
alignment.
From-SVN: r27648
Diffstat (limited to 'gcc/c-pragma.c')
-rw-r--r-- | gcc/c-pragma.c | 11 |
1 files changed, 8 insertions, 3 deletions
diff --git a/gcc/c-pragma.c b/gcc/c-pragma.c index de9cfb899e5..5aa8d9f2870 100644 --- a/gcc/c-pragma.c +++ b/gcc/c-pragma.c @@ -141,7 +141,7 @@ pop_alignment (id) { entry = alignment_stack->prev; - if (entry == NULL || entry->alignment > 4) + if (entry == NULL) maximum_field_alignment = 0; else maximum_field_alignment = entry->alignment * 8; @@ -163,6 +163,7 @@ insert_pack_attributes (node, attributes, prefix) tree * prefix; { tree a; + int field_alignment; /* If we are not packing, then there is nothing to do. */ if (maximum_field_alignment == 0 @@ -173,12 +174,16 @@ insert_pack_attributes (node, attributes, prefix) if (TREE_CODE_CLASS (TREE_CODE (node)) != 'd' || TREE_CODE (node) != FIELD_DECL) return; + + field_alignment = TYPE_ALIGN (TREE_TYPE (node)); + if (field_alignment <= 0 || field_alignment > maximum_field_alignment) + field_alignment = maximum_field_alignment; /* Add a 'packed' attribute. */ * attributes = tree_cons (get_identifier ("packed"), NULL, * attributes); /* If the alignment is > 8 then add an alignment attribute as well. */ - if (maximum_field_alignment > 8) + if (field_alignment > 8) { /* If the aligned attribute is already present then do not override it. */ for (a = * attributes; a; a = TREE_CHAIN (a)) @@ -201,7 +206,7 @@ insert_pack_attributes (node, attributes, prefix) * attributes = tree_cons (get_identifier ("aligned"), tree_cons (NULL, - build_int_2 (maximum_field_alignment / 8, 0), + build_int_2 (field_alignment / 8, 0), NULL), * attributes); } |