1 // RUN: %clang_cc1 -E %s -pedantic -std=c++2a | FileCheck -strict-whitespace %s
7 #define A1 expandedA1 A0
8 #define A2 expandedA2 A1
9 #define A3 expandedA3 A2
11 #define A() B LPAREN )
12 #define B() C LPAREN )
13 #define C() D LPAREN )
17 #define ELLIP_FUNC(...) __VA_OPT__(__VA_ARGS__)
19 1: ELLIP_FUNC(F
, LPAREN
, 'a', 'b', RPAREN
);
20 2: ELLIP_FUNC(F LPAREN
'a', 'b' RPAREN
);
24 // CHECK: 1: F, (, 'a', 'b', );
25 // CHECK: 2: 'a' + 'b';
27 #define F(...) f(0 __VA_OPT__(,) __VA_ARGS__)
28 3: F(a
, b
, c
) // replaced by f(0, a, b, c)
29 4: F() // replaced by f(0)
31 // CHECK: 3: f(0 , a, b, c)
35 #define G(X, ...) f(0, X __VA_OPT__(,) __VA_ARGS__)
37 5: G(a
, b
, c
) // replaced by f(0, a , b, c)
38 6: G(a
) // replaced by f(0, a)
39 7: G(a
,) // replaced by f(0, a)
43 // CHECK: 5: f(0, a , b, c)
46 // CHECK: 7.1: f(0, a , ,)
51 #define F(x, ...) HT_ ## __VA_OPT__(x x A() #x)
57 // CHECK: 9: TONG C ( ) B ( ) "A()"
61 #define F(a,...) #__VA_OPT__(A1 a)
66 // CHECK: 11: "A1 expandedA1 expandedA0 B ( )"
70 #define F(a,...) a ## __VA_OPT__(A1 a) ## __VA_ARGS__ ## a
79 #define F(...) #__VA_OPT__() X ## __VA_OPT__() #__VA_OPT__( )
89 #define SDEF(sname, ...) S sname __VA_OPT__(= { __VA_ARGS__ })
91 16: SDEF(foo
); // replaced by S foo;
92 17: SDEF(bar
, 1, 2); // replaced by S bar = { 1, 2 };
95 // CHECK: 17: S bar = { 1, 2 };
98 #define F(a,...) A() #__VA_OPT__(A3 __VA_ARGS__ a ## __VA_ARGS__ ## a ## C A3) A()
106 // CHECK: 18: B ( ) "" B ( )
107 // CHECK: 19: B ( ) "" B ( )
108 // CHECK: 20: B ( ) "A3 expandedA3 expandedA2 expandedA1 expandedA0 A3C A3" B ( )
109 // CHECK: 21: B ( ) "A3 B ( ),expandedA0 A3A(),A0A3C A3" B ( )
113 #define F(a,...) A() #__VA_OPT__(A3 __VA_ARGS__ a ## __VA_ARGS__ ## a ## C A3) a __VA_OPT__(A0 __VA_ARGS__ a ## __VA_ARGS__ ## a ## C A0) A()
121 // CHECK: 22: B ( ) "" B ( )
122 // CHECK: 23: B ( ) "" B ( )
123 // CHECK: 24: B ( ) "A3 expandedA0 A0C A3" expandedA0 expandedA0 A0C expandedA0 B ( )
124 // CHECK: 25: B ( ) "A3 B ( ),expandedA0 A0A(),A0A0C A3" expandedA0 expandedA0 C ( ),expandedA0 A0A(),A0A0C expandedA0 B ( )
128 #define F(a,...) __VA_OPT__(B a ## a) ## 1
129 #define G(a,...) __VA_OPT__(B a) ## 1
137 #define F(a,...) B ## __VA_OPT__(a 1) ## 1
138 #define G(a,...) B ## __VA_OPT__(a ## a 1) ## 1
144 // CHECK: 27_1: BexpandedA0 11