1 | // RUN: %clang_cc1 -triple x86_64-unknown-unknown -Wno-unused-value -std=gnu11 -ast-dump %s | FileCheck -strict-whitespace %s |
2 | |
3 | void Comma(void) { |
4 | 1, 2, 3; |
5 | // CHECK: BinaryOperator 0x{{[^ ]*}} <line:[[@LINE-1]]:3, col:9> 'int' ',' |
6 | // CHECK-NEXT: BinaryOperator 0x{{[^ ]*}} <col:3, col:6> 'int' ',' |
7 | // CHECK-NEXT: IntegerLiteral 0x{{[^ ]*}} <col:3> 'int' 1 |
8 | // CHECK-NEXT: IntegerLiteral 0x{{[^ ]*}} <col:6> 'int' 2 |
9 | // CHECK-NEXT: IntegerLiteral 0x{{[^ ]*}} <col:9> 'int' 3 |
10 | } |
11 | |
12 | void Assignment(int a) { |
13 | a = 12; |
14 | // CHECK: BinaryOperator 0x{{[^ ]*}} <line:[[@LINE-1]]:3, col:7> 'int' '=' |
15 | // CHECK-NEXT: DeclRefExpr 0x{{[^ ]*}} <col:3> 'int' lvalue ParmVar 0x{{[^ ]*}} 'a' 'int' |
16 | // CHECK-NEXT: IntegerLiteral 0x{{[^ ]*}} <col:7> 'int' 12 |
17 | |
18 | a += a; |
19 | // CHECK: CompoundAssignOperator 0x{{[^ ]*}} <line:[[@LINE-1]]:3, col:8> 'int' '+=' ComputeLHSTy='int' ComputeResultTy='int' |
20 | // CHECK-NEXT: DeclRefExpr 0x{{[^ ]*}} <col:3> 'int' lvalue ParmVar 0x{{[^ ]*}} 'a' 'int' |
21 | // CHECK-NEXT: ImplicitCastExpr |
22 | // CHECK-NEXT: DeclRefExpr 0x{{[^ ]*}} <col:8> 'int' lvalue ParmVar 0x{{[^ ]*}} 'a' 'int' |
23 | } |
24 | |
25 | void Conditionals(int a) { |
26 | a ? 0 : 1; |
27 | // CHECK: ConditionalOperator 0x{{[^ ]*}} <line:[[@LINE-1]]:3, col:11> 'int' |
28 | // CHECK-NEXT: ImplicitCastExpr |
29 | // CHECK-NEXT: DeclRefExpr 0x{{[^ ]*}} <col:3> 'int' lvalue ParmVar 0x{{[^ ]*}} 'a' 'int' |
30 | // CHECK-NEXT: IntegerLiteral 0x{{[^ ]*}} <col:7> 'int' 0 |
31 | // CHECK-NEXT: IntegerLiteral 0x{{[^ ]*}} <col:11> 'int' 1 |
32 | |
33 | a ?: 0; |
34 | // CHECK: BinaryConditionalOperator 0x{{[^ ]*}} <line:[[@LINE-1]]:3, col:8> 'int' |
35 | // CHECK-NEXT: ImplicitCastExpr |
36 | // CHECK-NEXT: DeclRefExpr 0x{{[^ ]*}} <col:3> 'int' lvalue ParmVar 0x{{[^ ]*}} 'a' 'int' |
37 | // CHECK-NEXT: OpaqueValueExpr 0x{{[^ ]*}} <col:3> 'int' |
38 | // CHECK-NEXT: ImplicitCastExpr |
39 | // CHECK-NEXT: DeclRefExpr 0x{{[^ ]*}} <col:3> 'int' lvalue ParmVar 0x{{[^ ]*}} 'a' 'int' |
40 | // CHECK-NEXT: OpaqueValueExpr 0x{{[^ ]*}} <col:3> 'int' |
41 | // CHECK-NEXT: ImplicitCastExpr |
42 | // CHECK-NEXT: DeclRefExpr 0x{{[^ ]*}} <col:3> 'int' lvalue ParmVar 0x{{[^ ]*}} 'a' 'int' |
43 | // CHECK-NEXT: IntegerLiteral 0x{{[^ ]*}} <col:8> 'int' 0 |
44 | } |
45 | |
46 | void BinaryOperators(int a, int b) { |
47 | // Logical operators |
48 | a || b; |
49 | // CHECK: BinaryOperator 0x{{[^ ]*}} <line:[[@LINE-1]]:3, col:8> 'int' '||' |
50 | // CHECK-NEXT: ImplicitCastExpr |
51 | // CHECK-NEXT: DeclRefExpr 0x{{[^ ]*}} <col:3> 'int' lvalue ParmVar 0x{{[^ ]*}} 'a' 'int' |
52 | // CHECK-NEXT: ImplicitCastExpr |
53 | // CHECK-NEXT: DeclRefExpr 0x{{[^ ]*}} <col:8> 'int' lvalue ParmVar 0x{{[^ ]*}} 'b' 'int' |
54 | |
55 | a && b; |
56 | // CHECK: BinaryOperator 0x{{[^ ]*}} <line:[[@LINE-1]]:3, col:8> 'int' '&&' |
57 | // CHECK-NEXT: ImplicitCastExpr |
58 | // CHECK-NEXT: DeclRefExpr 0x{{[^ ]*}} <col:3> 'int' lvalue ParmVar 0x{{[^ ]*}} 'a' 'int' |
59 | // CHECK-NEXT: ImplicitCastExpr |
60 | // CHECK-NEXT: DeclRefExpr 0x{{[^ ]*}} <col:8> 'int' lvalue ParmVar 0x{{[^ ]*}} 'b' 'int' |
61 | |
62 | // Bitwise operators |
63 | a | b; |
64 | // CHECK: BinaryOperator 0x{{[^ ]*}} <line:[[@LINE-1]]:3, col:7> 'int' '|' |
65 | // CHECK-NEXT: ImplicitCastExpr |
66 | // CHECK-NEXT: DeclRefExpr 0x{{[^ ]*}} <col:3> 'int' lvalue ParmVar 0x{{[^ ]*}} 'a' 'int' |
67 | // CHECK-NEXT: ImplicitCastExpr |
68 | // CHECK-NEXT: DeclRefExpr 0x{{[^ ]*}} <col:7> 'int' lvalue ParmVar 0x{{[^ ]*}} 'b' 'int' |
69 | |
70 | a ^ b; |
71 | // CHECK: BinaryOperator 0x{{[^ ]*}} <line:[[@LINE-1]]:3, col:7> 'int' '^' |
72 | // CHECK-NEXT: ImplicitCastExpr |
73 | // CHECK-NEXT: DeclRefExpr 0x{{[^ ]*}} <col:3> 'int' lvalue ParmVar 0x{{[^ ]*}} 'a' 'int' |
74 | // CHECK-NEXT: ImplicitCastExpr |
75 | // CHECK-NEXT: DeclRefExpr 0x{{[^ ]*}} <col:7> 'int' lvalue ParmVar 0x{{[^ ]*}} 'b' 'int' |
76 | |
77 | a & b; |
78 | // CHECK: BinaryOperator 0x{{[^ ]*}} <line:[[@LINE-1]]:3, col:7> 'int' '&' |
79 | // CHECK-NEXT: ImplicitCastExpr |
80 | // CHECK-NEXT: DeclRefExpr 0x{{[^ ]*}} <col:3> 'int' lvalue ParmVar 0x{{[^ ]*}} 'a' 'int' |
81 | // CHECK-NEXT: ImplicitCastExpr |
82 | // CHECK-NEXT: DeclRefExpr 0x{{[^ ]*}} <col:7> 'int' lvalue ParmVar 0x{{[^ ]*}} 'b' 'int' |
83 | |
84 | // Equality operators |
85 | a == b; |
86 | // CHECK: BinaryOperator 0x{{[^ ]*}} <line:[[@LINE-1]]:3, col:8> 'int' '==' |
87 | // CHECK-NEXT: ImplicitCastExpr |
88 | // CHECK-NEXT: DeclRefExpr 0x{{[^ ]*}} <col:3> 'int' lvalue ParmVar 0x{{[^ ]*}} 'a' 'int' |
89 | // CHECK-NEXT: ImplicitCastExpr |
90 | // CHECK-NEXT: DeclRefExpr 0x{{[^ ]*}} <col:8> 'int' lvalue ParmVar 0x{{[^ ]*}} 'b' 'int' |
91 | |
92 | a != b; |
93 | // CHECK: BinaryOperator 0x{{[^ ]*}} <line:[[@LINE-1]]:3, col:8> 'int' '!=' |
94 | // CHECK-NEXT: ImplicitCastExpr |
95 | // CHECK-NEXT: DeclRefExpr 0x{{[^ ]*}} <col:3> 'int' lvalue ParmVar 0x{{[^ ]*}} 'a' 'int' |
96 | // CHECK-NEXT: ImplicitCastExpr |
97 | // CHECK-NEXT: DeclRefExpr 0x{{[^ ]*}} <col:8> 'int' lvalue ParmVar 0x{{[^ ]*}} 'b' 'int' |
98 | |
99 | // Relational operators |
100 | a < b; |
101 | // CHECK: BinaryOperator 0x{{[^ ]*}} <line:[[@LINE-1]]:3, col:7> 'int' '<' |
102 | // CHECK-NEXT: ImplicitCastExpr |
103 | // CHECK-NEXT: DeclRefExpr 0x{{[^ ]*}} <col:3> 'int' lvalue ParmVar 0x{{[^ ]*}} 'a' 'int' |
104 | // CHECK-NEXT: ImplicitCastExpr |
105 | // CHECK-NEXT: DeclRefExpr 0x{{[^ ]*}} <col:7> 'int' lvalue ParmVar 0x{{[^ ]*}} 'b' 'int' |
106 | |
107 | a > b; |
108 | // CHECK: BinaryOperator 0x{{[^ ]*}} <line:[[@LINE-1]]:3, col:7> 'int' '>' |
109 | // CHECK-NEXT: ImplicitCastExpr |
110 | // CHECK-NEXT: DeclRefExpr 0x{{[^ ]*}} <col:3> 'int' lvalue ParmVar 0x{{[^ ]*}} 'a' 'int' |
111 | // CHECK-NEXT: ImplicitCastExpr |
112 | // CHECK-NEXT: DeclRefExpr 0x{{[^ ]*}} <col:7> 'int' lvalue ParmVar 0x{{[^ ]*}} 'b' 'int' |
113 | |
114 | a <= b; |
115 | // CHECK: BinaryOperator 0x{{[^ ]*}} <line:[[@LINE-1]]:3, col:8> 'int' '<=' |
116 | // CHECK-NEXT: ImplicitCastExpr |
117 | // CHECK-NEXT: DeclRefExpr 0x{{[^ ]*}} <col:3> 'int' lvalue ParmVar 0x{{[^ ]*}} 'a' 'int' |
118 | // CHECK-NEXT: ImplicitCastExpr |
119 | // CHECK-NEXT: DeclRefExpr 0x{{[^ ]*}} <col:8> 'int' lvalue ParmVar 0x{{[^ ]*}} 'b' 'int' |
120 | |
121 | a >= b; |
122 | // CHECK: BinaryOperator 0x{{[^ ]*}} <line:[[@LINE-1]]:3, col:8> 'int' '>=' |
123 | // CHECK-NEXT: ImplicitCastExpr |
124 | // CHECK-NEXT: DeclRefExpr 0x{{[^ ]*}} <col:3> 'int' lvalue ParmVar 0x{{[^ ]*}} 'a' 'int' |
125 | // CHECK-NEXT: ImplicitCastExpr |
126 | // CHECK-NEXT: DeclRefExpr 0x{{[^ ]*}} <col:8> 'int' lvalue ParmVar 0x{{[^ ]*}} 'b' 'int' |
127 | |
128 | // Bit shifting operators |
129 | a << b; |
130 | // CHECK: BinaryOperator 0x{{[^ ]*}} <line:[[@LINE-1]]:3, col:8> 'int' '<<' |
131 | // CHECK-NEXT: ImplicitCastExpr |
132 | // CHECK-NEXT: DeclRefExpr 0x{{[^ ]*}} <col:3> 'int' lvalue ParmVar 0x{{[^ ]*}} 'a' 'int' |
133 | // CHECK-NEXT: ImplicitCastExpr |
134 | // CHECK-NEXT: DeclRefExpr 0x{{[^ ]*}} <col:8> 'int' lvalue ParmVar 0x{{[^ ]*}} 'b' 'int' |
135 | |
136 | a >> b; |
137 | // CHECK: BinaryOperator 0x{{[^ ]*}} <line:[[@LINE-1]]:3, col:8> 'int' '>>' |
138 | // CHECK-NEXT: ImplicitCastExpr |
139 | // CHECK-NEXT: DeclRefExpr 0x{{[^ ]*}} <col:3> 'int' lvalue ParmVar 0x{{[^ ]*}} 'a' 'int' |
140 | // CHECK-NEXT: ImplicitCastExpr |
141 | // CHECK-NEXT: DeclRefExpr 0x{{[^ ]*}} <col:8> 'int' lvalue ParmVar 0x{{[^ ]*}} 'b' 'int' |
142 | |
143 | // Additive operators |
144 | a + b; |
145 | // CHECK: BinaryOperator 0x{{[^ ]*}} <line:[[@LINE-1]]:3, col:7> 'int' '+' |
146 | // CHECK-NEXT: ImplicitCastExpr |
147 | // CHECK-NEXT: DeclRefExpr 0x{{[^ ]*}} <col:3> 'int' lvalue ParmVar 0x{{[^ ]*}} 'a' 'int' |
148 | // CHECK-NEXT: ImplicitCastExpr |
149 | // CHECK-NEXT: DeclRefExpr 0x{{[^ ]*}} <col:7> 'int' lvalue ParmVar 0x{{[^ ]*}} 'b' 'int' |
150 | |
151 | a - b; |
152 | // CHECK: BinaryOperator 0x{{[^ ]*}} <line:[[@LINE-1]]:3, col:7> 'int' '-' |
153 | // CHECK-NEXT: ImplicitCastExpr |
154 | // CHECK-NEXT: DeclRefExpr 0x{{[^ ]*}} <col:3> 'int' lvalue ParmVar 0x{{[^ ]*}} 'a' 'int' |
155 | // CHECK-NEXT: ImplicitCastExpr |
156 | // CHECK-NEXT: DeclRefExpr 0x{{[^ ]*}} <col:7> 'int' lvalue ParmVar 0x{{[^ ]*}} 'b' 'int' |
157 | |
158 | // Multiplicative operators |
159 | a * b; |
160 | // CHECK: BinaryOperator 0x{{[^ ]*}} <line:[[@LINE-1]]:3, col:7> 'int' '*' |
161 | // CHECK-NEXT: ImplicitCastExpr |
162 | // CHECK-NEXT: DeclRefExpr 0x{{[^ ]*}} <col:3> 'int' lvalue ParmVar 0x{{[^ ]*}} 'a' 'int' |
163 | // CHECK-NEXT: ImplicitCastExpr |
164 | // CHECK-NEXT: DeclRefExpr 0x{{[^ ]*}} <col:7> 'int' lvalue ParmVar 0x{{[^ ]*}} 'b' 'int' |
165 | |
166 | a / b; |
167 | // CHECK: BinaryOperator 0x{{[^ ]*}} <line:[[@LINE-1]]:3, col:7> 'int' '/' |
168 | // CHECK-NEXT: ImplicitCastExpr |
169 | // CHECK-NEXT: DeclRefExpr 0x{{[^ ]*}} <col:3> 'int' lvalue ParmVar 0x{{[^ ]*}} 'a' 'int' |
170 | // CHECK-NEXT: ImplicitCastExpr |
171 | // CHECK-NEXT: DeclRefExpr 0x{{[^ ]*}} <col:7> 'int' lvalue ParmVar 0x{{[^ ]*}} 'b' 'int' |
172 | |
173 | a % b; |
174 | // CHECK: BinaryOperator 0x{{[^ ]*}} <line:[[@LINE-1]]:3, col:7> 'int' '%' |
175 | // CHECK-NEXT: ImplicitCastExpr |
176 | // CHECK-NEXT: DeclRefExpr 0x{{[^ ]*}} <col:3> 'int' lvalue ParmVar 0x{{[^ ]*}} 'a' 'int' |
177 | // CHECK-NEXT: ImplicitCastExpr |
178 | // CHECK-NEXT: DeclRefExpr 0x{{[^ ]*}} <col:7> 'int' lvalue ParmVar 0x{{[^ ]*}} 'b' 'int' |
179 | } |
180 | |
181 | void UnaryOperators(int a, int *b) { |
182 | // Cast operators |
183 | (float)a; |
184 | // CHECK: CStyleCastExpr 0x{{[^ ]*}} <line:[[@LINE-1]]:3, col:10> 'float' <IntegralToFloating> |
185 | // CHECK-NEXT: ImplicitCastExpr |
186 | // CHECK-NEXT: DeclRefExpr 0x{{[^ ]*}} <col:10> 'int' lvalue ParmVar 0x{{[^ ]*}} 'a' 'int' |
187 | |
188 | // ++, --, and ~ are covered elsewhere. |
189 | |
190 | -a; |
191 | // CHECK: UnaryOperator 0x{{[^ ]*}} <line:[[@LINE-1]]:3, col:4> 'int' prefix '-' |
192 | // CHECK-NEXT: ImplicitCastExpr |
193 | // CHECK-NEXT: DeclRefExpr 0x{{[^ ]*}} <col:4> 'int' lvalue ParmVar 0x{{[^ ]*}} 'a' 'int' |
194 | |
195 | +a; |
196 | // CHECK: UnaryOperator 0x{{[^ ]*}} <line:[[@LINE-1]]:3, col:4> 'int' prefix '+' cannot overflow |
197 | // CHECK-NEXT: ImplicitCastExpr |
198 | // CHECK-NEXT: DeclRefExpr 0x{{[^ ]*}} <col:4> 'int' lvalue ParmVar 0x{{[^ ]*}} 'a' 'int' |
199 | |
200 | &a; |
201 | // CHECK: UnaryOperator 0x{{[^ ]*}} <line:[[@LINE-1]]:3, col:4> 'int *' prefix '&' cannot overflow |
202 | // CHECK-NEXT: DeclRefExpr 0x{{[^ ]*}} <col:4> 'int' lvalue ParmVar 0x{{[^ ]*}} 'a' 'int' |
203 | |
204 | *b; |
205 | // CHECK: ImplicitCastExpr |
206 | // CHECK-NEXT: UnaryOperator 0x{{[^ ]*}} <col:3, col:4> 'int' lvalue prefix '*' cannot overflow |
207 | // CHECK-NEXT: ImplicitCastExpr |
208 | // CHECK-NEXT: DeclRefExpr 0x{{[^ ]*}} <col:4> 'int *' lvalue ParmVar 0x{{[^ ]*}} 'b' 'int *' |
209 | |
210 | !a; |
211 | // CHECK: UnaryOperator 0x{{[^ ]*}} <line:[[@LINE-1]]:3, col:4> 'int' prefix '!' cannot overflow |
212 | // CHECK-NEXT: ImplicitCastExpr |
213 | // CHECK-NEXT: DeclRefExpr 0x{{[^ ]*}} <col:4> 'int' lvalue ParmVar 0x{{[^ ]*}} 'a' 'int' |
214 | |
215 | sizeof a; |
216 | // CHECK: UnaryExprOrTypeTraitExpr 0x{{[^ ]*}} <line:[[@LINE-1]]:3, col:10> 'unsigned long' sizeof |
217 | // CHECK-NEXT: DeclRefExpr 0x{{[^ ]*}} <col:10> 'int' lvalue ParmVar 0x{{[^ ]*}} 'a' 'int' |
218 | |
219 | sizeof(int); |
220 | // CHECK: UnaryExprOrTypeTraitExpr 0x{{[^ ]*}} <line:[[@LINE-1]]:3, col:13> 'unsigned long' sizeof 'int' |
221 | |
222 | _Alignof(int); |
223 | // FIXME: Uses C++ spelling for alignof in C mode. |
224 | // CHECK: UnaryExprOrTypeTraitExpr 0x{{[^ ]*}} <line:[[@LINE-2]]:3, col:15> 'unsigned long' alignof 'int' |
225 | } |
226 | |
227 | struct S { |
228 | int a; |
229 | }; |
230 | |
231 | void PostfixOperators(int *a, struct S b, struct S *c) { |
232 | a[0]; |
233 | // CHECK: ImplicitCastExpr |
234 | // CHECK-NEXT: ArraySubscriptExpr 0x{{[^ ]*}} <col:3, col:6> 'int' lvalue |
235 | // CHECK-NEXT: ImplicitCastExpr |
236 | // CHECK-NEXT: DeclRefExpr 0x{{[^ ]*}} <col:3> 'int *' lvalue ParmVar 0x{{[^ ]*}} 'a' 'int *' |
237 | // CHECK-NEXT: IntegerLiteral 0x{{[^ ]*}} <col:5> 'int' 0 |
238 | |
239 | UnaryOperators(*a, a); |
240 | // CHECK: CallExpr 0x{{[^ ]*}} <line:[[@LINE-1]]:3, col:23> 'void' |
241 | // CHECK-NEXT: ImplicitCastExpr |
242 | // CHECK-NEXT: DeclRefExpr 0x{{[^ ]*}} <col:3> 'void (int, int *)' Function 0x{{[^ ]*}} 'UnaryOperators' 'void (int, int *)' |
243 | // CHECK-NEXT: ImplicitCastExpr |
244 | // CHECK-NEXT: UnaryOperator 0x{{[^ ]*}} <col:18, col:19> 'int' lvalue prefix '*' cannot overflow |
245 | // CHECK-NEXT: ImplicitCastExpr |
246 | // CHECK-NEXT: DeclRefExpr 0x{{[^ ]*}} <col:19> 'int *' lvalue ParmVar 0x{{[^ ]*}} 'a' 'int *' |
247 | // CHECK-NEXT: ImplicitCastExpr |
248 | // CHECK-NEXT: DeclRefExpr 0x{{[^ ]*}} <col:22> 'int *' lvalue ParmVar 0x{{[^ ]*}} 'a' 'int *' |
249 | |
250 | b.a; |
251 | // CHECK: ImplicitCastExpr |
252 | // CHECK-NEXT: MemberExpr 0x{{[^ ]*}} <col:3, col:5> 'int' lvalue .a 0x{{[^ ]*}} |
253 | // CHECK-NEXT: DeclRefExpr 0x{{[^ ]*}} <col:3> 'struct S':'struct S' lvalue ParmVar 0x{{[^ ]*}} 'b' 'struct S':'struct S' |
254 | |
255 | c->a; |
256 | // CHECK: ImplicitCastExpr |
257 | // CHECK-NEXT: MemberExpr 0x{{[^ ]*}} <col:3, col:6> 'int' lvalue ->a 0x{{[^ ]*}} |
258 | // CHECK: ImplicitCastExpr |
259 | // CHECK-NEXT: DeclRefExpr 0x{{[^ ]*}} <col:3> 'struct S *' lvalue ParmVar 0x{{[^ ]*}} 'c' 'struct S *' |
260 | |
261 | // Postfix ++ and -- are covered elsewhere. |
262 | |
263 | (int [4]){1, 2, 3, 4, }; |
264 | // CHECK: ImplicitCastExpr |
265 | // CHECK-NEXT: CompoundLiteralExpr 0x{{[^ ]*}} <col:3, col:25> 'int [4]' lvalue |
266 | // CHECK-NEXT: InitListExpr 0x{{[^ ]*}} <col:12, col:25> 'int [4]' |
267 | // CHECK-NEXT: IntegerLiteral 0x{{[^ ]*}} <col:13> 'int' 1 |
268 | // CHECK-NEXT: IntegerLiteral 0x{{[^ ]*}} <col:16> 'int' 2 |
269 | // CHECK-NEXT: IntegerLiteral 0x{{[^ ]*}} <col:19> 'int' 3 |
270 | // CHECK-NEXT: IntegerLiteral 0x{{[^ ]*}} <col:22> 'int' 4 |
271 | |
272 | (struct S){1}; |
273 | // CHECK: ImplicitCastExpr |
274 | // CHECK-NEXT: CompoundLiteralExpr 0x{{[^ ]*}} <col:3, col:15> 'struct S':'struct S' lvalue |
275 | // CHECK-NEXT: InitListExpr 0x{{[^ ]*}} <col:13, col:15> 'struct S':'struct S' |
276 | // CHECK-NEXT: IntegerLiteral 0x{{[^ ]*}} <col:14> 'int' 1 |
277 | } |
278 | |
279 | enum E { One }; |
280 | |
281 | void PrimaryExpressions(int a) { |
282 | a; |
283 | // CHECK: ImplicitCastExpr |
284 | // CHECK-NEXT: DeclRefExpr 0x{{[^ ]*}} <col:3> 'int' lvalue ParmVar 0x{{[^ ]*}} 'a' 'int' |
285 | |
286 | 'a'; |
287 | // CHECK: CharacterLiteral 0x{{[^ ]*}} <line:[[@LINE-1]]:3> 'int' 97 |
288 | |
289 | L'a'; |
290 | // CHECK: CharacterLiteral 0x{{[^ ]*}} <line:[[@LINE-1]]:3> 'int' 97 |
291 | |
292 | "a"; |
293 | // ImplicitCastExpr |
294 | // CHECK: StringLiteral 0x{{[^ ]*}} <col:3> 'char [2]' lvalue "a" |
295 | |
296 | L"a"; |
297 | // ImplicitCastExpr |
298 | // CHECK: StringLiteral 0x{{[^ ]*}} <col:3> 'int [2]' lvalue L"a" |
299 | |
300 | u8"a"; |
301 | // ImplicitCastExpr |
302 | // CHECK: StringLiteral 0x{{[^ ]*}} <col:3> 'char [2]' lvalue u8"a" |
303 | |
304 | U"a"; |
305 | // ImplicitCastExpr |
306 | // CHECK: StringLiteral 0x{{[^ ]*}} <col:3> 'unsigned int [2]' lvalue U"a" |
307 | |
308 | u"a"; |
309 | // ImplicitCastExpr |
310 | // CHECK: StringLiteral 0x{{[^ ]*}} <col:3> 'unsigned short [2]' lvalue u"a" |
311 | |
312 | 1; |
313 | // CHECK: IntegerLiteral 0x{{[^ ]*}} <line:[[@LINE-1]]:3> 'int' 1 |
314 | |
315 | 1u; |
316 | // CHECK: IntegerLiteral 0x{{[^ ]*}} <line:[[@LINE-1]]:3> 'unsigned int' 1 |
317 | |
318 | 1ll; |
319 | // CHECK: IntegerLiteral 0x{{[^ ]*}} <line:[[@LINE-1]]:3> 'long long' 1 |
320 | |
321 | 1.0; |
322 | // CHECK: FloatingLiteral 0x{{[^ ]*}} <line:[[@LINE-1]]:3> 'double' {{1\.[0]*e[\+]?[0]+}} |
323 | |
324 | 1.0f; |
325 | // CHECK: FloatingLiteral 0x{{[^ ]*}} <line:[[@LINE-1]]:3> 'float' {{1\.[0]*e[\+]?[0]+}} |
326 | |
327 | 1.0l; |
328 | // CHECK: FloatingLiteral 0x{{[^ ]*}} <line:[[@LINE-1]]:3> 'long double' {{1\.[0]*e[\+]?[0]+}} |
329 | |
330 | One; |
331 | // CHECK: DeclRefExpr 0x{{[^ ]*}} <line:[[@LINE-1]]:3> 'int' EnumConstant 0x{{[^ ]*}} 'One' 'int' |
332 | |
333 | (a); |
334 | // CHECK: ImplicitCastExpr |
335 | // CHECK-NEXT: ParenExpr 0x{{[^ ]*}} <col:3, col:5> 'int' lvalue |
336 | // CHECK: DeclRefExpr 0x{{[^ ]*}} <col:4> 'int' lvalue ParmVar 0x{{[^ ]*}} 'a' 'int' |
337 | |
338 | // Generic selection expressions are covered elsewhere. |
339 | } |
340 | |