struct-layout: Allow lowering of member alignment

when an alignment is explicitely given on the member itself,
or on its types attributes then respect it always.  Was only
allowed to increase before, but GCC is allowing it.
This commit is contained in:
Michael Matz
2016-10-17 20:27:23 +02:00
parent 8859dc9e6d
commit f5ae4daa5f
2 changed files with 17 additions and 2 deletions

View File

@ -3610,8 +3610,7 @@ static void struct_decl(CType *type, AttributeDef *ad, int u)
alignoverride = 0;
if (ad1.a.aligned) {
int speca = 1 << (ad1.a.aligned - 1);
if (align < speca)
alignoverride = speca;
alignoverride = speca;
} else if (ad1.a.packed || ad->a.packed) {
alignoverride = 1;
} else if (*tcc_state->pack_stack_ptr) {