1 // RUN: %clang_cc1 -triple x86_64-linux-gnu -fsyntax-only -ast-dump=json %s | FileCheck %s
8 void func(const int &);
14 void MaterializeTemp() {
21 // NOTE: CHECK lines have been autogenerated by gen_ast_dump_json_test.py
22 // using --filters=ExprWithCleanups
24 // CHECK-NOT: {{^}}Dumping
25 // CHECK: "kind": "ExprWithCleanups",
26 // CHECK-NEXT: "range": {
27 // CHECK-NEXT: "begin": {
28 // CHECK-NEXT: "offset": {{[0-9]+}},
29 // CHECK-NEXT: "col": 16,
30 // CHECK-NEXT: "tokLen": 1
32 // CHECK-NEXT: "end": {
33 // CHECK-NEXT: "offset": {{[0-9]+}},
34 // CHECK-NEXT: "col": 18,
35 // CHECK-NEXT: "tokLen": 1
38 // CHECK-NEXT: "type": {
39 // CHECK-NEXT: "qualType": "const S"
41 // CHECK-NEXT: "valueCategory": "lvalue",
42 // CHECK-NEXT: "cleanupsHaveSideEffects": true,
43 // CHECK-NEXT: "inner": [
45 // CHECK-NEXT: "id": "0x{{.*}}",
46 // CHECK-NEXT: "kind": "MaterializeTemporaryExpr",
47 // CHECK-NEXT: "range": {
48 // CHECK-NEXT: "begin": {
49 // CHECK-NEXT: "offset": {{[0-9]+}},
50 // CHECK-NEXT: "col": 16,
51 // CHECK-NEXT: "tokLen": 1
53 // CHECK-NEXT: "end": {
54 // CHECK-NEXT: "offset": {{[0-9]+}},
55 // CHECK-NEXT: "col": 18,
56 // CHECK-NEXT: "tokLen": 1
59 // CHECK-NEXT: "type": {
60 // CHECK-NEXT: "qualType": "const S"
62 // CHECK-NEXT: "valueCategory": "lvalue",
63 // CHECK-NEXT: "extendingDecl": {
64 // CHECK-NEXT: "id": "0x{{.*}}",
65 // CHECK-NEXT: "kind": "VarDecl",
66 // CHECK-NEXT: "name": "s",
67 // CHECK-NEXT: "type": {
68 // CHECK-NEXT: "qualType": "const S &"
71 // CHECK-NEXT: "storageDuration": "automatic",
72 // CHECK-NEXT: "boundToLValueRef": true,
73 // CHECK-NEXT: "inner": [
75 // CHECK-NEXT: "id": "0x{{.*}}",
76 // CHECK-NEXT: "kind": "ImplicitCastExpr",
77 // CHECK-NEXT: "range": {
78 // CHECK-NEXT: "begin": {
79 // CHECK-NEXT: "offset": {{[0-9]+}},
80 // CHECK-NEXT: "col": 16,
81 // CHECK-NEXT: "tokLen": 1
83 // CHECK-NEXT: "end": {
84 // CHECK-NEXT: "offset": {{[0-9]+}},
85 // CHECK-NEXT: "col": 18,
86 // CHECK-NEXT: "tokLen": 1
89 // CHECK-NEXT: "type": {
90 // CHECK-NEXT: "qualType": "const S"
92 // CHECK-NEXT: "valueCategory": "prvalue",
93 // CHECK-NEXT: "castKind": "NoOp",
94 // CHECK-NEXT: "inner": [
96 // CHECK-NEXT: "id": "0x{{.*}}",
97 // CHECK-NEXT: "kind": "CXXBindTemporaryExpr",
98 // CHECK-NEXT: "range": {
99 // CHECK-NEXT: "begin": {
100 // CHECK-NEXT: "offset": {{[0-9]+}},
101 // CHECK-NEXT: "col": 16,
102 // CHECK-NEXT: "tokLen": 1
104 // CHECK-NEXT: "end": {
105 // CHECK-NEXT: "offset": {{[0-9]+}},
106 // CHECK-NEXT: "col": 18,
107 // CHECK-NEXT: "tokLen": 1
110 // CHECK-NEXT: "type": {
111 // CHECK-NEXT: "qualType": "S"
113 // CHECK-NEXT: "valueCategory": "prvalue",
114 // CHECK-NEXT: "temp": "0x{{.*}}",
115 // CHECK-NEXT: "dtor": {
116 // CHECK-NEXT: "id": "0x{{.*}}",
117 // CHECK-NEXT: "kind": "CXXDestructorDecl",
118 // CHECK-NEXT: "name": "~S",
119 // CHECK-NEXT: "type": {
120 // CHECK-NEXT: "qualType": "void () noexcept"
123 // CHECK-NEXT: "inner": [
125 // CHECK-NEXT: "id": "0x{{.*}}",
126 // CHECK-NEXT: "kind": "CXXTemporaryObjectExpr",
127 // CHECK-NEXT: "range": {
128 // CHECK-NEXT: "begin": {
129 // CHECK-NEXT: "offset": {{[0-9]+}},
130 // CHECK-NEXT: "col": 16,
131 // CHECK-NEXT: "tokLen": 1
133 // CHECK-NEXT: "end": {
134 // CHECK-NEXT: "offset": {{[0-9]+}},
135 // CHECK-NEXT: "col": 18,
136 // CHECK-NEXT: "tokLen": 1
139 // CHECK-NEXT: "type": {
140 // CHECK-NEXT: "qualType": "S"
142 // CHECK-NEXT: "valueCategory": "prvalue",
143 // CHECK-NEXT: "ctorType": {
144 // CHECK-NEXT: "qualType": "void ()"
146 // CHECK-NEXT: "hadMultipleCandidates": true,
147 // CHECK-NEXT: "constructionKind": "complete"
158 // CHECK-NOT: {{^}}Dumping
159 // CHECK: "kind": "ExprWithCleanups",
160 // CHECK-NEXT: "range": {
161 // CHECK-NEXT: "begin": {
162 // CHECK-NEXT: "offset": {{[0-9]+}},
163 // CHECK-NEXT: "col": 18,
164 // CHECK-NEXT: "tokLen": 3
166 // CHECK-NEXT: "end": {
167 // CHECK-NEXT: "offset": {{[0-9]+}},
168 // CHECK-NEXT: "col": 18,
169 // CHECK-NEXT: "tokLen": 3
172 // CHECK-NEXT: "type": {
173 // CHECK-NEXT: "qualType": "const int"
175 // CHECK-NEXT: "valueCategory": "lvalue",
176 // CHECK-NEXT: "inner": [
178 // CHECK-NEXT: "id": "0x{{.*}}",
179 // CHECK-NEXT: "kind": "MaterializeTemporaryExpr",
180 // CHECK-NEXT: "range": {
181 // CHECK-NEXT: "begin": {
182 // CHECK-NEXT: "offset": {{[0-9]+}},
183 // CHECK-NEXT: "col": 18,
184 // CHECK-NEXT: "tokLen": 3
186 // CHECK-NEXT: "end": {
187 // CHECK-NEXT: "offset": {{[0-9]+}},
188 // CHECK-NEXT: "col": 18,
189 // CHECK-NEXT: "tokLen": 3
192 // CHECK-NEXT: "type": {
193 // CHECK-NEXT: "qualType": "const int"
195 // CHECK-NEXT: "valueCategory": "lvalue",
196 // CHECK-NEXT: "extendingDecl": {
197 // CHECK-NEXT: "id": "0x{{.*}}",
198 // CHECK-NEXT: "kind": "VarDecl",
199 // CHECK-NEXT: "name": "i",
200 // CHECK-NEXT: "type": {
201 // CHECK-NEXT: "qualType": "const int &"
204 // CHECK-NEXT: "storageDuration": "automatic",
205 // CHECK-NEXT: "boundToLValueRef": true,
206 // CHECK-NEXT: "inner": [
208 // CHECK-NEXT: "id": "0x{{.*}}",
209 // CHECK-NEXT: "kind": "ImplicitCastExpr",
210 // CHECK-NEXT: "range": {
211 // CHECK-NEXT: "begin": {
212 // CHECK-NEXT: "offset": {{[0-9]+}},
213 // CHECK-NEXT: "col": 18,
214 // CHECK-NEXT: "tokLen": 3
216 // CHECK-NEXT: "end": {
217 // CHECK-NEXT: "offset": {{[0-9]+}},
218 // CHECK-NEXT: "col": 18,
219 // CHECK-NEXT: "tokLen": 3
222 // CHECK-NEXT: "type": {
223 // CHECK-NEXT: "qualType": "const int"
225 // CHECK-NEXT: "valueCategory": "prvalue",
226 // CHECK-NEXT: "castKind": "FloatingToIntegral",
227 // CHECK-NEXT: "inner": [
229 // CHECK-NEXT: "id": "0x{{.*}}",
230 // CHECK-NEXT: "kind": "FloatingLiteral",
231 // CHECK-NEXT: "range": {
232 // CHECK-NEXT: "begin": {
233 // CHECK-NEXT: "offset": {{[0-9]+}},
234 // CHECK-NEXT: "col": 18,
235 // CHECK-NEXT: "tokLen": 3
237 // CHECK-NEXT: "end": {
238 // CHECK-NEXT: "offset": {{[0-9]+}},
239 // CHECK-NEXT: "col": 18,
240 // CHECK-NEXT: "tokLen": 3
243 // CHECK-NEXT: "type": {
244 // CHECK-NEXT: "qualType": "double"
246 // CHECK-NEXT: "valueCategory": "prvalue",
247 // CHECK-NEXT: "value": "1"
256 // CHECK-NOT: {{^}}Dumping
257 // CHECK: "kind": "ExprWithCleanups",
258 // CHECK-NEXT: "range": {
259 // CHECK-NEXT: "begin": {
260 // CHECK-NEXT: "offset": {{[0-9]+}},
261 // CHECK-NEXT: "line": 18,
262 // CHECK-NEXT: "col": 3,
263 // CHECK-NEXT: "tokLen": 4
265 // CHECK-NEXT: "end": {
266 // CHECK-NEXT: "offset": {{[0-9]+}},
267 // CHECK-NEXT: "col": 9,
268 // CHECK-NEXT: "tokLen": 1
271 // CHECK-NEXT: "type": {
272 // CHECK-NEXT: "qualType": "void"
274 // CHECK-NEXT: "valueCategory": "prvalue",
275 // CHECK-NEXT: "inner": [
277 // CHECK-NEXT: "id": "0x{{.*}}",
278 // CHECK-NEXT: "kind": "CallExpr",
279 // CHECK-NEXT: "range": {
280 // CHECK-NEXT: "begin": {
281 // CHECK-NEXT: "offset": {{[0-9]+}},
282 // CHECK-NEXT: "col": 3,
283 // CHECK-NEXT: "tokLen": 4
285 // CHECK-NEXT: "end": {
286 // CHECK-NEXT: "offset": {{[0-9]+}},
287 // CHECK-NEXT: "col": 9,
288 // CHECK-NEXT: "tokLen": 1
291 // CHECK-NEXT: "type": {
292 // CHECK-NEXT: "qualType": "void"
294 // CHECK-NEXT: "valueCategory": "prvalue",
295 // CHECK-NEXT: "inner": [
297 // CHECK-NEXT: "id": "0x{{.*}}",
298 // CHECK-NEXT: "kind": "ImplicitCastExpr",
299 // CHECK-NEXT: "range": {
300 // CHECK-NEXT: "begin": {
301 // CHECK-NEXT: "offset": {{[0-9]+}},
302 // CHECK-NEXT: "col": 3,
303 // CHECK-NEXT: "tokLen": 4
305 // CHECK-NEXT: "end": {
306 // CHECK-NEXT: "offset": {{[0-9]+}},
307 // CHECK-NEXT: "col": 3,
308 // CHECK-NEXT: "tokLen": 4
311 // CHECK-NEXT: "type": {
312 // CHECK-NEXT: "qualType": "void (*)(const int &)"
314 // CHECK-NEXT: "valueCategory": "prvalue",
315 // CHECK-NEXT: "castKind": "FunctionToPointerDecay",
316 // CHECK-NEXT: "inner": [
318 // CHECK-NEXT: "id": "0x{{.*}}",
319 // CHECK-NEXT: "kind": "DeclRefExpr",
320 // CHECK-NEXT: "range": {
321 // CHECK-NEXT: "begin": {
322 // CHECK-NEXT: "offset": {{[0-9]+}},
323 // CHECK-NEXT: "col": 3,
324 // CHECK-NEXT: "tokLen": 4
326 // CHECK-NEXT: "end": {
327 // CHECK-NEXT: "offset": {{[0-9]+}},
328 // CHECK-NEXT: "col": 3,
329 // CHECK-NEXT: "tokLen": 4
332 // CHECK-NEXT: "type": {
333 // CHECK-NEXT: "qualType": "void (const int &)"
335 // CHECK-NEXT: "valueCategory": "lvalue",
336 // CHECK-NEXT: "referencedDecl": {
337 // CHECK-NEXT: "id": "0x{{.*}}",
338 // CHECK-NEXT: "kind": "FunctionDecl",
339 // CHECK-NEXT: "name": "func",
340 // CHECK-NEXT: "type": {
341 // CHECK-NEXT: "qualType": "void (const int &)"
348 // CHECK-NEXT: "id": "0x{{.*}}",
349 // CHECK-NEXT: "kind": "MaterializeTemporaryExpr",
350 // CHECK-NEXT: "range": {
351 // CHECK-NEXT: "begin": {
352 // CHECK-NEXT: "offset": {{[0-9]+}},
353 // CHECK-NEXT: "col": 8,
354 // CHECK-NEXT: "tokLen": 1
356 // CHECK-NEXT: "end": {
357 // CHECK-NEXT: "offset": {{[0-9]+}},
358 // CHECK-NEXT: "col": 8,
359 // CHECK-NEXT: "tokLen": 1
362 // CHECK-NEXT: "type": {
363 // CHECK-NEXT: "qualType": "const int"
365 // CHECK-NEXT: "valueCategory": "lvalue",
366 // CHECK-NEXT: "storageDuration": "full expression",
367 // CHECK-NEXT: "boundToLValueRef": true,
368 // CHECK-NEXT: "inner": [
370 // CHECK-NEXT: "id": "0x{{.*}}",
371 // CHECK-NEXT: "kind": "ImplicitCastExpr",
372 // CHECK-NEXT: "range": {
373 // CHECK-NEXT: "begin": {
374 // CHECK-NEXT: "offset": {{[0-9]+}},
375 // CHECK-NEXT: "col": 8,
376 // CHECK-NEXT: "tokLen": 1
378 // CHECK-NEXT: "end": {
379 // CHECK-NEXT: "offset": {{[0-9]+}},
380 // CHECK-NEXT: "col": 8,
381 // CHECK-NEXT: "tokLen": 1
384 // CHECK-NEXT: "type": {
385 // CHECK-NEXT: "qualType": "const int"
387 // CHECK-NEXT: "valueCategory": "prvalue",
388 // CHECK-NEXT: "castKind": "FloatingToIntegral",
389 // CHECK-NEXT: "inner": [
391 // CHECK-NEXT: "id": "0x{{.*}}",
392 // CHECK-NEXT: "kind": "ImplicitCastExpr",
393 // CHECK-NEXT: "range": {
394 // CHECK-NEXT: "begin": {
395 // CHECK-NEXT: "offset": {{[0-9]+}},
396 // CHECK-NEXT: "col": 8,
397 // CHECK-NEXT: "tokLen": 1
399 // CHECK-NEXT: "end": {
400 // CHECK-NEXT: "offset": {{[0-9]+}},
401 // CHECK-NEXT: "col": 8,
402 // CHECK-NEXT: "tokLen": 1
405 // CHECK-NEXT: "type": {
406 // CHECK-NEXT: "qualType": "float"
408 // CHECK-NEXT: "valueCategory": "prvalue",
409 // CHECK-NEXT: "castKind": "LValueToRValue",
410 // CHECK-NEXT: "inner": [
412 // CHECK-NEXT: "id": "0x{{.*}}",
413 // CHECK-NEXT: "kind": "DeclRefExpr",
414 // CHECK-NEXT: "range": {
415 // CHECK-NEXT: "begin": {
416 // CHECK-NEXT: "offset": {{[0-9]+}},
417 // CHECK-NEXT: "col": 8,
418 // CHECK-NEXT: "tokLen": 1
420 // CHECK-NEXT: "end": {
421 // CHECK-NEXT: "offset": {{[0-9]+}},
422 // CHECK-NEXT: "col": 8,
423 // CHECK-NEXT: "tokLen": 1
426 // CHECK-NEXT: "type": {
427 // CHECK-NEXT: "qualType": "float"
429 // CHECK-NEXT: "valueCategory": "lvalue",
430 // CHECK-NEXT: "referencedDecl": {
431 // CHECK-NEXT: "id": "0x{{.*}}",
432 // CHECK-NEXT: "kind": "VarDecl",
433 // CHECK-NEXT: "name": "f",
434 // CHECK-NEXT: "type": {
435 // CHECK-NEXT: "qualType": "float"