brintos

brintos / llvm-project-archived public Read only

0
0
Text · 3.1 KiB · b34a282 Raw
151 lines · cpp
1// RUN: %clang_cc1 -E %s -pedantic -std=c++20 | FileCheck -strict-whitespace %s2// RUN: %clang_cc1 -E %s -pedantic -std=c++11 | FileCheck -strict-whitespace %s3// RUN: %clang_cc1 -E -x c %s -pedantic -std=c99 | FileCheck -strict-whitespace %s4 5#define LPAREN (6#define RPAREN )7 8#define A0 expandedA09#define A1  expandedA1 A010#define A2  expandedA2 A111#define A3  expandedA3 A212 13#define A() B LPAREN )14#define B() C LPAREN )15#define C() D LPAREN )16 17 18#define F(x, y) x + y19#define ELLIP_FUNC(...) __VA_OPT__(__VA_ARGS__)20 211: ELLIP_FUNC(F, LPAREN, 'a', 'b', RPAREN);222: ELLIP_FUNC(F LPAREN 'a', 'b' RPAREN);23#undef F24#undef ELLIP_FUNC25 26// CHECK: 1: F, (, 'a', 'b', );27// CHECK: 2: 'a' + 'b';28 29#define F(...) f(0 __VA_OPT__(,) __VA_ARGS__)303: F(a, b, c) // replaced by f(0, a, b, c)314: F() // replaced by f(0)32 33// CHECK: 3: f(0 , a, b, c)34// CHECK: 4: f(0 )35#undef F36 37#define G(X, ...) f(0, X __VA_OPT__(,) __VA_ARGS__)38 395: G(a, b, c) // replaced by f(0, a , b, c)406: G(a) // replaced by f(0, a)417: G(a,) // replaced by f(0, a)427.1: G(a,,)43 44 45// CHECK: 5: f(0, a , b, c)46// CHECK: 6: f(0, a )47// CHECK: 7: f(0, a )48// CHECK: 7.1: f(0, a , ,)49#undef G50 51#define HT_B() TONG52 53#define F(x, ...) HT_ ## __VA_OPT__(x x A()  #x)54 558: F(1)569: F(A(),1)57 58// CHECK: 8: HT_59// CHECK: 9: TONG C ( ) B ( ) "A()"60#undef HT_B61#undef F62 63#define F(a,...) #__VA_OPT__(A1 a)64 6510: F(A())6611: F(A1 A(), 1)67// CHECK: 10: ""68// CHECK: 11: "A1 expandedA1 expandedA0 B ( )"69#undef F70 71 72#define F(a,...) a ## __VA_OPT__(A1 a) ## __VA_ARGS__ ## a7312.0: F()7412: F(,)7513: F(B,)76// CHECK: 12.0:77// CHECK: 12:78// CHECK: 13: BB79#undef F80 81#define F(...) #__VA_OPT__()  X ## __VA_OPT__()  #__VA_OPT__(        )82 8314: F()8415: F(1)85 86// CHECK: 14: "" X ""87// CHECK: 15: "" X ""88 89#undef F90 91#define SDEF(sname, ...) S sname __VA_OPT__(= { __VA_ARGS__ })92 9316: SDEF(foo); // replaced by S foo;9417: SDEF(bar, 1, 2); // replaced by S bar = { 1, 2 };95 96// CHECK: 16: S foo ;97// CHECK: 17: S bar = { 1, 2 };98#undef SDEF99 100#define F(a,...) A() #__VA_OPT__(A3 __VA_ARGS__ a ## __VA_ARGS__ ## a ## C A3) A()101 10218: F()10319: F(,)10420: F(,A3)10521: F(A3, A(),A0)106 107 108// CHECK: 18: B ( ) "" B ( )109// CHECK: 19: B ( ) "" B ( )110// CHECK: 20: B ( ) "A3 expandedA3 expandedA2 expandedA1 expandedA0 A3C A3" B ( )111// CHECK: 21: B ( ) "A3 B ( ),expandedA0 A3A(),A0A3C A3" B ( )112 113#undef F114 115#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()116 11722: F()11823: F(,)11924: F(,A0)12025: F(A0, A(),A0)121 122 123// CHECK: 22: B ( ) "" B ( )124// CHECK: 23: B ( ) "" B ( )125// CHECK: 24: B ( ) "A3 expandedA0 A0C A3" expandedA0 expandedA0 A0C expandedA0 B ( )126// CHECK: 25: B ( ) "A3 B ( ),expandedA0 A0A(),A0A0C A3" expandedA0 expandedA0 C ( ),expandedA0 A0A(),A0A0C expandedA0 B ( )127 128#undef F129 130#define F(a,...)  __VA_OPT__(B a ## a) ## 1131#define G(a,...)  __VA_OPT__(B a) ## 113226: F(,1)13326_1: G(,1)134// CHECK: 26: B 1135// CHECK: 26_1: B 1136#undef F137#undef G138 139#define F(a,...)  B ## __VA_OPT__(a 1) ## 1140#define G(a,...)  B ## __VA_OPT__(a ## a 1) ## 1141 14227: F(,1)14327_1: F(A0,1)14428: G(,1)145// CHECK: 27: B 11146// CHECK: 27_1: BexpandedA0 11147// CHECK: 28: B 11148 149#undef F150#undef G151