From 5d0c16a884a6639ba3d2de43808104839afe6dcd Mon Sep 17 00:00:00 2001 From: Michael Matz Date: Fri, 15 Jul 2016 17:56:20 +0200 Subject: [PATCH] Support attribute between double pointer stars "int * __attribute__((something)) *" is supported by GCC. --- tccgen.c | 9 +++++---- tests/tcctest.c | 7 +++++++ 2 files changed, 12 insertions(+), 4 deletions(-) diff --git a/tccgen.c b/tccgen.c index f49caa6..3786b49 100644 --- a/tccgen.c +++ b/tccgen.c @@ -3859,15 +3859,16 @@ static void type_decl(CType *type, AttributeDef *ad, int *v, int td) case TOK_RESTRICT2: case TOK_RESTRICT3: goto redo; + /* XXX: clarify attribute handling */ + case TOK_ATTRIBUTE1: + case TOK_ATTRIBUTE2: + parse_attribute(ad); + break; } mk_pointer(type); type->t |= qualifiers; } - /* XXX: clarify attribute handling */ - if (tok == TOK_ATTRIBUTE1 || tok == TOK_ATTRIBUTE2) - parse_attribute(ad); - /* recursive type */ /* XXX: incorrect if abstract type for functions (e.g. 'int ()') */ type1.t = 0; /* XXX: same as int */ diff --git a/tests/tcctest.c b/tests/tcctest.c index 8aa50ab..6218983 100644 --- a/tests/tcctest.c +++ b/tests/tcctest.c @@ -3031,3 +3031,10 @@ void attrib_test(void) printf("attr: %d %d\n", sizeof(Spacked3), sizeof(spacked3)); #endif } +extern __attribute__((__unused__)) char * __attribute__((__unused__)) * +strange_attrib_placement (void); + +void * __attribute__((__unused__)) get_void_ptr (void *a) +{ + return a; +}