From 2b618c1ab4b9a4b8bd9c362cff070fa40cd03353 Mon Sep 17 00:00:00 2001 From: Michael Matz Date: Mon, 11 Jul 2016 18:38:00 +0200 Subject: 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). --- tccgen.c | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) (limited to 'tccgen.c') diff --git a/tccgen.c b/tccgen.c index 202ed07..bbe1d83 100644 --- a/tccgen.c +++ b/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) -- cgit v1.3.1