| /* { dg-do compile } */ |
| /* { dg-options "-std=gnu99" { target c } } */ |
| /* { dg-options "-std=c++2a" { target c++ } } */ |
| |
| extern void f0 (void); |
| extern void f1 (int); |
| extern void f2 (int, int); |
| extern void f3 (int, int, int); |
| extern void f4 (int, int, int, int); |
| extern int s (const char *); |
| |
| #define CALL(F, ...) F (7 __VA_OPT__(,) __VA_ARGS__) |
| #define CP(F, X, Y, ...) F (__VA_OPT__(X ## Y,) __VA_ARGS__) |
| #define CS(F, ...) F(__VA_OPT__(s(# __VA_ARGS__))) |
| #define D(F, ...) F(__VA_OPT__(__VA_ARGS__) __VA_OPT__(,) __VA_ARGS__) |
| #define CALL0(...) __VA_OPT__(f2)(0 __VA_OPT__(,)__VA_ARGS__) |
| |
| void t (void) |
| { |
| CALL (f1); |
| CALL (f1, ); |
| CALL (f2, 1); |
| CALL (f3, 1, 2); |
| |
| int one = 1; |
| int two = 2; |
| int onetwo = 23; |
| |
| CP (f0, one, two); |
| CP (f0, one, two, ); |
| CP (f2, one, two, 3); |
| |
| CS (f0); |
| CS (f1, 1, 2, 3, 4); |
| |
| D (f0); |
| D (f2, 1); |
| D (f4, 1, 2); |
| |
| CALL0 (); |
| CALL0 (23); |
| } |