diff options
| author | Michael Matz <matz@suse.de> | 2016-07-15 17:56:20 +0200 |
|---|---|---|
| committer | Michael Matz <matz@suse.de> | 2016-12-15 17:47:09 +0100 |
| commit | 5d0c16a884a6639ba3d2de43808104839afe6dcd (patch) | |
| tree | bf8ab548bb5d079bd613db8fb474ceead4f7cd72 | |
| parent | 662338f116c3b87c78ddb113e8e63f6329fe307f (diff) | |
| download | tinycc-5d0c16a884a6639ba3d2de43808104839afe6dcd.tar.gz tinycc-5d0c16a884a6639ba3d2de43808104839afe6dcd.tar.bz2 | |
Support attribute between double pointer stars
"int * __attribute__((something)) *" is supported by GCC.
| -rw-r--r-- | tccgen.c | 9 | ||||
| -rw-r--r-- | tests/tcctest.c | 7 |
2 files changed, 12 insertions, 4 deletions
@@ -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; +} |
