xref: /llvm-project/clang/test/AST/ast-dump-funcs-json.cpp (revision a612e34c1473a74bc0c3a7fb1ec0cd3f550fb529)
1 // RUN: %clang_cc1 -triple x86_64-unknown-unknown -ast-dump=json -ast-dump-filter Test %s | FileCheck %s
2 
3 struct S {
4   void Test1();
5   void Test2() const;
6   void Test3() volatile;
7   void Test4() &;
8   void Test5() &&;
9   virtual void Test6(float, int = 12);
10   virtual void Test7() = 0;
11 };
12 
13 struct T : S { // T is not referenced, but S is
14   void Test6(float, int = 100) override;
15 };
16 
17 struct U {
18   void Test1();
19 };
20 void U::Test1() {} // parent
21 
22 void Test1();
23 void Test2(void);
24 void Test3(int a, int b);
25 void Test4(int a, int b = 12);
26 constexpr void Test5(void);
27 static void Test6(void);
28 extern void Test7(void);
29 inline void Test8(void);
30 void Test9(void) noexcept;
31 void Test10(void) noexcept(false);
32 void Test11(void) noexcept(1);
33 
34 template <typename T>
35 T Test12(T&);
36 
37 void Test13(int) {}
38 void Test14(int, ...) {}
39 
40 int main() {
41   Test1(); // Causes this to be marked 'used'
42 }
43 
44 // NOTE: CHECK lines have been autogenerated by gen_ast_dump_json_test.py
45 
46 
47 // CHECK:  "kind": "CXXMethodDecl",
48 // CHECK-NEXT:  "loc": {
49 // CHECK-NEXT:   "file": "{{.*}}",
50 // CHECK-NEXT:   "line": 4,
51 // CHECK-NEXT:   "col": 8,
52 // CHECK-NEXT:   "tokLen": 5
53 // CHECK-NEXT:  },
54 // CHECK-NEXT:  "range": {
55 // CHECK-NEXT:   "begin": {
56 // CHECK-NEXT:    "col": 3,
57 // CHECK-NEXT:    "tokLen": 4
58 // CHECK-NEXT:   },
59 // CHECK-NEXT:   "end": {
60 // CHECK-NEXT:    "col": 14,
61 // CHECK-NEXT:    "tokLen": 1
62 // CHECK-NEXT:   }
63 // CHECK-NEXT:  },
64 // CHECK-NEXT:  "name": "Test1",
65 // CHECK-NEXT:  "type": {
66 // CHECK-NEXT:   "qualType": "void ()"
67 // CHECK-NEXT:  }
68 // CHECK-NEXT: }
69 
70 
71 // CHECK:  "kind": "CXXMethodDecl",
72 // CHECK-NEXT:  "loc": {
73 // CHECK-NEXT:   "file": "{{.*}}",
74 // CHECK-NEXT:   "line": 5,
75 // CHECK-NEXT:   "col": 8,
76 // CHECK-NEXT:   "tokLen": 5
77 // CHECK-NEXT:  },
78 // CHECK-NEXT:  "range": {
79 // CHECK-NEXT:   "begin": {
80 // CHECK-NEXT:    "col": 3,
81 // CHECK-NEXT:    "tokLen": 4
82 // CHECK-NEXT:   },
83 // CHECK-NEXT:   "end": {
84 // CHECK-NEXT:    "col": 16,
85 // CHECK-NEXT:    "tokLen": 5
86 // CHECK-NEXT:   }
87 // CHECK-NEXT:  },
88 // CHECK-NEXT:  "name": "Test2",
89 // CHECK-NEXT:  "type": {
90 // CHECK-NEXT:   "qualType": "void () const"
91 // CHECK-NEXT:  }
92 // CHECK-NEXT: }
93 
94 
95 // CHECK:  "kind": "CXXMethodDecl",
96 // CHECK-NEXT:  "loc": {
97 // CHECK-NEXT:   "file": "{{.*}}",
98 // CHECK-NEXT:   "line": 6,
99 // CHECK-NEXT:   "col": 8,
100 // CHECK-NEXT:   "tokLen": 5
101 // CHECK-NEXT:  },
102 // CHECK-NEXT:  "range": {
103 // CHECK-NEXT:   "begin": {
104 // CHECK-NEXT:    "col": 3,
105 // CHECK-NEXT:    "tokLen": 4
106 // CHECK-NEXT:   },
107 // CHECK-NEXT:   "end": {
108 // CHECK-NEXT:    "col": 16,
109 // CHECK-NEXT:    "tokLen": 8
110 // CHECK-NEXT:   }
111 // CHECK-NEXT:  },
112 // CHECK-NEXT:  "name": "Test3",
113 // CHECK-NEXT:  "type": {
114 // CHECK-NEXT:   "qualType": "void () volatile"
115 // CHECK-NEXT:  }
116 // CHECK-NEXT: }
117 
118 
119 // CHECK:  "kind": "CXXMethodDecl",
120 // CHECK-NEXT:  "loc": {
121 // CHECK-NEXT:   "file": "{{.*}}",
122 // CHECK-NEXT:   "line": 7,
123 // CHECK-NEXT:   "col": 8,
124 // CHECK-NEXT:   "tokLen": 5
125 // CHECK-NEXT:  },
126 // CHECK-NEXT:  "range": {
127 // CHECK-NEXT:   "begin": {
128 // CHECK-NEXT:    "col": 3,
129 // CHECK-NEXT:    "tokLen": 4
130 // CHECK-NEXT:   },
131 // CHECK-NEXT:   "end": {
132 // CHECK-NEXT:    "col": 16,
133 // CHECK-NEXT:    "tokLen": 1
134 // CHECK-NEXT:   }
135 // CHECK-NEXT:  },
136 // CHECK-NEXT:  "name": "Test4",
137 // CHECK-NEXT:  "type": {
138 // CHECK-NEXT:   "qualType": "void () &"
139 // CHECK-NEXT:  }
140 // CHECK-NEXT: }
141 
142 
143 // CHECK:  "kind": "CXXMethodDecl",
144 // CHECK-NEXT:  "loc": {
145 // CHECK-NEXT:   "file": "{{.*}}",
146 // CHECK-NEXT:   "line": 8,
147 // CHECK-NEXT:   "col": 8,
148 // CHECK-NEXT:   "tokLen": 5
149 // CHECK-NEXT:  },
150 // CHECK-NEXT:  "range": {
151 // CHECK-NEXT:   "begin": {
152 // CHECK-NEXT:    "col": 3,
153 // CHECK-NEXT:    "tokLen": 4
154 // CHECK-NEXT:   },
155 // CHECK-NEXT:   "end": {
156 // CHECK-NEXT:    "col": 16,
157 // CHECK-NEXT:    "tokLen": 2
158 // CHECK-NEXT:   }
159 // CHECK-NEXT:  },
160 // CHECK-NEXT:  "name": "Test5",
161 // CHECK-NEXT:  "type": {
162 // CHECK-NEXT:   "qualType": "void () &&"
163 // CHECK-NEXT:  }
164 // CHECK-NEXT: }
165 
166 
167 // CHECK:  "kind": "CXXMethodDecl",
168 // CHECK-NEXT:  "loc": {
169 // CHECK-NEXT:   "file": "{{.*}}",
170 // CHECK-NEXT:   "line": 9,
171 // CHECK-NEXT:   "col": 16,
172 // CHECK-NEXT:   "tokLen": 5
173 // CHECK-NEXT:  },
174 // CHECK-NEXT:  "range": {
175 // CHECK-NEXT:   "begin": {
176 // CHECK-NEXT:    "col": 3,
177 // CHECK-NEXT:    "tokLen": 7
178 // CHECK-NEXT:   },
179 // CHECK-NEXT:   "end": {
180 // CHECK-NEXT:    "col": 37,
181 // CHECK-NEXT:    "tokLen": 1
182 // CHECK-NEXT:   }
183 // CHECK-NEXT:  },
184 // CHECK-NEXT:  "name": "Test6",
185 // CHECK-NEXT:  "type": {
186 // CHECK-NEXT:   "qualType": "void (float, int)"
187 // CHECK-NEXT:  },
188 // CHECK-NEXT:  "virtual": true,
189 // CHECK-NEXT:  "inner": [
190 // CHECK-NEXT:   {
191 // CHECK-NEXT:    "id": "0x{{.*}}",
192 // CHECK-NEXT:    "kind": "ParmVarDecl",
193 // CHECK-NEXT:    "loc": {
194 // CHECK-NEXT:     "col": 27,
195 // CHECK-NEXT:     "tokLen": 1
196 // CHECK-NEXT:    },
197 // CHECK-NEXT:    "range": {
198 // CHECK-NEXT:     "begin": {
199 // CHECK-NEXT:      "col": 22,
200 // CHECK-NEXT:      "tokLen": 5
201 // CHECK-NEXT:     },
202 // CHECK-NEXT:     "end": {
203 // CHECK-NEXT:      "col": 22,
204 // CHECK-NEXT:      "tokLen": 5
205 // CHECK-NEXT:     }
206 // CHECK-NEXT:    },
207 // CHECK-NEXT:    "type": {
208 // CHECK-NEXT:     "qualType": "float"
209 // CHECK-NEXT:    }
210 // CHECK-NEXT:   },
211 // CHECK-NEXT:   {
212 // CHECK-NEXT:    "id": "0x{{.*}}",
213 // CHECK-NEXT:    "kind": "ParmVarDecl",
214 // CHECK-NEXT:    "loc": {
215 // CHECK-NEXT:     "col": 33,
216 // CHECK-NEXT:     "tokLen": 1
217 // CHECK-NEXT:    },
218 // CHECK-NEXT:    "range": {
219 // CHECK-NEXT:     "begin": {
220 // CHECK-NEXT:      "col": 29,
221 // CHECK-NEXT:      "tokLen": 3
222 // CHECK-NEXT:     },
223 // CHECK-NEXT:     "end": {
224 // CHECK-NEXT:      "col": 35,
225 // CHECK-NEXT:      "tokLen": 2
226 // CHECK-NEXT:     }
227 // CHECK-NEXT:    },
228 // CHECK-NEXT:    "type": {
229 // CHECK-NEXT:     "qualType": "int"
230 // CHECK-NEXT:    },
231 // CHECK-NEXT:    "init": "c",
232 // CHECK-NEXT:    "inner": [
233 // CHECK-NEXT:     {
234 // CHECK-NEXT:      "id": "0x{{.*}}",
235 // CHECK-NEXT:      "kind": "IntegerLiteral",
236 // CHECK-NEXT:      "range": {
237 // CHECK-NEXT:       "begin": {
238 // CHECK-NEXT:        "col": 35,
239 // CHECK-NEXT:        "tokLen": 2
240 // CHECK-NEXT:       },
241 // CHECK-NEXT:       "end": {
242 // CHECK-NEXT:        "col": 35,
243 // CHECK-NEXT:        "tokLen": 2
244 // CHECK-NEXT:       }
245 // CHECK-NEXT:      },
246 // CHECK-NEXT:      "type": {
247 // CHECK-NEXT:       "qualType": "int"
248 // CHECK-NEXT:      },
249 // CHECK-NEXT:      "valueCategory": "rvalue",
250 // CHECK-NEXT:      "value": "12"
251 // CHECK-NEXT:     }
252 // CHECK-NEXT:    ]
253 // CHECK-NEXT:   }
254 // CHECK-NEXT:  ]
255 // CHECK-NEXT: }
256 
257 
258 // CHECK:  "kind": "CXXMethodDecl",
259 // CHECK-NEXT:  "loc": {
260 // CHECK-NEXT:   "file": "{{.*}}",
261 // CHECK-NEXT:   "line": 10,
262 // CHECK-NEXT:   "col": 16,
263 // CHECK-NEXT:   "tokLen": 5
264 // CHECK-NEXT:  },
265 // CHECK-NEXT:  "range": {
266 // CHECK-NEXT:   "begin": {
267 // CHECK-NEXT:    "col": 3,
268 // CHECK-NEXT:    "tokLen": 7
269 // CHECK-NEXT:   },
270 // CHECK-NEXT:   "end": {
271 // CHECK-NEXT:    "col": 26,
272 // CHECK-NEXT:    "tokLen": 1
273 // CHECK-NEXT:   }
274 // CHECK-NEXT:  },
275 // CHECK-NEXT:  "name": "Test7",
276 // CHECK-NEXT:  "type": {
277 // CHECK-NEXT:   "qualType": "void ()"
278 // CHECK-NEXT:  },
279 // CHECK-NEXT:  "virtual": true,
280 // CHECK-NEXT:  "pure": true
281 // CHECK-NEXT: }
282 
283 
284 // CHECK:  "kind": "CXXMethodDecl",
285 // CHECK-NEXT:  "loc": {
286 // CHECK-NEXT:   "file": "{{.*}}",
287 // CHECK-NEXT:   "line": 14,
288 // CHECK-NEXT:   "col": 8,
289 // CHECK-NEXT:   "tokLen": 5
290 // CHECK-NEXT:  },
291 // CHECK-NEXT:  "range": {
292 // CHECK-NEXT:   "begin": {
293 // CHECK-NEXT:    "col": 3,
294 // CHECK-NEXT:    "tokLen": 4
295 // CHECK-NEXT:   },
296 // CHECK-NEXT:   "end": {
297 // CHECK-NEXT:    "col": 32,
298 // CHECK-NEXT:    "tokLen": 8
299 // CHECK-NEXT:   }
300 // CHECK-NEXT:  },
301 // CHECK-NEXT:  "name": "Test6",
302 // CHECK-NEXT:  "type": {
303 // CHECK-NEXT:   "qualType": "void (float, int)"
304 // CHECK-NEXT:  },
305 // CHECK-NEXT:  "inner": [
306 // CHECK-NEXT:   {
307 // CHECK-NEXT:    "id": "0x{{.*}}",
308 // CHECK-NEXT:    "kind": "ParmVarDecl",
309 // CHECK-NEXT:    "loc": {
310 // CHECK-NEXT:     "col": 19,
311 // CHECK-NEXT:     "tokLen": 1
312 // CHECK-NEXT:    },
313 // CHECK-NEXT:    "range": {
314 // CHECK-NEXT:     "begin": {
315 // CHECK-NEXT:      "col": 14,
316 // CHECK-NEXT:      "tokLen": 5
317 // CHECK-NEXT:     },
318 // CHECK-NEXT:     "end": {
319 // CHECK-NEXT:      "col": 14,
320 // CHECK-NEXT:      "tokLen": 5
321 // CHECK-NEXT:     }
322 // CHECK-NEXT:    },
323 // CHECK-NEXT:    "type": {
324 // CHECK-NEXT:     "qualType": "float"
325 // CHECK-NEXT:    }
326 // CHECK-NEXT:   },
327 // CHECK-NEXT:   {
328 // CHECK-NEXT:    "id": "0x{{.*}}",
329 // CHECK-NEXT:    "kind": "ParmVarDecl",
330 // CHECK-NEXT:    "loc": {
331 // CHECK-NEXT:     "col": 25,
332 // CHECK-NEXT:     "tokLen": 1
333 // CHECK-NEXT:    },
334 // CHECK-NEXT:    "range": {
335 // CHECK-NEXT:     "begin": {
336 // CHECK-NEXT:      "col": 21,
337 // CHECK-NEXT:      "tokLen": 3
338 // CHECK-NEXT:     },
339 // CHECK-NEXT:     "end": {
340 // CHECK-NEXT:      "col": 27,
341 // CHECK-NEXT:      "tokLen": 3
342 // CHECK-NEXT:     }
343 // CHECK-NEXT:    },
344 // CHECK-NEXT:    "type": {
345 // CHECK-NEXT:     "qualType": "int"
346 // CHECK-NEXT:    },
347 // CHECK-NEXT:    "init": "c",
348 // CHECK-NEXT:    "inner": [
349 // CHECK-NEXT:     {
350 // CHECK-NEXT:      "id": "0x{{.*}}",
351 // CHECK-NEXT:      "kind": "IntegerLiteral",
352 // CHECK-NEXT:      "range": {
353 // CHECK-NEXT:       "begin": {
354 // CHECK-NEXT:        "col": 27,
355 // CHECK-NEXT:        "tokLen": 3
356 // CHECK-NEXT:       },
357 // CHECK-NEXT:       "end": {
358 // CHECK-NEXT:        "col": 27,
359 // CHECK-NEXT:        "tokLen": 3
360 // CHECK-NEXT:       }
361 // CHECK-NEXT:      },
362 // CHECK-NEXT:      "type": {
363 // CHECK-NEXT:       "qualType": "int"
364 // CHECK-NEXT:      },
365 // CHECK-NEXT:      "valueCategory": "rvalue",
366 // CHECK-NEXT:      "value": "100"
367 // CHECK-NEXT:     }
368 // CHECK-NEXT:    ]
369 // CHECK-NEXT:   },
370 // CHECK-NEXT:   {
371 // CHECK-NEXT:    "id": "0x{{.*}}",
372 // CHECK-NEXT:    "kind": "OverrideAttr",
373 // CHECK-NEXT:    "range": {
374 // CHECK-NEXT:     "begin": {
375 // CHECK-NEXT:      "col": 32,
376 // CHECK-NEXT:      "tokLen": 8
377 // CHECK-NEXT:     },
378 // CHECK-NEXT:     "end": {
379 // CHECK-NEXT:      "col": 32,
380 // CHECK-NEXT:      "tokLen": 8
381 // CHECK-NEXT:     }
382 // CHECK-NEXT:    }
383 // CHECK-NEXT:   }
384 // CHECK-NEXT:  ]
385 // CHECK-NEXT: }
386 
387 
388 // CHECK:  "kind": "CXXMethodDecl",
389 // CHECK-NEXT:  "loc": {
390 // CHECK-NEXT:   "file": "{{.*}}",
391 // CHECK-NEXT:   "line": 18,
392 // CHECK-NEXT:   "col": 8,
393 // CHECK-NEXT:   "tokLen": 5
394 // CHECK-NEXT:  },
395 // CHECK-NEXT:  "range": {
396 // CHECK-NEXT:   "begin": {
397 // CHECK-NEXT:    "col": 3,
398 // CHECK-NEXT:    "tokLen": 4
399 // CHECK-NEXT:   },
400 // CHECK-NEXT:   "end": {
401 // CHECK-NEXT:    "col": 14,
402 // CHECK-NEXT:    "tokLen": 1
403 // CHECK-NEXT:   }
404 // CHECK-NEXT:  },
405 // CHECK-NEXT:  "name": "Test1",
406 // CHECK-NEXT:  "type": {
407 // CHECK-NEXT:   "qualType": "void ()"
408 // CHECK-NEXT:  }
409 // CHECK-NEXT: }
410 
411 
412 // CHECK:  "kind": "CXXMethodDecl",
413 // CHECK-NEXT:  "loc": {
414 // CHECK-NEXT:   "file": "{{.*}}",
415 // CHECK-NEXT:   "line": 20,
416 // CHECK-NEXT:   "col": 9,
417 // CHECK-NEXT:   "tokLen": 5
418 // CHECK-NEXT:  },
419 // CHECK-NEXT:  "range": {
420 // CHECK-NEXT:   "begin": {
421 // CHECK-NEXT:    "col": 1,
422 // CHECK-NEXT:    "tokLen": 4
423 // CHECK-NEXT:   },
424 // CHECK-NEXT:   "end": {
425 // CHECK-NEXT:    "col": 18,
426 // CHECK-NEXT:    "tokLen": 1
427 // CHECK-NEXT:   }
428 // CHECK-NEXT:  },
429 // CHECK-NEXT:  "parentDeclContext": "0x{{.*}}",
430 // CHECK-NEXT:  "previousDecl": "0x{{.*}}",
431 // CHECK-NEXT:  "name": "Test1",
432 // CHECK-NEXT:  "type": {
433 // CHECK-NEXT:   "qualType": "void ()"
434 // CHECK-NEXT:  },
435 // CHECK-NEXT:  "inner": [
436 // CHECK-NEXT:   {
437 // CHECK-NEXT:    "id": "0x{{.*}}",
438 // CHECK-NEXT:    "kind": "CompoundStmt",
439 // CHECK-NEXT:    "range": {
440 // CHECK-NEXT:     "begin": {
441 // CHECK-NEXT:      "col": 17,
442 // CHECK-NEXT:      "tokLen": 1
443 // CHECK-NEXT:     },
444 // CHECK-NEXT:     "end": {
445 // CHECK-NEXT:      "col": 18,
446 // CHECK-NEXT:      "tokLen": 1
447 // CHECK-NEXT:     }
448 // CHECK-NEXT:    }
449 // CHECK-NEXT:   }
450 // CHECK-NEXT:  ]
451 // CHECK-NEXT: }
452 
453 
454 // CHECK:  "kind": "FunctionDecl",
455 // CHECK-NEXT:  "loc": {
456 // CHECK-NEXT:   "file": "{{.*}}",
457 // CHECK-NEXT:   "line": 22,
458 // CHECK-NEXT:   "col": 6,
459 // CHECK-NEXT:   "tokLen": 5
460 // CHECK-NEXT:  },
461 // CHECK-NEXT:  "range": {
462 // CHECK-NEXT:   "begin": {
463 // CHECK-NEXT:    "col": 1,
464 // CHECK-NEXT:    "tokLen": 4
465 // CHECK-NEXT:   },
466 // CHECK-NEXT:   "end": {
467 // CHECK-NEXT:    "col": 12,
468 // CHECK-NEXT:    "tokLen": 1
469 // CHECK-NEXT:   }
470 // CHECK-NEXT:  },
471 // CHECK-NEXT:  "isUsed": true,
472 // CHECK-NEXT:  "name": "Test1",
473 // CHECK-NEXT:  "type": {
474 // CHECK-NEXT:   "qualType": "void ()"
475 // CHECK-NEXT:  }
476 // CHECK-NEXT: }
477 
478 
479 // CHECK:  "kind": "FunctionDecl",
480 // CHECK-NEXT:  "loc": {
481 // CHECK-NEXT:   "file": "{{.*}}",
482 // CHECK-NEXT:   "line": 23,
483 // CHECK-NEXT:   "col": 6,
484 // CHECK-NEXT:   "tokLen": 5
485 // CHECK-NEXT:  },
486 // CHECK-NEXT:  "range": {
487 // CHECK-NEXT:   "begin": {
488 // CHECK-NEXT:    "col": 1,
489 // CHECK-NEXT:    "tokLen": 4
490 // CHECK-NEXT:   },
491 // CHECK-NEXT:   "end": {
492 // CHECK-NEXT:    "col": 16,
493 // CHECK-NEXT:    "tokLen": 1
494 // CHECK-NEXT:   }
495 // CHECK-NEXT:  },
496 // CHECK-NEXT:  "name": "Test2",
497 // CHECK-NEXT:  "type": {
498 // CHECK-NEXT:   "qualType": "void ()"
499 // CHECK-NEXT:  }
500 // CHECK-NEXT: }
501 
502 
503 // CHECK:  "kind": "FunctionDecl",
504 // CHECK-NEXT:  "loc": {
505 // CHECK-NEXT:   "file": "{{.*}}",
506 // CHECK-NEXT:   "line": 24,
507 // CHECK-NEXT:   "col": 6,
508 // CHECK-NEXT:   "tokLen": 5
509 // CHECK-NEXT:  },
510 // CHECK-NEXT:  "range": {
511 // CHECK-NEXT:   "begin": {
512 // CHECK-NEXT:    "col": 1,
513 // CHECK-NEXT:    "tokLen": 4
514 // CHECK-NEXT:   },
515 // CHECK-NEXT:   "end": {
516 // CHECK-NEXT:    "col": 24,
517 // CHECK-NEXT:    "tokLen": 1
518 // CHECK-NEXT:   }
519 // CHECK-NEXT:  },
520 // CHECK-NEXT:  "name": "Test3",
521 // CHECK-NEXT:  "type": {
522 // CHECK-NEXT:   "qualType": "void (int, int)"
523 // CHECK-NEXT:  },
524 // CHECK-NEXT:  "inner": [
525 // CHECK-NEXT:   {
526 // CHECK-NEXT:    "id": "0x{{.*}}",
527 // CHECK-NEXT:    "kind": "ParmVarDecl",
528 // CHECK-NEXT:    "loc": {
529 // CHECK-NEXT:     "col": 16,
530 // CHECK-NEXT:     "tokLen": 1
531 // CHECK-NEXT:    },
532 // CHECK-NEXT:    "range": {
533 // CHECK-NEXT:     "begin": {
534 // CHECK-NEXT:      "col": 12,
535 // CHECK-NEXT:      "tokLen": 3
536 // CHECK-NEXT:     },
537 // CHECK-NEXT:     "end": {
538 // CHECK-NEXT:      "col": 16,
539 // CHECK-NEXT:      "tokLen": 1
540 // CHECK-NEXT:     }
541 // CHECK-NEXT:    },
542 // CHECK-NEXT:    "name": "a",
543 // CHECK-NEXT:    "type": {
544 // CHECK-NEXT:     "qualType": "int"
545 // CHECK-NEXT:    }
546 // CHECK-NEXT:   },
547 // CHECK-NEXT:   {
548 // CHECK-NEXT:    "id": "0x{{.*}}",
549 // CHECK-NEXT:    "kind": "ParmVarDecl",
550 // CHECK-NEXT:    "loc": {
551 // CHECK-NEXT:     "col": 23,
552 // CHECK-NEXT:     "tokLen": 1
553 // CHECK-NEXT:    },
554 // CHECK-NEXT:    "range": {
555 // CHECK-NEXT:     "begin": {
556 // CHECK-NEXT:      "col": 19,
557 // CHECK-NEXT:      "tokLen": 3
558 // CHECK-NEXT:     },
559 // CHECK-NEXT:     "end": {
560 // CHECK-NEXT:      "col": 23,
561 // CHECK-NEXT:      "tokLen": 1
562 // CHECK-NEXT:     }
563 // CHECK-NEXT:    },
564 // CHECK-NEXT:    "name": "b",
565 // CHECK-NEXT:    "type": {
566 // CHECK-NEXT:     "qualType": "int"
567 // CHECK-NEXT:    }
568 // CHECK-NEXT:   }
569 // CHECK-NEXT:  ]
570 // CHECK-NEXT: }
571 
572 
573 // CHECK:  "kind": "FunctionDecl",
574 // CHECK-NEXT:  "loc": {
575 // CHECK-NEXT:   "file": "{{.*}}",
576 // CHECK-NEXT:   "line": 25,
577 // CHECK-NEXT:   "col": 6,
578 // CHECK-NEXT:   "tokLen": 5
579 // CHECK-NEXT:  },
580 // CHECK-NEXT:  "range": {
581 // CHECK-NEXT:   "begin": {
582 // CHECK-NEXT:    "col": 1,
583 // CHECK-NEXT:    "tokLen": 4
584 // CHECK-NEXT:   },
585 // CHECK-NEXT:   "end": {
586 // CHECK-NEXT:    "col": 29,
587 // CHECK-NEXT:    "tokLen": 1
588 // CHECK-NEXT:   }
589 // CHECK-NEXT:  },
590 // CHECK-NEXT:  "name": "Test4",
591 // CHECK-NEXT:  "type": {
592 // CHECK-NEXT:   "qualType": "void (int, int)"
593 // CHECK-NEXT:  },
594 // CHECK-NEXT:  "inner": [
595 // CHECK-NEXT:   {
596 // CHECK-NEXT:    "id": "0x{{.*}}",
597 // CHECK-NEXT:    "kind": "ParmVarDecl",
598 // CHECK-NEXT:    "loc": {
599 // CHECK-NEXT:     "col": 16,
600 // CHECK-NEXT:     "tokLen": 1
601 // CHECK-NEXT:    },
602 // CHECK-NEXT:    "range": {
603 // CHECK-NEXT:     "begin": {
604 // CHECK-NEXT:      "col": 12,
605 // CHECK-NEXT:      "tokLen": 3
606 // CHECK-NEXT:     },
607 // CHECK-NEXT:     "end": {
608 // CHECK-NEXT:      "col": 16,
609 // CHECK-NEXT:      "tokLen": 1
610 // CHECK-NEXT:     }
611 // CHECK-NEXT:    },
612 // CHECK-NEXT:    "name": "a",
613 // CHECK-NEXT:    "type": {
614 // CHECK-NEXT:     "qualType": "int"
615 // CHECK-NEXT:    }
616 // CHECK-NEXT:   },
617 // CHECK-NEXT:   {
618 // CHECK-NEXT:    "id": "0x{{.*}}",
619 // CHECK-NEXT:    "kind": "ParmVarDecl",
620 // CHECK-NEXT:    "loc": {
621 // CHECK-NEXT:     "col": 23,
622 // CHECK-NEXT:     "tokLen": 1
623 // CHECK-NEXT:    },
624 // CHECK-NEXT:    "range": {
625 // CHECK-NEXT:     "begin": {
626 // CHECK-NEXT:      "col": 19,
627 // CHECK-NEXT:      "tokLen": 3
628 // CHECK-NEXT:     },
629 // CHECK-NEXT:     "end": {
630 // CHECK-NEXT:      "col": 27,
631 // CHECK-NEXT:      "tokLen": 2
632 // CHECK-NEXT:     }
633 // CHECK-NEXT:    },
634 // CHECK-NEXT:    "name": "b",
635 // CHECK-NEXT:    "type": {
636 // CHECK-NEXT:     "qualType": "int"
637 // CHECK-NEXT:    },
638 // CHECK-NEXT:    "init": "c",
639 // CHECK-NEXT:    "inner": [
640 // CHECK-NEXT:     {
641 // CHECK-NEXT:      "id": "0x{{.*}}",
642 // CHECK-NEXT:      "kind": "IntegerLiteral",
643 // CHECK-NEXT:      "range": {
644 // CHECK-NEXT:       "begin": {
645 // CHECK-NEXT:        "col": 27,
646 // CHECK-NEXT:        "tokLen": 2
647 // CHECK-NEXT:       },
648 // CHECK-NEXT:       "end": {
649 // CHECK-NEXT:        "col": 27,
650 // CHECK-NEXT:        "tokLen": 2
651 // CHECK-NEXT:       }
652 // CHECK-NEXT:      },
653 // CHECK-NEXT:      "type": {
654 // CHECK-NEXT:       "qualType": "int"
655 // CHECK-NEXT:      },
656 // CHECK-NEXT:      "valueCategory": "rvalue",
657 // CHECK-NEXT:      "value": "12"
658 // CHECK-NEXT:     }
659 // CHECK-NEXT:    ]
660 // CHECK-NEXT:   }
661 // CHECK-NEXT:  ]
662 // CHECK-NEXT: }
663 
664 
665 // CHECK:  "kind": "FunctionDecl",
666 // CHECK-NEXT:  "loc": {
667 // CHECK-NEXT:   "file": "{{.*}}",
668 // CHECK-NEXT:   "line": 26,
669 // CHECK-NEXT:   "col": 16,
670 // CHECK-NEXT:   "tokLen": 5
671 // CHECK-NEXT:  },
672 // CHECK-NEXT:  "range": {
673 // CHECK-NEXT:   "begin": {
674 // CHECK-NEXT:    "col": 1,
675 // CHECK-NEXT:    "tokLen": 9
676 // CHECK-NEXT:   },
677 // CHECK-NEXT:   "end": {
678 // CHECK-NEXT:    "col": 26,
679 // CHECK-NEXT:    "tokLen": 1
680 // CHECK-NEXT:   }
681 // CHECK-NEXT:  },
682 // CHECK-NEXT:  "name": "Test5",
683 // CHECK-NEXT:  "type": {
684 // CHECK-NEXT:   "qualType": "void ()"
685 // CHECK-NEXT:  },
686 // CHECK-NEXT:  "constexpr": true
687 // CHECK-NEXT: }
688 
689 
690 // CHECK:  "kind": "FunctionDecl",
691 // CHECK-NEXT:  "loc": {
692 // CHECK-NEXT:   "file": "{{.*}}",
693 // CHECK-NEXT:   "line": 27,
694 // CHECK-NEXT:   "col": 13,
695 // CHECK-NEXT:   "tokLen": 5
696 // CHECK-NEXT:  },
697 // CHECK-NEXT:  "range": {
698 // CHECK-NEXT:   "begin": {
699 // CHECK-NEXT:    "col": 1,
700 // CHECK-NEXT:    "tokLen": 6
701 // CHECK-NEXT:   },
702 // CHECK-NEXT:   "end": {
703 // CHECK-NEXT:    "col": 23,
704 // CHECK-NEXT:    "tokLen": 1
705 // CHECK-NEXT:   }
706 // CHECK-NEXT:  },
707 // CHECK-NEXT:  "name": "Test6",
708 // CHECK-NEXT:  "type": {
709 // CHECK-NEXT:   "qualType": "void ()"
710 // CHECK-NEXT:  },
711 // CHECK-NEXT:  "storageClass": "static"
712 // CHECK-NEXT: }
713 
714 
715 // CHECK:  "kind": "FunctionDecl",
716 // CHECK-NEXT:  "loc": {
717 // CHECK-NEXT:   "file": "{{.*}}",
718 // CHECK-NEXT:   "line": 28,
719 // CHECK-NEXT:   "col": 13,
720 // CHECK-NEXT:   "tokLen": 5
721 // CHECK-NEXT:  },
722 // CHECK-NEXT:  "range": {
723 // CHECK-NEXT:   "begin": {
724 // CHECK-NEXT:    "col": 1,
725 // CHECK-NEXT:    "tokLen": 6
726 // CHECK-NEXT:   },
727 // CHECK-NEXT:   "end": {
728 // CHECK-NEXT:    "col": 23,
729 // CHECK-NEXT:    "tokLen": 1
730 // CHECK-NEXT:   }
731 // CHECK-NEXT:  },
732 // CHECK-NEXT:  "name": "Test7",
733 // CHECK-NEXT:  "type": {
734 // CHECK-NEXT:   "qualType": "void ()"
735 // CHECK-NEXT:  },
736 // CHECK-NEXT:  "storageClass": "extern"
737 // CHECK-NEXT: }
738 
739 
740 // CHECK:  "kind": "FunctionDecl",
741 // CHECK-NEXT:  "loc": {
742 // CHECK-NEXT:   "file": "{{.*}}",
743 // CHECK-NEXT:   "line": 29,
744 // CHECK-NEXT:   "col": 13,
745 // CHECK-NEXT:   "tokLen": 5
746 // CHECK-NEXT:  },
747 // CHECK-NEXT:  "range": {
748 // CHECK-NEXT:   "begin": {
749 // CHECK-NEXT:    "col": 1,
750 // CHECK-NEXT:    "tokLen": 6
751 // CHECK-NEXT:   },
752 // CHECK-NEXT:   "end": {
753 // CHECK-NEXT:    "col": 23,
754 // CHECK-NEXT:    "tokLen": 1
755 // CHECK-NEXT:   }
756 // CHECK-NEXT:  },
757 // CHECK-NEXT:  "name": "Test8",
758 // CHECK-NEXT:  "type": {
759 // CHECK-NEXT:   "qualType": "void ()"
760 // CHECK-NEXT:  },
761 // CHECK-NEXT:  "inline": true
762 // CHECK-NEXT: }
763 
764 
765 // CHECK:  "kind": "FunctionDecl",
766 // CHECK-NEXT:  "loc": {
767 // CHECK-NEXT:   "file": "{{.*}}",
768 // CHECK-NEXT:   "line": 30,
769 // CHECK-NEXT:   "col": 6,
770 // CHECK-NEXT:   "tokLen": 5
771 // CHECK-NEXT:  },
772 // CHECK-NEXT:  "range": {
773 // CHECK-NEXT:   "begin": {
774 // CHECK-NEXT:    "col": 1,
775 // CHECK-NEXT:    "tokLen": 4
776 // CHECK-NEXT:   },
777 // CHECK-NEXT:   "end": {
778 // CHECK-NEXT:    "col": 18,
779 // CHECK-NEXT:    "tokLen": 8
780 // CHECK-NEXT:   }
781 // CHECK-NEXT:  },
782 // CHECK-NEXT:  "name": "Test9",
783 // CHECK-NEXT:  "type": {
784 // CHECK-NEXT:   "qualType": "void () noexcept"
785 // CHECK-NEXT:  }
786 // CHECK-NEXT: }
787 
788 
789 // CHECK:  "kind": "FunctionDecl",
790 // CHECK-NEXT:  "loc": {
791 // CHECK-NEXT:   "file": "{{.*}}",
792 // CHECK-NEXT:   "line": 31,
793 // CHECK-NEXT:   "col": 6,
794 // CHECK-NEXT:   "tokLen": 6
795 // CHECK-NEXT:  },
796 // CHECK-NEXT:  "range": {
797 // CHECK-NEXT:   "begin": {
798 // CHECK-NEXT:    "col": 1,
799 // CHECK-NEXT:    "tokLen": 4
800 // CHECK-NEXT:   },
801 // CHECK-NEXT:   "end": {
802 // CHECK-NEXT:    "col": 33,
803 // CHECK-NEXT:    "tokLen": 1
804 // CHECK-NEXT:   }
805 // CHECK-NEXT:  },
806 // CHECK-NEXT:  "name": "Test10",
807 // CHECK-NEXT:  "type": {
808 // CHECK-NEXT:   "qualType": "void () noexcept(false)"
809 // CHECK-NEXT:  }
810 // CHECK-NEXT: }
811 
812 
813 // CHECK:  "kind": "FunctionDecl",
814 // CHECK-NEXT:  "loc": {
815 // CHECK-NEXT:   "file": "{{.*}}",
816 // CHECK-NEXT:   "line": 32,
817 // CHECK-NEXT:   "col": 6,
818 // CHECK-NEXT:   "tokLen": 6
819 // CHECK-NEXT:  },
820 // CHECK-NEXT:  "range": {
821 // CHECK-NEXT:   "begin": {
822 // CHECK-NEXT:    "col": 1,
823 // CHECK-NEXT:    "tokLen": 4
824 // CHECK-NEXT:   },
825 // CHECK-NEXT:   "end": {
826 // CHECK-NEXT:    "col": 29,
827 // CHECK-NEXT:    "tokLen": 1
828 // CHECK-NEXT:   }
829 // CHECK-NEXT:  },
830 // CHECK-NEXT:  "name": "Test11",
831 // CHECK-NEXT:  "type": {
832 // CHECK-NEXT:   "qualType": "void () noexcept(1)"
833 // CHECK-NEXT:  }
834 // CHECK-NEXT: }
835 
836 
837 // CHECK:  "kind": "FunctionTemplateDecl",
838 // CHECK-NEXT:  "loc": {
839 // CHECK-NEXT:   "file": "{{.*}}",
840 // CHECK-NEXT:   "line": 35,
841 // CHECK-NEXT:   "col": 3,
842 // CHECK-NEXT:   "tokLen": 6
843 // CHECK-NEXT:  },
844 // CHECK-NEXT:  "range": {
845 // CHECK-NEXT:   "begin": {
846 // CHECK-NEXT:    "line": 34,
847 // CHECK-NEXT:    "col": 1,
848 // CHECK-NEXT:    "tokLen": 8
849 // CHECK-NEXT:   },
850 // CHECK-NEXT:   "end": {
851 // CHECK-NEXT:    "line": 35,
852 // CHECK-NEXT:    "col": 12,
853 // CHECK-NEXT:    "tokLen": 1
854 // CHECK-NEXT:   }
855 // CHECK-NEXT:  },
856 // CHECK-NEXT:  "name": "Test12",
857 // CHECK-NEXT:  "inner": [
858 // CHECK-NEXT:   {
859 // CHECK-NEXT:    "id": "0x{{.*}}",
860 // CHECK-NEXT:    "kind": "TemplateTypeParmDecl",
861 // CHECK-NEXT:    "loc": {
862 // CHECK-NEXT:     "line": 34,
863 // CHECK-NEXT:     "col": 20,
864 // CHECK-NEXT:     "tokLen": 1
865 // CHECK-NEXT:    },
866 // CHECK-NEXT:    "range": {
867 // CHECK-NEXT:     "begin": {
868 // CHECK-NEXT:      "col": 11,
869 // CHECK-NEXT:      "tokLen": 8
870 // CHECK-NEXT:     },
871 // CHECK-NEXT:     "end": {
872 // CHECK-NEXT:      "col": 20,
873 // CHECK-NEXT:      "tokLen": 1
874 // CHECK-NEXT:     }
875 // CHECK-NEXT:    },
876 // CHECK-NEXT:    "isReferenced": true,
877 // CHECK-NEXT:    "name": "T",
878 // CHECK-NEXT:    "tagUsed": "typename",
879 // CHECK-NEXT:    "depth": 0,
880 // CHECK-NEXT:    "index": 0
881 // CHECK-NEXT:   },
882 // CHECK-NEXT:   {
883 // CHECK-NEXT:    "id": "0x{{.*}}",
884 // CHECK-NEXT:    "kind": "FunctionDecl",
885 // CHECK-NEXT:    "loc": {
886 // CHECK-NEXT:     "line": 35,
887 // CHECK-NEXT:     "col": 3,
888 // CHECK-NEXT:     "tokLen": 6
889 // CHECK-NEXT:    },
890 // CHECK-NEXT:    "range": {
891 // CHECK-NEXT:     "begin": {
892 // CHECK-NEXT:      "col": 1,
893 // CHECK-NEXT:      "tokLen": 1
894 // CHECK-NEXT:     },
895 // CHECK-NEXT:     "end": {
896 // CHECK-NEXT:      "col": 12,
897 // CHECK-NEXT:      "tokLen": 1
898 // CHECK-NEXT:     }
899 // CHECK-NEXT:    },
900 // CHECK-NEXT:    "name": "Test12",
901 // CHECK-NEXT:    "type": {
902 // CHECK-NEXT:     "qualType": "T (T &)"
903 // CHECK-NEXT:    },
904 // CHECK-NEXT:    "inner": [
905 // CHECK-NEXT:     {
906 // CHECK-NEXT:      "id": "0x{{.*}}",
907 // CHECK-NEXT:      "kind": "ParmVarDecl",
908 // CHECK-NEXT:      "loc": {
909 // CHECK-NEXT:       "col": 12,
910 // CHECK-NEXT:       "tokLen": 1
911 // CHECK-NEXT:      },
912 // CHECK-NEXT:      "range": {
913 // CHECK-NEXT:       "begin": {
914 // CHECK-NEXT:        "col": 10,
915 // CHECK-NEXT:        "tokLen": 1
916 // CHECK-NEXT:       },
917 // CHECK-NEXT:       "end": {
918 // CHECK-NEXT:        "col": 11,
919 // CHECK-NEXT:        "tokLen": 1
920 // CHECK-NEXT:       }
921 // CHECK-NEXT:      },
922 // CHECK-NEXT:      "type": {
923 // CHECK-NEXT:       "qualType": "T &"
924 // CHECK-NEXT:      }
925 // CHECK-NEXT:     }
926 // CHECK-NEXT:    ]
927 // CHECK-NEXT:   }
928 // CHECK-NEXT:  ]
929 // CHECK-NEXT: }
930 
931 
932 // CHECK:  "kind": "FunctionDecl",
933 // CHECK-NEXT:  "loc": {
934 // CHECK-NEXT:   "file": "{{.*}}",
935 // CHECK-NEXT:   "line": 37,
936 // CHECK-NEXT:   "col": 6,
937 // CHECK-NEXT:   "tokLen": 6
938 // CHECK-NEXT:  },
939 // CHECK-NEXT:  "range": {
940 // CHECK-NEXT:   "begin": {
941 // CHECK-NEXT:    "col": 1,
942 // CHECK-NEXT:    "tokLen": 4
943 // CHECK-NEXT:   },
944 // CHECK-NEXT:   "end": {
945 // CHECK-NEXT:    "col": 19,
946 // CHECK-NEXT:    "tokLen": 1
947 // CHECK-NEXT:   }
948 // CHECK-NEXT:  },
949 // CHECK-NEXT:  "name": "Test13",
950 // CHECK-NEXT:  "type": {
951 // CHECK-NEXT:   "qualType": "void (int)"
952 // CHECK-NEXT:  },
953 // CHECK-NEXT:  "inner": [
954 // CHECK-NEXT:   {
955 // CHECK-NEXT:    "id": "0x{{.*}}",
956 // CHECK-NEXT:    "kind": "ParmVarDecl",
957 // CHECK-NEXT:    "loc": {
958 // CHECK-NEXT:     "col": 16,
959 // CHECK-NEXT:     "tokLen": 1
960 // CHECK-NEXT:    },
961 // CHECK-NEXT:    "range": {
962 // CHECK-NEXT:     "begin": {
963 // CHECK-NEXT:      "col": 13,
964 // CHECK-NEXT:      "tokLen": 3
965 // CHECK-NEXT:     },
966 // CHECK-NEXT:     "end": {
967 // CHECK-NEXT:      "col": 13,
968 // CHECK-NEXT:      "tokLen": 3
969 // CHECK-NEXT:     }
970 // CHECK-NEXT:    },
971 // CHECK-NEXT:    "type": {
972 // CHECK-NEXT:     "qualType": "int"
973 // CHECK-NEXT:    }
974 // CHECK-NEXT:   },
975 // CHECK-NEXT:   {
976 // CHECK-NEXT:    "id": "0x{{.*}}",
977 // CHECK-NEXT:    "kind": "CompoundStmt",
978 // CHECK-NEXT:    "range": {
979 // CHECK-NEXT:     "begin": {
980 // CHECK-NEXT:      "col": 18,
981 // CHECK-NEXT:      "tokLen": 1
982 // CHECK-NEXT:     },
983 // CHECK-NEXT:     "end": {
984 // CHECK-NEXT:      "col": 19,
985 // CHECK-NEXT:      "tokLen": 1
986 // CHECK-NEXT:     }
987 // CHECK-NEXT:    }
988 // CHECK-NEXT:   }
989 // CHECK-NEXT:  ]
990 // CHECK-NEXT: }
991 
992 
993 // CHECK:  "kind": "FunctionDecl",
994 // CHECK-NEXT:  "loc": {
995 // CHECK-NEXT:   "file": "{{.*}}",
996 // CHECK-NEXT:   "line": 38,
997 // CHECK-NEXT:   "col": 6,
998 // CHECK-NEXT:   "tokLen": 6
999 // CHECK-NEXT:  },
1000 // CHECK-NEXT:  "range": {
1001 // CHECK-NEXT:   "begin": {
1002 // CHECK-NEXT:    "col": 1,
1003 // CHECK-NEXT:    "tokLen": 4
1004 // CHECK-NEXT:   },
1005 // CHECK-NEXT:   "end": {
1006 // CHECK-NEXT:    "col": 24,
1007 // CHECK-NEXT:    "tokLen": 1
1008 // CHECK-NEXT:   }
1009 // CHECK-NEXT:  },
1010 // CHECK-NEXT:  "name": "Test14",
1011 // CHECK-NEXT:  "type": {
1012 // CHECK-NEXT:   "qualType": "void (int, ...)"
1013 // CHECK-NEXT:  },
1014 // CHECK-NEXT:  "variadic": true,
1015 // CHECK-NEXT:  "inner": [
1016 // CHECK-NEXT:   {
1017 // CHECK-NEXT:    "id": "0x{{.*}}",
1018 // CHECK-NEXT:    "kind": "ParmVarDecl",
1019 // CHECK-NEXT:    "loc": {
1020 // CHECK-NEXT:     "col": 16,
1021 // CHECK-NEXT:     "tokLen": 1
1022 // CHECK-NEXT:    },
1023 // CHECK-NEXT:    "range": {
1024 // CHECK-NEXT:     "begin": {
1025 // CHECK-NEXT:      "col": 13,
1026 // CHECK-NEXT:      "tokLen": 3
1027 // CHECK-NEXT:     },
1028 // CHECK-NEXT:     "end": {
1029 // CHECK-NEXT:      "col": 13,
1030 // CHECK-NEXT:      "tokLen": 3
1031 // CHECK-NEXT:     }
1032 // CHECK-NEXT:    },
1033 // CHECK-NEXT:    "type": {
1034 // CHECK-NEXT:     "qualType": "int"
1035 // CHECK-NEXT:    }
1036 // CHECK-NEXT:   },
1037 // CHECK-NEXT:   {
1038 // CHECK-NEXT:    "id": "0x{{.*}}",
1039 // CHECK-NEXT:    "kind": "CompoundStmt",
1040 // CHECK-NEXT:    "range": {
1041 // CHECK-NEXT:     "begin": {
1042 // CHECK-NEXT:      "col": 23,
1043 // CHECK-NEXT:      "tokLen": 1
1044 // CHECK-NEXT:     },
1045 // CHECK-NEXT:     "end": {
1046 // CHECK-NEXT:      "col": 24,
1047 // CHECK-NEXT:      "tokLen": 1
1048 // CHECK-NEXT:     }
1049 // CHECK-NEXT:    }
1050 // CHECK-NEXT:   }
1051 // CHECK-NEXT:  ]
1052 // CHECK-NEXT: }
1053