Fix parsing attributes for struct decls

Given this code:

  struct __attribute__((...)) Name {...};

TCC was eating "Name", hence generating an anonymous struct.
It also didn't apply any packed attributes to the parsed
members.  Both fixed.  The testcase also contains a case
that isn't yet handled by TCC (under a BROKEN #define).
This commit is contained in:
Michael Matz
2016-07-11 18:38:00 +02:00
parent 7e51546624
commit 2b618c1ab4
2 changed files with 35 additions and 4 deletions

View File

@ -3179,10 +3179,8 @@ static void struct_decl(CType *type, AttributeDef *ad, int u)
a = tok; /* save decl type */
next();
if (tok == TOK_ATTRIBUTE1 || tok == TOK_ATTRIBUTE2) {
if (tok == TOK_ATTRIBUTE1 || tok == TOK_ATTRIBUTE2)
parse_attribute(ad);
next();
}
if (tok != '{') {
v = tok;
next();
@ -3302,7 +3300,7 @@ static void struct_decl(CType *type, AttributeDef *ad, int u)
if (ad1.a.aligned) {
if (align < ad1.a.aligned)
align = ad1.a.aligned;
} else if (ad1.a.packed) {
} else if (ad1.a.packed || ad->a.packed) {
align = 1;
} else if (*tcc_state->pack_stack_ptr) {
if (align > *tcc_state->pack_stack_ptr)