xref: /llvm-project/clang/test/AST/ast-dump-types-json.cpp (revision 1755617214e8a0412b0aa985af2677a56c83d843)
1 // RUN: %clang_cc1 -triple x86_64-unknown-unknown -fsyntax-only -ast-dump=json -ast-dump-filter Test %s | FileCheck %s
2 
3 namespace NS {
4 struct S {};
5 }
6 
7 struct T {
8   int I;
9   void F();
10 };
11 
12 typedef struct T TestElaboratedType1;
13 typedef NS::S TestElaboratedType2;
14 
15 #define CDECL __attribute__((cdecl))
16 typedef void (CDECL *TestMacroQualifiedType)();
17 
18 typedef void (T::* TestMemberFunctionPointerType)();
19 typedef int T::*TestMemberDataPointerType;
20 
21 typedef int TestQualTypePrinting(const char* c);
22 
23 typedef int TestUsingShadowDeclType;
24 namespace TestNamespaceWithUsingShadowType {
25 using ::TestUsingShadowDeclType;
26 }
27 
28 // NOTE: CHECK lines have been autogenerated by gen_ast_dump_json_test.py
29 
30 
31 // CHECK:  "kind": "TypedefDecl",
32 // CHECK-NEXT:  "loc": {
33 // CHECK-NEXT:   "file": "{{.*}}",
34 // CHECK-NEXT:   "line": 12,
35 // CHECK-NEXT:   "col": 18,
36 // CHECK-NEXT:   "tokLen": 19
37 // CHECK-NEXT:  },
38 // CHECK-NEXT:  "range": {
39 // CHECK-NEXT:   "begin": {
40 // CHECK-NEXT:    "col": 1,
41 // CHECK-NEXT:    "tokLen": 7
42 // CHECK-NEXT:   },
43 // CHECK-NEXT:   "end": {
44 // CHECK-NEXT:    "col": 18,
45 // CHECK-NEXT:    "tokLen": 19
46 // CHECK-NEXT:   }
47 // CHECK-NEXT:  },
48 // CHECK-NEXT:  "name": "TestElaboratedType1",
49 // CHECK-NEXT:  "type": {
50 // CHECK-NEXT:   "desugaredQualType": "T",
51 // CHECK-NEXT:   "qualType": "struct T"
52 // CHECK-NEXT:  },
53 // CHECK-NEXT:  "inner": [
54 // CHECK-NEXT:   {
55 // CHECK-NEXT:    "id": "0x{{.*}}",
56 // CHECK-NEXT:    "kind": "ElaboratedType",
57 // CHECK-NEXT:    "type": {
58 // CHECK-NEXT:     "qualType": "struct T"
59 // CHECK-NEXT:    },
60 // CHECK-NEXT:    "inner": [
61 // CHECK-NEXT:     {
62 // CHECK-NEXT:      "id": "0x{{.*}}",
63 // CHECK-NEXT:      "kind": "RecordType",
64 // CHECK-NEXT:      "type": {
65 // CHECK-NEXT:       "qualType": "T"
66 // CHECK-NEXT:      },
67 // CHECK-NEXT:      "decl": {
68 // CHECK-NEXT:       "id": "0x{{.*}}",
69 // CHECK-NEXT:       "kind": "CXXRecordDecl",
70 // CHECK-NEXT:       "name": "T"
71 // CHECK-NEXT:      }
72 // CHECK-NEXT:     }
73 // CHECK-NEXT:    ]
74 // CHECK-NEXT:   }
75 // CHECK-NEXT:  ]
76 // CHECK-NEXT: }
77 
78 
79 // CHECK:  "kind": "TypedefDecl",
80 // CHECK-NEXT:  "loc": {
81 // CHECK-NEXT:   "file": "{{.*}}",
82 // CHECK-NEXT:   "line": 13,
83 // CHECK-NEXT:   "col": 15,
84 // CHECK-NEXT:   "tokLen": 19
85 // CHECK-NEXT:  },
86 // CHECK-NEXT:  "range": {
87 // CHECK-NEXT:   "begin": {
88 // CHECK-NEXT:    "col": 1,
89 // CHECK-NEXT:    "tokLen": 7
90 // CHECK-NEXT:   },
91 // CHECK-NEXT:   "end": {
92 // CHECK-NEXT:    "col": 15,
93 // CHECK-NEXT:    "tokLen": 19
94 // CHECK-NEXT:   }
95 // CHECK-NEXT:  },
96 // CHECK-NEXT:  "name": "TestElaboratedType2",
97 // CHECK-NEXT:  "type": {
98 // CHECK-NEXT:   "desugaredQualType": "NS::S",
99 // CHECK-NEXT:   "qualType": "NS::S"
100 // CHECK-NEXT:  },
101 // CHECK-NEXT:  "inner": [
102 // CHECK-NEXT:   {
103 // CHECK-NEXT:    "id": "0x{{.*}}",
104 // CHECK-NEXT:    "kind": "ElaboratedType",
105 // CHECK-NEXT:    "type": {
106 // CHECK-NEXT:     "qualType": "NS::S"
107 // CHECK-NEXT:    },
108 // CHECK-NEXT:    "qualifier": "NS::",
109 // CHECK-NEXT:    "inner": [
110 // CHECK-NEXT:     {
111 // CHECK-NEXT:      "id": "0x{{.*}}",
112 // CHECK-NEXT:      "kind": "RecordType",
113 // CHECK-NEXT:      "type": {
114 // CHECK-NEXT:       "qualType": "NS::S"
115 // CHECK-NEXT:      },
116 // CHECK-NEXT:      "decl": {
117 // CHECK-NEXT:       "id": "0x{{.*}}",
118 // CHECK-NEXT:       "kind": "CXXRecordDecl",
119 // CHECK-NEXT:       "name": "S"
120 // CHECK-NEXT:      }
121 // CHECK-NEXT:     }
122 // CHECK-NEXT:    ]
123 // CHECK-NEXT:   }
124 // CHECK-NEXT:  ]
125 // CHECK-NEXT: }
126 
127 
128 // CHECK:  "kind": "TypedefDecl",
129 // CHECK-NEXT:  "loc": {
130 // CHECK-NEXT:   "file": "{{.*}}",
131 // CHECK-NEXT:   "line": 16,
132 // CHECK-NEXT:   "col": 22,
133 // CHECK-NEXT:   "tokLen": 22
134 // CHECK-NEXT:  },
135 // CHECK-NEXT:  "range": {
136 // CHECK-NEXT:   "begin": {
137 // CHECK-NEXT:    "col": 1,
138 // CHECK-NEXT:    "tokLen": 7
139 // CHECK-NEXT:   },
140 // CHECK-NEXT:   "end": {
141 // CHECK-NEXT:    "col": 22,
142 // CHECK-NEXT:    "tokLen": 22
143 // CHECK-NEXT:   }
144 // CHECK-NEXT:  },
145 // CHECK-NEXT:  "name": "TestMacroQualifiedType",
146 // CHECK-NEXT:  "type": {
147 // CHECK-NEXT:   "qualType": "CDECL void (*)()"
148 // CHECK-NEXT:  },
149 // CHECK-NEXT:  "inner": [
150 // CHECK-NEXT:   {
151 // CHECK-NEXT:    "id": "0x{{.*}}",
152 // CHECK-NEXT:    "kind": "PointerType",
153 // CHECK-NEXT:    "type": {
154 // CHECK-NEXT:     "qualType": "CDECL void (*)()"
155 // CHECK-NEXT:    },
156 // CHECK-NEXT:    "inner": [
157 // CHECK-NEXT:     {
158 // CHECK-NEXT:      "id": "0x{{.*}}",
159 // CHECK-NEXT:      "kind": "MacroQualifiedType",
160 // CHECK-NEXT:      "type": {
161 // CHECK-NEXT:       "qualType": "CDECL void ()"
162 // CHECK-NEXT:      },
163 // CHECK-NEXT:      "macroName": "CDECL",
164 // CHECK-NEXT:      "inner": [
165 // CHECK-NEXT:       {
166 // CHECK-NEXT:        "id": "0x{{.*}}",
167 // CHECK-NEXT:        "kind": "AttributedType",
168 // CHECK-NEXT:        "type": {
169 // CHECK-NEXT:         "qualType": "void () __attribute__((cdecl))"
170 // CHECK-NEXT:        },
171 // CHECK-NEXT:        "inner": [
172 // CHECK-NEXT:         {
173 // CHECK-NEXT:          "id": "0x{{.*}}",
174 // CHECK-NEXT:          "kind": "ParenType",
175 // CHECK-NEXT:          "type": {
176 // CHECK-NEXT:           "qualType": "void ()"
177 // CHECK-NEXT:          },
178 // CHECK-NEXT:          "inner": [
179 // CHECK-NEXT:           {
180 // CHECK-NEXT:            "id": "0x{{.*}}",
181 // CHECK-NEXT:            "kind": "FunctionProtoType",
182 // CHECK-NEXT:            "type": {
183 // CHECK-NEXT:             "qualType": "void ()"
184 // CHECK-NEXT:            },
185 // CHECK-NEXT:            "cc": "cdecl",
186 // CHECK-NEXT:            "inner": [
187 // CHECK-NEXT:             {
188 // CHECK-NEXT:              "id": "0x{{.*}}",
189 // CHECK-NEXT:              "kind": "BuiltinType",
190 // CHECK-NEXT:              "type": {
191 // CHECK-NEXT:               "qualType": "void"
192 // CHECK-NEXT:              }
193 // CHECK-NEXT:             }
194 // CHECK-NEXT:            ]
195 // CHECK-NEXT:           }
196 // CHECK-NEXT:          ]
197 // CHECK-NEXT:         },
198 // CHECK-NEXT:         {
199 // CHECK-NEXT:          "id": "0x{{.*}}",
200 // CHECK-NEXT:          "kind": "ParenType",
201 // CHECK-NEXT:          "type": {
202 // CHECK-NEXT:           "qualType": "void ()"
203 // CHECK-NEXT:          },
204 // CHECK-NEXT:          "inner": [
205 // CHECK-NEXT:           {
206 // CHECK-NEXT:            "id": "0x{{.*}}",
207 // CHECK-NEXT:            "kind": "FunctionProtoType",
208 // CHECK-NEXT:            "type": {
209 // CHECK-NEXT:             "qualType": "void ()"
210 // CHECK-NEXT:            },
211 // CHECK-NEXT:            "cc": "cdecl",
212 // CHECK-NEXT:            "inner": [
213 // CHECK-NEXT:             {
214 // CHECK-NEXT:              "id": "0x{{.*}}",
215 // CHECK-NEXT:              "kind": "BuiltinType",
216 // CHECK-NEXT:              "type": {
217 // CHECK-NEXT:               "qualType": "void"
218 // CHECK-NEXT:              }
219 // CHECK-NEXT:             }
220 // CHECK-NEXT:            ]
221 // CHECK-NEXT:           }
222 // CHECK-NEXT:          ]
223 // CHECK-NEXT:         }
224 // CHECK-NEXT:        ]
225 // CHECK-NEXT:       }
226 // CHECK-NEXT:      ]
227 // CHECK-NEXT:     }
228 // CHECK-NEXT:    ]
229 // CHECK-NEXT:   }
230 // CHECK-NEXT:  ]
231 // CHECK-NEXT: }
232 
233 
234 // CHECK:  "kind": "TypedefDecl",
235 // CHECK-NEXT:  "loc": {
236 // CHECK-NEXT:   "file": "{{.*}}",
237 // CHECK-NEXT:   "line": 18,
238 // CHECK-NEXT:   "col": 20,
239 // CHECK-NEXT:   "tokLen": 29
240 // CHECK-NEXT:  },
241 // CHECK-NEXT:  "range": {
242 // CHECK-NEXT:   "begin": {
243 // CHECK-NEXT:    "col": 1,
244 // CHECK-NEXT:    "tokLen": 7
245 // CHECK-NEXT:   },
246 // CHECK-NEXT:   "end": {
247 // CHECK-NEXT:    "col": 51,
248 // CHECK-NEXT:    "tokLen": 1
249 // CHECK-NEXT:   }
250 // CHECK-NEXT:  },
251 // CHECK-NEXT:  "name": "TestMemberFunctionPointerType",
252 // CHECK-NEXT:  "type": {
253 // CHECK-NEXT:   "qualType": "void (T::*)()"
254 // CHECK-NEXT:  },
255 // CHECK-NEXT:  "inner": [
256 // CHECK-NEXT:   {
257 // CHECK-NEXT:    "id": "0x{{.*}}",
258 // CHECK-NEXT:    "kind": "MemberPointerType",
259 // CHECK-NEXT:    "type": {
260 // CHECK-NEXT:     "qualType": "void (T::*)()"
261 // CHECK-NEXT:    },
262 // CHECK-NEXT:    "isFunction": true,
263 // CHECK-NEXT:    "inner": [
264 // CHECK-NEXT:     {
265 // CHECK-NEXT:      "id": "0x{{.*}}",
266 // CHECK-NEXT:      "kind": "RecordType",
267 // CHECK-NEXT:      "type": {
268 // CHECK-NEXT:       "qualType": "T"
269 // CHECK-NEXT:      },
270 // CHECK-NEXT:      "decl": {
271 // CHECK-NEXT:       "id": "0x{{.*}}",
272 // CHECK-NEXT:       "kind": "CXXRecordDecl",
273 // CHECK-NEXT:       "name": "T"
274 // CHECK-NEXT:      }
275 // CHECK-NEXT:     },
276 // CHECK-NEXT:     {
277 // CHECK-NEXT:      "id": "0x{{.*}}",
278 // CHECK-NEXT:      "kind": "ParenType",
279 // CHECK-NEXT:      "type": {
280 // CHECK-NEXT:       "qualType": "void ()"
281 // CHECK-NEXT:      },
282 // CHECK-NEXT:      "inner": [
283 // CHECK-NEXT:       {
284 // CHECK-NEXT:        "id": "0x{{.*}}",
285 // CHECK-NEXT:        "kind": "FunctionProtoType",
286 // CHECK-NEXT:        "type": {
287 // CHECK-NEXT:         "qualType": "void ()"
288 // CHECK-NEXT:        },
289 // CHECK-NEXT:        "cc": "cdecl",
290 // CHECK-NEXT:        "inner": [
291 // CHECK-NEXT:         {
292 // CHECK-NEXT:          "id": "0x{{.*}}",
293 // CHECK-NEXT:          "kind": "BuiltinType",
294 // CHECK-NEXT:          "type": {
295 // CHECK-NEXT:           "qualType": "void"
296 // CHECK-NEXT:          }
297 // CHECK-NEXT:         }
298 // CHECK-NEXT:        ]
299 // CHECK-NEXT:       }
300 // CHECK-NEXT:      ]
301 // CHECK-NEXT:     }
302 // CHECK-NEXT:    ]
303 // CHECK-NEXT:   }
304 // CHECK-NEXT:  ]
305 // CHECK-NEXT: }
306 
307 
308 // CHECK:  "kind": "TypedefDecl",
309 // CHECK-NEXT:  "loc": {
310 // CHECK-NEXT:   "file": "{{.*}}",
311 // CHECK-NEXT:   "line": 19,
312 // CHECK-NEXT:   "col": 17,
313 // CHECK-NEXT:   "tokLen": 25
314 // CHECK-NEXT:  },
315 // CHECK-NEXT:  "range": {
316 // CHECK-NEXT:   "begin": {
317 // CHECK-NEXT:    "col": 1,
318 // CHECK-NEXT:    "tokLen": 7
319 // CHECK-NEXT:   },
320 // CHECK-NEXT:   "end": {
321 // CHECK-NEXT:    "col": 17,
322 // CHECK-NEXT:    "tokLen": 25
323 // CHECK-NEXT:   }
324 // CHECK-NEXT:  },
325 // CHECK-NEXT:  "name": "TestMemberDataPointerType",
326 // CHECK-NEXT:  "type": {
327 // CHECK-NEXT:   "qualType": "int T::*"
328 // CHECK-NEXT:  },
329 // CHECK-NEXT:  "inner": [
330 // CHECK-NEXT:   {
331 // CHECK-NEXT:    "id": "0x{{.*}}",
332 // CHECK-NEXT:    "kind": "MemberPointerType",
333 // CHECK-NEXT:    "type": {
334 // CHECK-NEXT:     "qualType": "int T::*"
335 // CHECK-NEXT:    },
336 // CHECK-NEXT:    "isData": true,
337 // CHECK-NEXT:    "inner": [
338 // CHECK-NEXT:     {
339 // CHECK-NEXT:      "id": "0x{{.*}}",
340 // CHECK-NEXT:      "kind": "RecordType",
341 // CHECK-NEXT:      "type": {
342 // CHECK-NEXT:       "qualType": "T"
343 // CHECK-NEXT:      },
344 // CHECK-NEXT:      "decl": {
345 // CHECK-NEXT:       "id": "0x{{.*}}",
346 // CHECK-NEXT:       "kind": "CXXRecordDecl",
347 // CHECK-NEXT:       "name": "T"
348 // CHECK-NEXT:      }
349 // CHECK-NEXT:     },
350 // CHECK-NEXT:     {
351 // CHECK-NEXT:      "id": "0x{{.*}}",
352 // CHECK-NEXT:      "kind": "BuiltinType",
353 // CHECK-NEXT:      "type": {
354 // CHECK-NEXT:       "qualType": "int"
355 // CHECK-NEXT:      }
356 // CHECK-NEXT:     }
357 // CHECK-NEXT:    ]
358 // CHECK-NEXT:   }
359 // CHECK-NEXT:  ]
360 // CHECK-NEXT: }
361 
362 
363 // CHECK:  "kind": "TypedefDecl",
364 // CHECK-NEXT:  "loc": {
365 // CHECK-NEXT:   "file": "{{.*}}",
366 // CHECK-NEXT:   "line": 21,
367 // CHECK-NEXT:   "col": 13,
368 // CHECK-NEXT:   "tokLen": 20
369 // CHECK-NEXT:  },
370 // CHECK-NEXT:  "range": {
371 // CHECK-NEXT:   "begin": {
372 // CHECK-NEXT:    "col": 1,
373 // CHECK-NEXT:    "tokLen": 7
374 // CHECK-NEXT:   },
375 // CHECK-NEXT:   "end": {
376 // CHECK-NEXT:    "col": 47,
377 // CHECK-NEXT:    "tokLen": 1
378 // CHECK-NEXT:   }
379 // CHECK-NEXT:  },
380 // CHECK-NEXT:  "name": "TestQualTypePrinting",
381 // CHECK-NEXT:  "type": {
382 // CHECK-NEXT:   "qualType": "int (const char *)"
383 // CHECK-NEXT:  },
384 // CHECK-NEXT:  "inner": [
385 // CHECK-NEXT:   {
386 // CHECK-NEXT:    "id": "0x{{.*}}",
387 // CHECK-NEXT:    "kind": "FunctionProtoType",
388 // CHECK-NEXT:    "type": {
389 // CHECK-NEXT:     "qualType": "int (const char *)"
390 // CHECK-NEXT:    },
391 // CHECK-NEXT:    "cc": "cdecl",
392 // CHECK-NEXT:    "inner": [
393 // CHECK-NEXT:     {
394 // CHECK-NEXT:      "id": "0x{{.*}}",
395 // CHECK-NEXT:      "kind": "BuiltinType",
396 // CHECK-NEXT:      "type": {
397 // CHECK-NEXT:       "qualType": "int"
398 // CHECK-NEXT:      }
399 // CHECK-NEXT:     },
400 // CHECK-NEXT:     {
401 // CHECK-NEXT:      "id": "0x{{.*}}",
402 // CHECK-NEXT:      "kind": "PointerType",
403 // CHECK-NEXT:      "type": {
404 // CHECK-NEXT:       "qualType": "const char *"
405 // CHECK-NEXT:      },
406 // CHECK-NEXT:      "inner": [
407 // CHECK-NEXT:       {
408 // CHECK-NEXT:        "id": "0x{{.*}}",
409 // CHECK-NEXT:        "kind": "QualType",
410 // CHECK-NEXT:        "type": {
411 // CHECK-NEXT:         "qualType": "const char"
412 // CHECK-NEXT:        },
413 // CHECK-NEXT:        "qualifiers": "const",
414 // CHECK-NEXT:        "inner": [
415 // CHECK-NEXT:         {
416 // CHECK-NEXT:          "id": "0x{{.*}}",
417 // CHECK-NEXT:          "kind": "BuiltinType",
418 // CHECK-NEXT:          "type": {
419 // CHECK-NEXT:           "qualType": "char"
420 // CHECK-NEXT:          }
421 // CHECK-NEXT:         }
422 // CHECK-NEXT:        ]
423 // CHECK-NEXT:       }
424 // CHECK-NEXT:      ]
425 // CHECK-NEXT:     }
426 // CHECK-NEXT:    ]
427 // CHECK-NEXT:   }
428 // CHECK-NEXT:  ]
429 // CHECK-NEXT: }
430 
431 // CHECK:  "kind": "NamespaceDecl",
432 // CHECK-NEXT:  "loc": {
433 // CHECK-NEXT:   "file": "{{.*}}",
434 // CHECK-NEXT:   "line": 24,
435 // CHECK-NEXT:   "col": 11,
436 // CHECK-NEXT:   "tokLen": 32
437 // CHECK-NEXT:  },
438 // CHECK-NEXT:  "range": {
439 // CHECK-NEXT:   "begin": {
440 // CHECK-NEXT:    "col": 1,
441 // CHECK-NEXT:    "tokLen": 9
442 // CHECK-NEXT:   },
443 // CHECK-NEXT:   "end": {
444 // CHECK-NEXT:    "line": 26,
445 // CHECK-NEXT:    "col": 1,
446 // CHECK-NEXT:    "tokLen": 1
447 // CHECK-NEXT:   }
448 // CHECK-NEXT:  },
449 // CHECK-NEXT:  "name": "TestNamespaceWithUsingShadowType",
450 // CHECK-NEXT:  "inner": [
451 // CHECK-NEXT:   {
452 // CHECK-NEXT:    "id": "0x{{.*}}",
453 // CHECK-NEXT:    "kind": "UsingDecl",
454 // CHECK-NEXT:    "loc": {
455 // CHECK-NEXT:     "line": 25,
456 // CHECK-NEXT:     "col": 9,
457 // CHECK-NEXT:     "tokLen": 23
458 // CHECK-NEXT:    },
459 // CHECK-NEXT:    "range": {
460 // CHECK-NEXT:     "begin": {
461 // CHECK-NEXT:      "col": 1,
462 // CHECK-NEXT:      "tokLen": 5
463 // CHECK-NEXT:     },
464 // CHECK-NEXT:     "end": {
465 // CHECK-NEXT:      "col": 9,
466 // CHECK-NEXT:      "tokLen": 23
467 // CHECK-NEXT:     }
468 // CHECK-NEXT:    },
469 // CHECK-NEXT:    "name": "::TestUsingShadowDeclType"
470 // CHECK-NEXT:   },
471 // CHECK-NEXT:   {
472 // CHECK-NEXT:    "id": "0x{{.*}}",
473 // CHECK-NEXT:    "kind": "UsingShadowDecl",
474 // CHECK-NEXT:    "loc": {
475 // CHECK-NEXT:     "col": 9,
476 // CHECK-NEXT:     "tokLen": 23
477 // CHECK-NEXT:    },
478 // CHECK-NEXT:    "range": {
479 // CHECK-NEXT:     "begin": {
480 // CHECK-NEXT:      "col": 9,
481 // CHECK-NEXT:      "tokLen": 23
482 // CHECK-NEXT:     },
483 // CHECK-NEXT:     "end": {
484 // CHECK-NEXT:      "col": 9,
485 // CHECK-NEXT:      "tokLen": 23
486 // CHECK-NEXT:     }
487 // CHECK-NEXT:    },
488 // CHECK-NEXT:    "isImplicit": true,
489 // CHECK-NEXT:    "target": {
490 // CHECK-NEXT:     "id": "0x{{.*}}",
491 // CHECK-NEXT:     "kind": "TypedefDecl",
492 // CHECK-NEXT:     "name": "TestUsingShadowDeclType"
493 // CHECK-NEXT:    },
494 // CHECK-NEXT:    "inner": [
495 // CHECK-NEXT:     {
496 // CHECK-NEXT:      "id": "0x0"
497 // CHECK-NEXT:     }
498 // CHECK-NEXT:    ]
499 // CHECK-NEXT:   }
500 // CHECK-NEXT:  ]
501 // CHECK-NEXT: }
502