Support attribute between double pointer stars

"int * __attribute__((something)) *" is supported by GCC.
This commit is contained in:
Michael Matz 2016-07-15 17:56:20 +02:00
parent 662338f116
commit 5d0c16a884
2 changed files with 12 additions and 4 deletions

View File

@ -3859,15 +3859,16 @@ static void type_decl(CType *type, AttributeDef *ad, int *v, int td)
case TOK_RESTRICT2: case TOK_RESTRICT2:
case TOK_RESTRICT3: case TOK_RESTRICT3:
goto redo; goto redo;
/* XXX: clarify attribute handling */
case TOK_ATTRIBUTE1:
case TOK_ATTRIBUTE2:
parse_attribute(ad);
break;
} }
mk_pointer(type); mk_pointer(type);
type->t |= qualifiers; type->t |= qualifiers;
} }
/* XXX: clarify attribute handling */
if (tok == TOK_ATTRIBUTE1 || tok == TOK_ATTRIBUTE2)
parse_attribute(ad);
/* recursive type */ /* recursive type */
/* XXX: incorrect if abstract type for functions (e.g. 'int ()') */ /* XXX: incorrect if abstract type for functions (e.g. 'int ()') */
type1.t = 0; /* XXX: same as int */ type1.t = 0; /* XXX: same as int */

View File

@ -3031,3 +3031,10 @@ void attrib_test(void)
printf("attr: %d %d\n", sizeof(Spacked3), sizeof(spacked3)); printf("attr: %d %d\n", sizeof(Spacked3), sizeof(spacked3));
#endif #endif
} }
extern __attribute__((__unused__)) char * __attribute__((__unused__)) *
strange_attrib_placement (void);
void * __attribute__((__unused__)) get_void_ptr (void *a)
{
return a;
}