1 // RUN: %clang_cc1 %s -Eonly -verify -Wno-all -pedantic -std=c++20 2 // RUN: %clang_cc1 %s -Eonly -verify -Wno-all -pedantic -std=c++11 3 // RUN: %clang_cc1 -x c %s -Eonly -verify -Wno-all -pedantic -std=c99 4 5 //expected-error@+1{{missing '('}} 6 #define V1(...) __VA_OPT__ 7 #undef V1 8 // OK 9 #define V1(...) __VA_OPT__ () 10 #undef V1 11 12 //expected-warning@+1{{can only appear in the expansion of a variadic macro}} 13 #define V2() __VA_OPT__(x) 14 #undef V2 15 16 //expected-error@+2{{missing ')' after}} 17 //expected-note@+1{{to match this '('}} 18 #define V3(...) __VA_OPT__( 19 #undef V3 20 21 #define V4(...) __VA_OPT__(__VA_ARGS__) 22 #undef V4 23 24 //expected-error@+1{{nested}} 25 #define V5(...) __VA_OPT__(__VA_OPT__()) 26 #undef V5 27 28 //expected-error@+1{{not followed by}} 29 #define V1(...) __VA_OPT__ (#) 30 #undef V1 31 32 //expected-error@+1{{cannot appear at start}} 33 #define V1(...) __VA_OPT__ (##) 34 #undef V1 35 36 //expected-error@+1{{cannot appear at start}} 37 #define V1(...) __VA_OPT__ (## X) x 38 #undef V1 39 40 //expected-error@+1{{cannot appear at end}} 41 #define V1(...) y __VA_OPT__ (X ##) 42 #undef V1 43 44 45 #define FOO(x,...) # __VA_OPT__(x) #x #__VA_OPT__(__VA_ARGS__) //OK 46 47 //expected-error@+1{{not followed by a macro parameter}} 48 #define V1(...) __VA_OPT__(#) 49 #undef V1 50 51 //expected-error@+1{{cannot appear at start}} 52 #define V1(...) a __VA_OPT__(##) b 53 #undef V1 54 55 //expected-error@+1{{cannot appear at start}} 56 #define V1(...) a __VA_OPT__(a ## b) b __VA_OPT__(##) 57 #undef V1 58 59 #define V1(x,...) # __VA_OPT__(b x) // OK 60 #undef V1 61 62 //expected-error@+2{{missing ')' after}} 63 //expected-note@+1{{to match this '('}} 64 #define V1(...) __VA_OPT__ ((()) 65 #undef V1 66 67 // __VA_OPT__ can't appear anywhere else. 68 #if __VA_OPT__ // expected-warning {{__VA_OPT__ can only appear in the expansion of a variadic macro}} 69 #endif 70 71 // expected-warning@+2 {{__VA_OPT__ can only appear in the expansion of a variadic macro}} 72 #ifdef __VA_OPT__ // expected-warning {{__VA_OPT__ can only appear in the expansion of a variadic macro}} 73 #elifdef __VA_OPT__ 74 #endif 75 76 #define BAD __VA_OPT__ // expected-warning {{__VA_OPT__ can only appear in the expansion of a variadic macro}} 77