1*a1545f51SKen Matsui // RUN: %clang_cc1 %s -Eonly -verify -Wno-all -Wno-c++2b-extensions -pedantic -std=c++20 2*a1545f51SKen Matsui // RUN: %clang_cc1 %s -Eonly -verify -Wno-all -Wno-c++2b-extensions -pedantic -std=c++11 3*a1545f51SKen Matsui // RUN: %clang_cc1 -x c %s -Eonly -verify -Wno-all -Wno-c2x-extensions -pedantic -std=c99 40436ec21SRichard Smith 518268428SFaisal Vali //expected-error@+1{{missing '('}} 618268428SFaisal Vali #define V1(...) __VA_OPT__ 718268428SFaisal Vali #undef V1 818268428SFaisal Vali // OK 918268428SFaisal Vali #define V1(...) __VA_OPT__ () 1018268428SFaisal Vali #undef V1 1118268428SFaisal Vali 1218268428SFaisal Vali //expected-warning@+1{{can only appear in the expansion of a variadic macro}} 1318268428SFaisal Vali #define V2() __VA_OPT__(x) 1418268428SFaisal Vali #undef V2 1518268428SFaisal Vali 1618268428SFaisal Vali //expected-error@+2{{missing ')' after}} 1718268428SFaisal Vali //expected-note@+1{{to match this '('}} 1818268428SFaisal Vali #define V3(...) __VA_OPT__( 1918268428SFaisal Vali #undef V3 2018268428SFaisal Vali 2118268428SFaisal Vali #define V4(...) __VA_OPT__(__VA_ARGS__) 2218268428SFaisal Vali #undef V4 2318268428SFaisal Vali 2418268428SFaisal Vali //expected-error@+1{{nested}} 2518268428SFaisal Vali #define V5(...) __VA_OPT__(__VA_OPT__()) 2618268428SFaisal Vali #undef V5 2718268428SFaisal Vali 2818268428SFaisal Vali //expected-error@+1{{not followed by}} 2918268428SFaisal Vali #define V1(...) __VA_OPT__ (#) 3018268428SFaisal Vali #undef V1 3118268428SFaisal Vali 3218268428SFaisal Vali //expected-error@+1{{cannot appear at start}} 3318268428SFaisal Vali #define V1(...) __VA_OPT__ (##) 3418268428SFaisal Vali #undef V1 3518268428SFaisal Vali 3618268428SFaisal Vali //expected-error@+1{{cannot appear at start}} 3718268428SFaisal Vali #define V1(...) __VA_OPT__ (## X) x 3818268428SFaisal Vali #undef V1 3918268428SFaisal Vali 4018268428SFaisal Vali //expected-error@+1{{cannot appear at end}} 4118268428SFaisal Vali #define V1(...) y __VA_OPT__ (X ##) 4218268428SFaisal Vali #undef V1 4318268428SFaisal Vali 4418268428SFaisal Vali 4518268428SFaisal Vali #define FOO(x,...) # __VA_OPT__(x) #x #__VA_OPT__(__VA_ARGS__) //OK 4618268428SFaisal Vali 4718268428SFaisal Vali //expected-error@+1{{not followed by a macro parameter}} 4818268428SFaisal Vali #define V1(...) __VA_OPT__(#) 4918268428SFaisal Vali #undef V1 5018268428SFaisal Vali 5118268428SFaisal Vali //expected-error@+1{{cannot appear at start}} 5218268428SFaisal Vali #define V1(...) a __VA_OPT__(##) b 5318268428SFaisal Vali #undef V1 5418268428SFaisal Vali 5518268428SFaisal Vali //expected-error@+1{{cannot appear at start}} 5618268428SFaisal Vali #define V1(...) a __VA_OPT__(a ## b) b __VA_OPT__(##) 5718268428SFaisal Vali #undef V1 5818268428SFaisal Vali 5918268428SFaisal Vali #define V1(x,...) # __VA_OPT__(b x) // OK 6018268428SFaisal Vali #undef V1 6118268428SFaisal Vali 6218268428SFaisal Vali //expected-error@+2{{missing ')' after}} 6318268428SFaisal Vali //expected-note@+1{{to match this '('}} 6418268428SFaisal Vali #define V1(...) __VA_OPT__ ((()) 6518268428SFaisal Vali #undef V1 6618268428SFaisal Vali 670436ec21SRichard Smith // __VA_OPT__ can't appear anywhere else. 680436ec21SRichard Smith #if __VA_OPT__ // expected-warning {{__VA_OPT__ can only appear in the expansion of a variadic macro}} 690436ec21SRichard Smith #endif 700436ec21SRichard Smith 718edd3464SAaron Ballman // expected-warning@+2 {{__VA_OPT__ can only appear in the expansion of a variadic macro}} 725dfa37a7SRichard Smith #ifdef __VA_OPT__ // expected-warning {{__VA_OPT__ can only appear in the expansion of a variadic macro}} 738edd3464SAaron Ballman #elifdef __VA_OPT__ 740436ec21SRichard Smith #endif 755dfa37a7SRichard Smith 765dfa37a7SRichard Smith #define BAD __VA_OPT__ // expected-warning {{__VA_OPT__ can only appear in the expansion of a variadic macro}} 77