| /* Test C2x attribute syntax. Test GNU attributes appertain to |
| appropriate constructs. Attributes on types not being defined at |
| the time. */ |
| /* { dg-do compile } */ |
| /* { dg-options "-std=gnu2x -Wformat" } */ |
| |
| typedef void va_type (const char *, ...); |
| typedef va_type [[gnu::format (printf, 1, 2)]] printf_like_1; |
| typedef void printf_like_2 (const char *, ...) [[gnu::format (printf, 1, 2)]]; |
| typedef __typeof__ (void (const char *, ...) [[gnu::format (printf, 1, 2)]]) |
| printf_like_3; |
| |
| va_type func1; |
| printf_like_1 func2; |
| printf_like_2 func3; |
| printf_like_3 func4; |
| va_type [[gnu::format (printf, 1, 2)]] *func5 (void); |
| |
| void |
| func_test (void) |
| { |
| func1 ("%s", 1); |
| func2 ("%s", 1); /* { dg-warning "expects argument" } */ |
| func3 ("%s", 1); /* { dg-warning "expects argument" } */ |
| func4 ("%s", 1); /* { dg-warning "expects argument" } */ |
| func5 () ("%s", 1); /* { dg-warning "expects argument" } */ |
| } |
| |
| typedef int A[2]; |
| |
| __typeof__ (int [[gnu::deprecated]]) var1; /* { dg-warning "deprecated" } */ |
| __typeof__ (A [[gnu::deprecated]]) var2; /* { dg-warning "deprecated" } */ |
| __typeof__ (int [3] [[gnu::deprecated]]) var3; /* { dg-warning "deprecated" } */ |