From: Mumit Khan Date: Mon, 21 Jun 1999 05:11:15 +0000 (+0000) Subject: c-pragma.c (push_alignment): Don't ignore alignments greater than 4 bytes. X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=224bb3734dd32877806ad33b28e39a70b8cb3c5b;p=gcc.git 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 --- diff --git a/gcc/ChangeLog b/gcc/ChangeLog index e0f21f7a0e2..19869b0b94d 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,5 +1,10 @@ Mon Jun 21 05:33:15 1999 Mumit Khan + * c-pragma.c (push_alignment): Don't ignore alignments greater than + 4 bytes. + (insert_pack_attributes): Take into account member natural + alignment. + * i386/winnt.c (exports_head): New static variable. (i386_pe_record_exported_symbol): New function. (i386_pe_asm_file_end): Use. 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); }