annotate clang/test/Preprocessor/macro_vaopt_expand.cpp @ 165:597b3f1c2c93

fix call createTailCallEliminationPass
author anatofuz
date Tue, 24 Mar 2020 15:30:52 +0900
parents 1d019706d866
children 2e18cbf3894f
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
150
anatofuz
parents:
diff changeset
1 // RUN: %clang_cc1 -E %s -pedantic -std=c++2a | FileCheck -strict-whitespace %s
anatofuz
parents:
diff changeset
2
anatofuz
parents:
diff changeset
3 #define LPAREN (
anatofuz
parents:
diff changeset
4 #define RPAREN )
anatofuz
parents:
diff changeset
5
anatofuz
parents:
diff changeset
6 #define A0 expandedA0
anatofuz
parents:
diff changeset
7 #define A1 expandedA1 A0
anatofuz
parents:
diff changeset
8 #define A2 expandedA2 A1
anatofuz
parents:
diff changeset
9 #define A3 expandedA3 A2
anatofuz
parents:
diff changeset
10
anatofuz
parents:
diff changeset
11 #define A() B LPAREN )
anatofuz
parents:
diff changeset
12 #define B() C LPAREN )
anatofuz
parents:
diff changeset
13 #define C() D LPAREN )
anatofuz
parents:
diff changeset
14
anatofuz
parents:
diff changeset
15
anatofuz
parents:
diff changeset
16 #define F(x, y) x + y
anatofuz
parents:
diff changeset
17 #define ELLIP_FUNC(...) __VA_OPT__(__VA_ARGS__)
anatofuz
parents:
diff changeset
18
anatofuz
parents:
diff changeset
19 1: ELLIP_FUNC(F, LPAREN, 'a', 'b', RPAREN);
anatofuz
parents:
diff changeset
20 2: ELLIP_FUNC(F LPAREN 'a', 'b' RPAREN);
anatofuz
parents:
diff changeset
21 #undef F
anatofuz
parents:
diff changeset
22 #undef ELLIP_FUNC
anatofuz
parents:
diff changeset
23
anatofuz
parents:
diff changeset
24 // CHECK: 1: F, (, 'a', 'b', );
anatofuz
parents:
diff changeset
25 // CHECK: 2: 'a' + 'b';
anatofuz
parents:
diff changeset
26
anatofuz
parents:
diff changeset
27 #define F(...) f(0 __VA_OPT__(,) __VA_ARGS__)
anatofuz
parents:
diff changeset
28 3: F(a, b, c) // replaced by f(0, a, b, c)
anatofuz
parents:
diff changeset
29 4: F() // replaced by f(0)
anatofuz
parents:
diff changeset
30
anatofuz
parents:
diff changeset
31 // CHECK: 3: f(0 , a, b, c)
anatofuz
parents:
diff changeset
32 // CHECK: 4: f(0 )
anatofuz
parents:
diff changeset
33 #undef F
anatofuz
parents:
diff changeset
34
anatofuz
parents:
diff changeset
35 #define G(X, ...) f(0, X __VA_OPT__(,) __VA_ARGS__)
anatofuz
parents:
diff changeset
36
anatofuz
parents:
diff changeset
37 5: G(a, b, c) // replaced by f(0, a , b, c)
anatofuz
parents:
diff changeset
38 6: G(a) // replaced by f(0, a)
anatofuz
parents:
diff changeset
39 7: G(a,) // replaced by f(0, a)
anatofuz
parents:
diff changeset
40 7.1: G(a,,)
anatofuz
parents:
diff changeset
41
anatofuz
parents:
diff changeset
42
anatofuz
parents:
diff changeset
43 // CHECK: 5: f(0, a , b, c)
anatofuz
parents:
diff changeset
44 // CHECK: 6: f(0, a )
anatofuz
parents:
diff changeset
45 // CHECK: 7: f(0, a )
anatofuz
parents:
diff changeset
46 // CHECK: 7.1: f(0, a , ,)
anatofuz
parents:
diff changeset
47 #undef G
anatofuz
parents:
diff changeset
48
anatofuz
parents:
diff changeset
49 #define HT_B() TONG
anatofuz
parents:
diff changeset
50
anatofuz
parents:
diff changeset
51 #define F(x, ...) HT_ ## __VA_OPT__(x x A() #x)
anatofuz
parents:
diff changeset
52
anatofuz
parents:
diff changeset
53 8: F(1)
anatofuz
parents:
diff changeset
54 9: F(A(),1)
anatofuz
parents:
diff changeset
55
anatofuz
parents:
diff changeset
56 // CHECK: 8: HT_
anatofuz
parents:
diff changeset
57 // CHECK: 9: TONG C ( ) B ( ) "A()"
anatofuz
parents:
diff changeset
58 #undef HT_B
anatofuz
parents:
diff changeset
59 #undef F
anatofuz
parents:
diff changeset
60
anatofuz
parents:
diff changeset
61 #define F(a,...) #__VA_OPT__(A1 a)
anatofuz
parents:
diff changeset
62
anatofuz
parents:
diff changeset
63 10: F(A())
anatofuz
parents:
diff changeset
64 11: F(A1 A(), 1)
anatofuz
parents:
diff changeset
65 // CHECK: 10: ""
anatofuz
parents:
diff changeset
66 // CHECK: 11: "A1 expandedA1 expandedA0 B ( )"
anatofuz
parents:
diff changeset
67 #undef F
anatofuz
parents:
diff changeset
68
anatofuz
parents:
diff changeset
69
anatofuz
parents:
diff changeset
70 #define F(a,...) a ## __VA_OPT__(A1 a) ## __VA_ARGS__ ## a
anatofuz
parents:
diff changeset
71 12.0: F()
anatofuz
parents:
diff changeset
72 12: F(,)
anatofuz
parents:
diff changeset
73 13: F(B,)
anatofuz
parents:
diff changeset
74 // CHECK: 12.0:
anatofuz
parents:
diff changeset
75 // CHECK: 12:
anatofuz
parents:
diff changeset
76 // CHECK: 13: BB
anatofuz
parents:
diff changeset
77 #undef F
anatofuz
parents:
diff changeset
78
anatofuz
parents:
diff changeset
79 #define F(...) #__VA_OPT__() X ## __VA_OPT__() #__VA_OPT__( )
anatofuz
parents:
diff changeset
80
anatofuz
parents:
diff changeset
81 14: F()
anatofuz
parents:
diff changeset
82 15: F(1)
anatofuz
parents:
diff changeset
83
anatofuz
parents:
diff changeset
84 // CHECK: 14: "" X ""
anatofuz
parents:
diff changeset
85 // CHECK: 15: "" X ""
anatofuz
parents:
diff changeset
86
anatofuz
parents:
diff changeset
87 #undef F
anatofuz
parents:
diff changeset
88
anatofuz
parents:
diff changeset
89 #define SDEF(sname, ...) S sname __VA_OPT__(= { __VA_ARGS__ })
anatofuz
parents:
diff changeset
90
anatofuz
parents:
diff changeset
91 16: SDEF(foo); // replaced by S foo;
anatofuz
parents:
diff changeset
92 17: SDEF(bar, 1, 2); // replaced by S bar = { 1, 2 };
anatofuz
parents:
diff changeset
93
anatofuz
parents:
diff changeset
94 // CHECK: 16: S foo ;
anatofuz
parents:
diff changeset
95 // CHECK: 17: S bar = { 1, 2 };
anatofuz
parents:
diff changeset
96 #undef SDEF
anatofuz
parents:
diff changeset
97
anatofuz
parents:
diff changeset
98 #define F(a,...) A() #__VA_OPT__(A3 __VA_ARGS__ a ## __VA_ARGS__ ## a ## C A3) A()
anatofuz
parents:
diff changeset
99
anatofuz
parents:
diff changeset
100 18: F()
anatofuz
parents:
diff changeset
101 19: F(,)
anatofuz
parents:
diff changeset
102 20: F(,A3)
anatofuz
parents:
diff changeset
103 21: F(A3, A(),A0)
anatofuz
parents:
diff changeset
104
anatofuz
parents:
diff changeset
105
anatofuz
parents:
diff changeset
106 // CHECK: 18: B ( ) "" B ( )
anatofuz
parents:
diff changeset
107 // CHECK: 19: B ( ) "" B ( )
anatofuz
parents:
diff changeset
108 // CHECK: 20: B ( ) "A3 expandedA3 expandedA2 expandedA1 expandedA0 A3C A3" B ( )
anatofuz
parents:
diff changeset
109 // CHECK: 21: B ( ) "A3 B ( ),expandedA0 A3A(),A0A3C A3" B ( )
anatofuz
parents:
diff changeset
110
anatofuz
parents:
diff changeset
111 #undef F
anatofuz
parents:
diff changeset
112
anatofuz
parents:
diff changeset
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()
anatofuz
parents:
diff changeset
114
anatofuz
parents:
diff changeset
115 22: F()
anatofuz
parents:
diff changeset
116 23: F(,)
anatofuz
parents:
diff changeset
117 24: F(,A0)
anatofuz
parents:
diff changeset
118 25: F(A0, A(),A0)
anatofuz
parents:
diff changeset
119
anatofuz
parents:
diff changeset
120
anatofuz
parents:
diff changeset
121 // CHECK: 22: B ( ) "" B ( )
anatofuz
parents:
diff changeset
122 // CHECK: 23: B ( ) "" B ( )
anatofuz
parents:
diff changeset
123 // CHECK: 24: B ( ) "A3 expandedA0 A0C A3" expandedA0 expandedA0 A0C expandedA0 B ( )
anatofuz
parents:
diff changeset
124 // CHECK: 25: B ( ) "A3 B ( ),expandedA0 A0A(),A0A0C A3" expandedA0 expandedA0 C ( ),expandedA0 A0A(),A0A0C expandedA0 B ( )
anatofuz
parents:
diff changeset
125
anatofuz
parents:
diff changeset
126 #undef F
anatofuz
parents:
diff changeset
127
anatofuz
parents:
diff changeset
128 #define F(a,...) __VA_OPT__(B a ## a) ## 1
anatofuz
parents:
diff changeset
129 #define G(a,...) __VA_OPT__(B a) ## 1
anatofuz
parents:
diff changeset
130 26: F(,1)
anatofuz
parents:
diff changeset
131 26_1: G(,1)
anatofuz
parents:
diff changeset
132 // CHECK: 26: B 1
anatofuz
parents:
diff changeset
133 // CHECK: 26_1: B 1
anatofuz
parents:
diff changeset
134 #undef F
anatofuz
parents:
diff changeset
135 #undef G
anatofuz
parents:
diff changeset
136
anatofuz
parents:
diff changeset
137 #define F(a,...) B ## __VA_OPT__(a 1) ## 1
anatofuz
parents:
diff changeset
138 #define G(a,...) B ## __VA_OPT__(a ## a 1) ## 1
anatofuz
parents:
diff changeset
139
anatofuz
parents:
diff changeset
140 27: F(,1)
anatofuz
parents:
diff changeset
141 27_1: F(A0,1)
anatofuz
parents:
diff changeset
142 28: G(,1)
anatofuz
parents:
diff changeset
143 // CHECK: 27: B 11
anatofuz
parents:
diff changeset
144 // CHECK: 27_1: BexpandedA0 11
anatofuz
parents:
diff changeset
145 // CHECK: 28: B 11
anatofuz
parents:
diff changeset
146
anatofuz
parents:
diff changeset
147 #undef F
anatofuz
parents:
diff changeset
148 #undef G