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:
6
tccgen.c
6
tccgen.c
@ -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)
|
||||
|
||||
Reference in New Issue
Block a user