1 // RUN: %clang_cc1 -std=c++17 -triple x86_64-unknown-unknown -ast-dump=json %s | FileCheck -strict-whitespace %s
2 
3 template <typename Ty>
4 void a(Ty);
5 
6 template <typename... Ty>
7 void b(Ty...);
8 
9 template <class Ty, typename Uy>
10 void c(Ty);
11 
12 template <>
13 void c<float, int>(float);
14 
15 template <typename Ty, template<typename> typename Uy>
16 void d(Ty, Uy<Ty>);
17 
18 template <class Ty>
19 void e(Ty);
20 
21 template <int N>
22 void f(int i = N);
23 
24 template <typename Ty = int>
25 void g(Ty);
26 
27 template <typename = void>
28 void h();
29 
30 template <typename Ty>
31 struct R {};
32 
33 template <>
34 struct R<int> {};
35 
36 template <typename Ty, class Uy>
37 struct S {};
38 
39 template <typename Ty>
40 struct S<Ty, int> {};
41 
42 template <auto>
43 struct T {};
44 
45 template <decltype(auto)>
46 struct U {};
47 
48 template <typename Ty>
49 struct V {
50   template <typename Uy>
51   void f();
52 };
53 
54 template <typename Ty>
55 template <typename Uy>
56 void V<Ty>::f() {}
57 
58 template <template <typename> class = R>
59 void i();
60 
61 // NOTE: CHECK lines have been autogenerated by gen_ast_dump_json_test.py
62 
63 // CHECK:  "kind": "TranslationUnitDecl",
64 // CHECK-NEXT:  "loc": {},
65 // CHECK-NEXT:  "range": {
66 // CHECK-NEXT:   "begin": {},
67 // CHECK-NEXT:   "end": {}
68 // CHECK-NEXT:  },
69 // CHECK-NEXT:  "inner": [
70 // CHECK-NEXT:   {
71 // CHECK-NEXT:    "id": "0x{{.*}}",
72 // CHECK-NEXT:    "kind": "TypedefDecl",
73 // CHECK-NEXT:    "loc": {},
74 // CHECK-NEXT:    "range": {
75 // CHECK-NEXT:     "begin": {},
76 // CHECK-NEXT:     "end": {}
77 // CHECK-NEXT:    },
78 // CHECK-NEXT:    "isImplicit": true,
79 // CHECK-NEXT:    "name": "__int128_t",
80 // CHECK-NEXT:    "type": {
81 // CHECK-NEXT:     "qualType": "__int128"
82 // CHECK-NEXT:    },
83 // CHECK-NEXT:    "inner": [
84 // CHECK-NEXT:     {
85 // CHECK-NEXT:      "id": "0x{{.*}}",
86 // CHECK-NEXT:      "kind": "BuiltinType",
87 // CHECK-NEXT:      "type": {
88 // CHECK-NEXT:       "qualType": "__int128"
89 // CHECK-NEXT:      }
90 // CHECK-NEXT:     }
91 // CHECK-NEXT:    ]
92 // CHECK-NEXT:   },
93 // CHECK-NEXT:   {
94 // CHECK-NEXT:    "id": "0x{{.*}}",
95 // CHECK-NEXT:    "kind": "TypedefDecl",
96 // CHECK-NEXT:    "loc": {},
97 // CHECK-NEXT:    "range": {
98 // CHECK-NEXT:     "begin": {},
99 // CHECK-NEXT:     "end": {}
100 // CHECK-NEXT:    },
101 // CHECK-NEXT:    "isImplicit": true,
102 // CHECK-NEXT:    "name": "__uint128_t",
103 // CHECK-NEXT:    "type": {
104 // CHECK-NEXT:     "qualType": "unsigned __int128"
105 // CHECK-NEXT:    },
106 // CHECK-NEXT:    "inner": [
107 // CHECK-NEXT:     {
108 // CHECK-NEXT:      "id": "0x{{.*}}",
109 // CHECK-NEXT:      "kind": "BuiltinType",
110 // CHECK-NEXT:      "type": {
111 // CHECK-NEXT:       "qualType": "unsigned __int128"
112 // CHECK-NEXT:      }
113 // CHECK-NEXT:     }
114 // CHECK-NEXT:    ]
115 // CHECK-NEXT:   },
116 // CHECK-NEXT:   {
117 // CHECK-NEXT:    "id": "0x{{.*}}",
118 // CHECK-NEXT:    "kind": "TypedefDecl",
119 // CHECK-NEXT:    "loc": {},
120 // CHECK-NEXT:    "range": {
121 // CHECK-NEXT:     "begin": {},
122 // CHECK-NEXT:     "end": {}
123 // CHECK-NEXT:    },
124 // CHECK-NEXT:    "isImplicit": true,
125 // CHECK-NEXT:    "name": "__NSConstantString",
126 // CHECK-NEXT:    "type": {
127 // CHECK-NEXT:     "qualType": "__NSConstantString_tag"
128 // CHECK-NEXT:    },
129 // CHECK-NEXT:    "inner": [
130 // CHECK-NEXT:     {
131 // CHECK-NEXT:      "id": "0x{{.*}}",
132 // CHECK-NEXT:      "kind": "RecordType",
133 // CHECK-NEXT:      "type": {
134 // CHECK-NEXT:       "qualType": "__NSConstantString_tag"
135 // CHECK-NEXT:      },
136 // CHECK-NEXT:      "decl": {
137 // CHECK-NEXT:       "id": "0x{{.*}}",
138 // CHECK-NEXT:       "kind": "CXXRecordDecl",
139 // CHECK-NEXT:       "name": "__NSConstantString_tag"
140 // CHECK-NEXT:      }
141 // CHECK-NEXT:     }
142 // CHECK-NEXT:    ]
143 // CHECK-NEXT:   },
144 // CHECK-NEXT:   {
145 // CHECK-NEXT:    "id": "0x{{.*}}",
146 // CHECK-NEXT:    "kind": "TypedefDecl",
147 // CHECK-NEXT:    "loc": {},
148 // CHECK-NEXT:    "range": {
149 // CHECK-NEXT:     "begin": {},
150 // CHECK-NEXT:     "end": {}
151 // CHECK-NEXT:    },
152 // CHECK-NEXT:    "isImplicit": true,
153 // CHECK-NEXT:    "name": "__builtin_ms_va_list",
154 // CHECK-NEXT:    "type": {
155 // CHECK-NEXT:     "qualType": "char *"
156 // CHECK-NEXT:    },
157 // CHECK-NEXT:    "inner": [
158 // CHECK-NEXT:     {
159 // CHECK-NEXT:      "id": "0x{{.*}}",
160 // CHECK-NEXT:      "kind": "PointerType",
161 // CHECK-NEXT:      "type": {
162 // CHECK-NEXT:       "qualType": "char *"
163 // CHECK-NEXT:      },
164 // CHECK-NEXT:      "inner": [
165 // CHECK-NEXT:       {
166 // CHECK-NEXT:        "id": "0x{{.*}}",
167 // CHECK-NEXT:        "kind": "BuiltinType",
168 // CHECK-NEXT:        "type": {
169 // CHECK-NEXT:         "qualType": "char"
170 // CHECK-NEXT:        }
171 // CHECK-NEXT:       }
172 // CHECK-NEXT:      ]
173 // CHECK-NEXT:     }
174 // CHECK-NEXT:    ]
175 // CHECK-NEXT:   },
176 // CHECK-NEXT:   {
177 // CHECK-NEXT:    "id": "0x{{.*}}",
178 // CHECK-NEXT:    "kind": "TypedefDecl",
179 // CHECK-NEXT:    "loc": {},
180 // CHECK-NEXT:    "range": {
181 // CHECK-NEXT:     "begin": {},
182 // CHECK-NEXT:     "end": {}
183 // CHECK-NEXT:    },
184 // CHECK-NEXT:    "isImplicit": true,
185 // CHECK-NEXT:    "name": "__builtin_va_list",
186 // CHECK-NEXT:    "type": {
187 // CHECK-NEXT:     "qualType": "__va_list_tag [1]"
188 // CHECK-NEXT:    },
189 // CHECK-NEXT:    "inner": [
190 // CHECK-NEXT:     {
191 // CHECK-NEXT:      "id": "0x{{.*}}",
192 // CHECK-NEXT:      "kind": "ConstantArrayType",
193 // CHECK-NEXT:      "type": {
194 // CHECK-NEXT:       "qualType": "__va_list_tag [1]"
195 // CHECK-NEXT:      },
196 // CHECK-NEXT:      "size": 1,
197 // CHECK-NEXT:      "inner": [
198 // CHECK-NEXT:       {
199 // CHECK-NEXT:        "id": "0x{{.*}}",
200 // CHECK-NEXT:        "kind": "RecordType",
201 // CHECK-NEXT:        "type": {
202 // CHECK-NEXT:         "qualType": "__va_list_tag"
203 // CHECK-NEXT:        },
204 // CHECK-NEXT:        "decl": {
205 // CHECK-NEXT:         "id": "0x{{.*}}",
206 // CHECK-NEXT:         "kind": "CXXRecordDecl",
207 // CHECK-NEXT:         "name": "__va_list_tag"
208 // CHECK-NEXT:        }
209 // CHECK-NEXT:       }
210 // CHECK-NEXT:      ]
211 // CHECK-NEXT:     }
212 // CHECK-NEXT:    ]
213 // CHECK-NEXT:   },
214 // CHECK-NEXT:   {
215 // CHECK-NEXT:    "id": "0x{{.*}}",
216 // CHECK-NEXT:    "kind": "FunctionTemplateDecl",
217 // CHECK-NEXT:    "loc": {
218 // CHECK-NEXT:     "offset": 142,
219 // CHECK-NEXT:     "file": "{{.*}}",
220 // CHECK-NEXT:     "line": 4,
221 // CHECK-NEXT:     "col": 6,
222 // CHECK-NEXT:     "tokLen": 1
223 // CHECK-NEXT:    },
224 // CHECK-NEXT:    "range": {
225 // CHECK-NEXT:     "begin": {
226 // CHECK-NEXT:      "offset": 114,
227 // CHECK-NEXT:      "line": 3,
228 // CHECK-NEXT:      "col": 1,
229 // CHECK-NEXT:      "tokLen": 8
230 // CHECK-NEXT:     },
231 // CHECK-NEXT:     "end": {
232 // CHECK-NEXT:      "offset": 146,
233 // CHECK-NEXT:      "line": 4,
234 // CHECK-NEXT:      "col": 10,
235 // CHECK-NEXT:      "tokLen": 1
236 // CHECK-NEXT:     }
237 // CHECK-NEXT:    },
238 // CHECK-NEXT:    "name": "a",
239 // CHECK-NEXT:    "inner": [
240 // CHECK-NEXT:     {
241 // CHECK-NEXT:      "id": "0x{{.*}}",
242 // CHECK-NEXT:      "kind": "TemplateTypeParmDecl",
243 // CHECK-NEXT:      "loc": {
244 // CHECK-NEXT:       "offset": 133,
245 // CHECK-NEXT:       "line": 3,
246 // CHECK-NEXT:       "col": 20,
247 // CHECK-NEXT:       "tokLen": 2
248 // CHECK-NEXT:      },
249 // CHECK-NEXT:      "range": {
250 // CHECK-NEXT:       "begin": {
251 // CHECK-NEXT:        "offset": 124,
252 // CHECK-NEXT:        "col": 11,
253 // CHECK-NEXT:        "tokLen": 8
254 // CHECK-NEXT:       },
255 // CHECK-NEXT:       "end": {
256 // CHECK-NEXT:        "offset": 133,
257 // CHECK-NEXT:        "col": 20,
258 // CHECK-NEXT:        "tokLen": 2
259 // CHECK-NEXT:       }
260 // CHECK-NEXT:      },
261 // CHECK-NEXT:      "isReferenced": true,
262 // CHECK-NEXT:      "name": "Ty",
263 // CHECK-NEXT:      "tagUsed": "typename",
264 // CHECK-NEXT:      "depth": 0,
265 // CHECK-NEXT:      "index": 0
266 // CHECK-NEXT:     },
267 // CHECK-NEXT:     {
268 // CHECK-NEXT:      "id": "0x{{.*}}",
269 // CHECK-NEXT:      "kind": "FunctionDecl",
270 // CHECK-NEXT:      "loc": {
271 // CHECK-NEXT:       "offset": 142,
272 // CHECK-NEXT:       "line": 4,
273 // CHECK-NEXT:       "col": 6,
274 // CHECK-NEXT:       "tokLen": 1
275 // CHECK-NEXT:      },
276 // CHECK-NEXT:      "range": {
277 // CHECK-NEXT:       "begin": {
278 // CHECK-NEXT:        "offset": 137,
279 // CHECK-NEXT:        "col": 1,
280 // CHECK-NEXT:        "tokLen": 4
281 // CHECK-NEXT:       },
282 // CHECK-NEXT:       "end": {
283 // CHECK-NEXT:        "offset": 146,
284 // CHECK-NEXT:        "col": 10,
285 // CHECK-NEXT:        "tokLen": 1
286 // CHECK-NEXT:       }
287 // CHECK-NEXT:      },
288 // CHECK-NEXT:      "name": "a",
289 // CHECK-NEXT:      "type": {
290 // CHECK-NEXT:       "qualType": "void (Ty)"
291 // CHECK-NEXT:      },
292 // CHECK-NEXT:      "inner": [
293 // CHECK-NEXT:       {
294 // CHECK-NEXT:        "id": "0x{{.*}}",
295 // CHECK-NEXT:        "kind": "ParmVarDecl",
296 // CHECK-NEXT:        "loc": {
297 // CHECK-NEXT:         "offset": 146,
298 // CHECK-NEXT:         "col": 10,
299 // CHECK-NEXT:         "tokLen": 1
300 // CHECK-NEXT:        },
301 // CHECK-NEXT:        "range": {
302 // CHECK-NEXT:         "begin": {
303 // CHECK-NEXT:          "offset": 144,
304 // CHECK-NEXT:          "col": 8,
305 // CHECK-NEXT:          "tokLen": 2
306 // CHECK-NEXT:         },
307 // CHECK-NEXT:         "end": {
308 // CHECK-NEXT:          "offset": 144,
309 // CHECK-NEXT:          "col": 8,
310 // CHECK-NEXT:          "tokLen": 2
311 // CHECK-NEXT:         }
312 // CHECK-NEXT:        },
313 // CHECK-NEXT:        "type": {
314 // CHECK-NEXT:         "qualType": "Ty"
315 // CHECK-NEXT:        }
316 // CHECK-NEXT:       }
317 // CHECK-NEXT:      ]
318 // CHECK-NEXT:     }
319 // CHECK-NEXT:    ]
320 // CHECK-NEXT:   },
321 // CHECK-NEXT:   {
322 // CHECK-NEXT:    "id": "0x{{.*}}",
323 // CHECK-NEXT:    "kind": "FunctionTemplateDecl",
324 // CHECK-NEXT:    "loc": {
325 // CHECK-NEXT:     "offset": 181,
326 // CHECK-NEXT:     "line": 7,
327 // CHECK-NEXT:     "col": 6,
328 // CHECK-NEXT:     "tokLen": 1
329 // CHECK-NEXT:    },
330 // CHECK-NEXT:    "range": {
331 // CHECK-NEXT:     "begin": {
332 // CHECK-NEXT:      "offset": 150,
333 // CHECK-NEXT:      "line": 6,
334 // CHECK-NEXT:      "col": 1,
335 // CHECK-NEXT:      "tokLen": 8
336 // CHECK-NEXT:     },
337 // CHECK-NEXT:     "end": {
338 // CHECK-NEXT:      "offset": 188,
339 // CHECK-NEXT:      "line": 7,
340 // CHECK-NEXT:      "col": 13,
341 // CHECK-NEXT:      "tokLen": 1
342 // CHECK-NEXT:     }
343 // CHECK-NEXT:    },
344 // CHECK-NEXT:    "name": "b",
345 // CHECK-NEXT:    "inner": [
346 // CHECK-NEXT:     {
347 // CHECK-NEXT:      "id": "0x{{.*}}",
348 // CHECK-NEXT:      "kind": "TemplateTypeParmDecl",
349 // CHECK-NEXT:      "loc": {
350 // CHECK-NEXT:       "offset": 172,
351 // CHECK-NEXT:       "line": 6,
352 // CHECK-NEXT:       "col": 23,
353 // CHECK-NEXT:       "tokLen": 2
354 // CHECK-NEXT:      },
355 // CHECK-NEXT:      "range": {
356 // CHECK-NEXT:       "begin": {
357 // CHECK-NEXT:        "offset": 160,
358 // CHECK-NEXT:        "col": 11,
359 // CHECK-NEXT:        "tokLen": 8
360 // CHECK-NEXT:       },
361 // CHECK-NEXT:       "end": {
362 // CHECK-NEXT:        "offset": 172,
363 // CHECK-NEXT:        "col": 23,
364 // CHECK-NEXT:        "tokLen": 2
365 // CHECK-NEXT:       }
366 // CHECK-NEXT:      },
367 // CHECK-NEXT:      "isReferenced": true,
368 // CHECK-NEXT:      "name": "Ty",
369 // CHECK-NEXT:      "tagUsed": "typename",
370 // CHECK-NEXT:      "depth": 0,
371 // CHECK-NEXT:      "index": 0,
372 // CHECK-NEXT:      "isParameterPack": true
373 // CHECK-NEXT:     },
374 // CHECK-NEXT:     {
375 // CHECK-NEXT:      "id": "0x{{.*}}",
376 // CHECK-NEXT:      "kind": "FunctionDecl",
377 // CHECK-NEXT:      "loc": {
378 // CHECK-NEXT:       "offset": 181,
379 // CHECK-NEXT:       "line": 7,
380 // CHECK-NEXT:       "col": 6,
381 // CHECK-NEXT:       "tokLen": 1
382 // CHECK-NEXT:      },
383 // CHECK-NEXT:      "range": {
384 // CHECK-NEXT:       "begin": {
385 // CHECK-NEXT:        "offset": 176,
386 // CHECK-NEXT:        "col": 1,
387 // CHECK-NEXT:        "tokLen": 4
388 // CHECK-NEXT:       },
389 // CHECK-NEXT:       "end": {
390 // CHECK-NEXT:        "offset": 188,
391 // CHECK-NEXT:        "col": 13,
392 // CHECK-NEXT:        "tokLen": 1
393 // CHECK-NEXT:       }
394 // CHECK-NEXT:      },
395 // CHECK-NEXT:      "name": "b",
396 // CHECK-NEXT:      "type": {
397 // CHECK-NEXT:       "qualType": "void (Ty...)"
398 // CHECK-NEXT:      },
399 // CHECK-NEXT:      "inner": [
400 // CHECK-NEXT:       {
401 // CHECK-NEXT:        "id": "0x{{.*}}",
402 // CHECK-NEXT:        "kind": "ParmVarDecl",
403 // CHECK-NEXT:        "loc": {
404 // CHECK-NEXT:         "offset": 188,
405 // CHECK-NEXT:         "col": 13,
406 // CHECK-NEXT:         "tokLen": 1
407 // CHECK-NEXT:        },
408 // CHECK-NEXT:        "range": {
409 // CHECK-NEXT:         "begin": {
410 // CHECK-NEXT:          "offset": 183,
411 // CHECK-NEXT:          "col": 8,
412 // CHECK-NEXT:          "tokLen": 2
413 // CHECK-NEXT:         },
414 // CHECK-NEXT:         "end": {
415 // CHECK-NEXT:          "offset": 185,
416 // CHECK-NEXT:          "col": 10,
417 // CHECK-NEXT:          "tokLen": 3
418 // CHECK-NEXT:         }
419 // CHECK-NEXT:        },
420 // CHECK-NEXT:        "type": {
421 // CHECK-NEXT:         "qualType": "Ty..."
422 // CHECK-NEXT:        },
423 // CHECK-NEXT:        "isParameterPack": true
424 // CHECK-NEXT:       }
425 // CHECK-NEXT:      ]
426 // CHECK-NEXT:     }
427 // CHECK-NEXT:    ]
428 // CHECK-NEXT:   },
429 // CHECK-NEXT:   {
430 // CHECK-NEXT:    "id": "0x{{.*}}",
431 // CHECK-NEXT:    "kind": "FunctionTemplateDecl",
432 // CHECK-NEXT:    "loc": {
433 // CHECK-NEXT:     "offset": 230,
434 // CHECK-NEXT:     "line": 10,
435 // CHECK-NEXT:     "col": 6,
436 // CHECK-NEXT:     "tokLen": 1
437 // CHECK-NEXT:    },
438 // CHECK-NEXT:    "range": {
439 // CHECK-NEXT:     "begin": {
440 // CHECK-NEXT:      "offset": 192,
441 // CHECK-NEXT:      "line": 9,
442 // CHECK-NEXT:      "col": 1,
443 // CHECK-NEXT:      "tokLen": 8
444 // CHECK-NEXT:     },
445 // CHECK-NEXT:     "end": {
446 // CHECK-NEXT:      "offset": 234,
447 // CHECK-NEXT:      "line": 10,
448 // CHECK-NEXT:      "col": 10,
449 // CHECK-NEXT:      "tokLen": 1
450 // CHECK-NEXT:     }
451 // CHECK-NEXT:    },
452 // CHECK-NEXT:    "name": "c",
453 // CHECK-NEXT:    "inner": [
454 // CHECK-NEXT:     {
455 // CHECK-NEXT:      "id": "0x{{.*}}",
456 // CHECK-NEXT:      "kind": "TemplateTypeParmDecl",
457 // CHECK-NEXT:      "loc": {
458 // CHECK-NEXT:       "offset": 208,
459 // CHECK-NEXT:       "line": 9,
460 // CHECK-NEXT:       "col": 17,
461 // CHECK-NEXT:       "tokLen": 2
462 // CHECK-NEXT:      },
463 // CHECK-NEXT:      "range": {
464 // CHECK-NEXT:       "begin": {
465 // CHECK-NEXT:        "offset": 202,
466 // CHECK-NEXT:        "col": 11,
467 // CHECK-NEXT:        "tokLen": 5
468 // CHECK-NEXT:       },
469 // CHECK-NEXT:       "end": {
470 // CHECK-NEXT:        "offset": 208,
471 // CHECK-NEXT:        "col": 17,
472 // CHECK-NEXT:        "tokLen": 2
473 // CHECK-NEXT:       }
474 // CHECK-NEXT:      },
475 // CHECK-NEXT:      "isReferenced": true,
476 // CHECK-NEXT:      "name": "Ty",
477 // CHECK-NEXT:      "tagUsed": "class",
478 // CHECK-NEXT:      "depth": 0,
479 // CHECK-NEXT:      "index": 0
480 // CHECK-NEXT:     },
481 // CHECK-NEXT:     {
482 // CHECK-NEXT:      "id": "0x{{.*}}",
483 // CHECK-NEXT:      "kind": "TemplateTypeParmDecl",
484 // CHECK-NEXT:      "loc": {
485 // CHECK-NEXT:       "offset": 221,
486 // CHECK-NEXT:       "col": 30,
487 // CHECK-NEXT:       "tokLen": 2
488 // CHECK-NEXT:      },
489 // CHECK-NEXT:      "range": {
490 // CHECK-NEXT:       "begin": {
491 // CHECK-NEXT:        "offset": 212,
492 // CHECK-NEXT:        "col": 21,
493 // CHECK-NEXT:        "tokLen": 8
494 // CHECK-NEXT:       },
495 // CHECK-NEXT:       "end": {
496 // CHECK-NEXT:        "offset": 221,
497 // CHECK-NEXT:        "col": 30,
498 // CHECK-NEXT:        "tokLen": 2
499 // CHECK-NEXT:       }
500 // CHECK-NEXT:      },
501 // CHECK-NEXT:      "name": "Uy",
502 // CHECK-NEXT:      "tagUsed": "typename",
503 // CHECK-NEXT:      "depth": 0,
504 // CHECK-NEXT:      "index": 1
505 // CHECK-NEXT:     },
506 // CHECK-NEXT:     {
507 // CHECK-NEXT:      "id": "0x{{.*}}",
508 // CHECK-NEXT:      "kind": "FunctionDecl",
509 // CHECK-NEXT:      "loc": {
510 // CHECK-NEXT:       "offset": 230,
511 // CHECK-NEXT:       "line": 10,
512 // CHECK-NEXT:       "col": 6,
513 // CHECK-NEXT:       "tokLen": 1
514 // CHECK-NEXT:      },
515 // CHECK-NEXT:      "range": {
516 // CHECK-NEXT:       "begin": {
517 // CHECK-NEXT:        "offset": 225,
518 // CHECK-NEXT:        "col": 1,
519 // CHECK-NEXT:        "tokLen": 4
520 // CHECK-NEXT:       },
521 // CHECK-NEXT:       "end": {
522 // CHECK-NEXT:        "offset": 234,
523 // CHECK-NEXT:        "col": 10,
524 // CHECK-NEXT:        "tokLen": 1
525 // CHECK-NEXT:       }
526 // CHECK-NEXT:      },
527 // CHECK-NEXT:      "name": "c",
528 // CHECK-NEXT:      "type": {
529 // CHECK-NEXT:       "qualType": "void (Ty)"
530 // CHECK-NEXT:      },
531 // CHECK-NEXT:      "inner": [
532 // CHECK-NEXT:       {
533 // CHECK-NEXT:        "id": "0x{{.*}}",
534 // CHECK-NEXT:        "kind": "ParmVarDecl",
535 // CHECK-NEXT:        "loc": {
536 // CHECK-NEXT:         "offset": 234,
537 // CHECK-NEXT:         "col": 10,
538 // CHECK-NEXT:         "tokLen": 1
539 // CHECK-NEXT:        },
540 // CHECK-NEXT:        "range": {
541 // CHECK-NEXT:         "begin": {
542 // CHECK-NEXT:          "offset": 232,
543 // CHECK-NEXT:          "col": 8,
544 // CHECK-NEXT:          "tokLen": 2
545 // CHECK-NEXT:         },
546 // CHECK-NEXT:         "end": {
547 // CHECK-NEXT:          "offset": 232,
548 // CHECK-NEXT:          "col": 8,
549 // CHECK-NEXT:          "tokLen": 2
550 // CHECK-NEXT:         }
551 // CHECK-NEXT:        },
552 // CHECK-NEXT:        "type": {
553 // CHECK-NEXT:         "qualType": "Ty"
554 // CHECK-NEXT:        }
555 // CHECK-NEXT:       }
556 // CHECK-NEXT:      ]
557 // CHECK-NEXT:     },
558 // CHECK-NEXT:     {
559 // CHECK-NEXT:      "id": "0x{{.*}}",
560 // CHECK-NEXT:      "kind": "FunctionDecl",
561 // CHECK-NEXT:      "name": "c",
562 // CHECK-NEXT:      "type": {
563 // CHECK-NEXT:       "qualType": "void (float)"
564 // CHECK-NEXT:      }
565 // CHECK-NEXT:     }
566 // CHECK-NEXT:    ]
567 // CHECK-NEXT:   },
568 // CHECK-NEXT:   {
569 // CHECK-NEXT:    "id": "0x{{.*}}",
570 // CHECK-NEXT:    "kind": "FunctionDecl",
571 // CHECK-NEXT:    "loc": {
572 // CHECK-NEXT:     "offset": 255,
573 // CHECK-NEXT:     "line": 13,
574 // CHECK-NEXT:     "col": 6,
575 // CHECK-NEXT:     "tokLen": 1
576 // CHECK-NEXT:    },
577 // CHECK-NEXT:    "range": {
578 // CHECK-NEXT:     "begin": {
579 // CHECK-NEXT:      "offset": 238,
580 // CHECK-NEXT:      "line": 12,
581 // CHECK-NEXT:      "col": 1,
582 // CHECK-NEXT:      "tokLen": 8
583 // CHECK-NEXT:     },
584 // CHECK-NEXT:     "end": {
585 // CHECK-NEXT:      "offset": 274,
586 // CHECK-NEXT:      "line": 13,
587 // CHECK-NEXT:      "col": 25,
588 // CHECK-NEXT:      "tokLen": 1
589 // CHECK-NEXT:     }
590 // CHECK-NEXT:    },
591 // CHECK-NEXT:    "previousDecl": "0x{{.*}}",
592 // CHECK-NEXT:    "name": "c",
593 // CHECK-NEXT:    "mangledName": "_Z1cIfiEvT_",
594 // CHECK-NEXT:    "type": {
595 // CHECK-NEXT:     "qualType": "void (float)"
596 // CHECK-NEXT:    },
597 // CHECK-NEXT:    "inner": [
598 // CHECK-NEXT:     {
599 // CHECK-NEXT:      "kind": "TemplateArgument",
600 // CHECK-NEXT:      "type": {
601 // CHECK-NEXT:       "qualType": "float"
602 // CHECK-NEXT:      },
603 // CHECK-NEXT:      "inner": [
604 // CHECK-NEXT:       {
605 // CHECK-NEXT:        "id": "0x{{.*}}",
606 // CHECK-NEXT:        "kind": "BuiltinType",
607 // CHECK-NEXT:        "type": {
608 // CHECK-NEXT:         "qualType": "float"
609 // CHECK-NEXT:        }
610 // CHECK-NEXT:       }
611 // CHECK-NEXT:      ]
612 // CHECK-NEXT:     },
613 // CHECK-NEXT:     {
614 // CHECK-NEXT:      "kind": "TemplateArgument",
615 // CHECK-NEXT:      "type": {
616 // CHECK-NEXT:       "qualType": "int"
617 // CHECK-NEXT:      },
618 // CHECK-NEXT:      "inner": [
619 // CHECK-NEXT:       {
620 // CHECK-NEXT:        "id": "0x{{.*}}",
621 // CHECK-NEXT:        "kind": "BuiltinType",
622 // CHECK-NEXT:        "type": {
623 // CHECK-NEXT:         "qualType": "int"
624 // CHECK-NEXT:        }
625 // CHECK-NEXT:       }
626 // CHECK-NEXT:      ]
627 // CHECK-NEXT:     },
628 // CHECK-NEXT:     {
629 // CHECK-NEXT:      "id": "0x{{.*}}",
630 // CHECK-NEXT:      "kind": "ParmVarDecl",
631 // CHECK-NEXT:      "loc": {
632 // CHECK-NEXT:       "offset": 274,
633 // CHECK-NEXT:       "col": 25,
634 // CHECK-NEXT:       "tokLen": 1
635 // CHECK-NEXT:      },
636 // CHECK-NEXT:      "range": {
637 // CHECK-NEXT:       "begin": {
638 // CHECK-NEXT:        "offset": 269,
639 // CHECK-NEXT:        "col": 20,
640 // CHECK-NEXT:        "tokLen": 5
641 // CHECK-NEXT:       },
642 // CHECK-NEXT:       "end": {
643 // CHECK-NEXT:        "offset": 269,
644 // CHECK-NEXT:        "col": 20,
645 // CHECK-NEXT:        "tokLen": 5
646 // CHECK-NEXT:       }
647 // CHECK-NEXT:      },
648 // CHECK-NEXT:      "type": {
649 // CHECK-NEXT:       "qualType": "float"
650 // CHECK-NEXT:      }
651 // CHECK-NEXT:     }
652 // CHECK-NEXT:    ]
653 // CHECK-NEXT:   },
654 // CHECK-NEXT:   {
655 // CHECK-NEXT:    "id": "0x{{.*}}",
656 // CHECK-NEXT:    "kind": "FunctionTemplateDecl",
657 // CHECK-NEXT:    "loc": {
658 // CHECK-NEXT:     "offset": 338,
659 // CHECK-NEXT:     "line": 16,
660 // CHECK-NEXT:     "col": 6,
661 // CHECK-NEXT:     "tokLen": 1
662 // CHECK-NEXT:    },
663 // CHECK-NEXT:    "range": {
664 // CHECK-NEXT:     "begin": {
665 // CHECK-NEXT:      "offset": 278,
666 // CHECK-NEXT:      "line": 15,
667 // CHECK-NEXT:      "col": 1,
668 // CHECK-NEXT:      "tokLen": 8
669 // CHECK-NEXT:     },
670 // CHECK-NEXT:     "end": {
671 // CHECK-NEXT:      "offset": 350,
672 // CHECK-NEXT:      "line": 16,
673 // CHECK-NEXT:      "col": 18,
674 // CHECK-NEXT:      "tokLen": 1
675 // CHECK-NEXT:     }
676 // CHECK-NEXT:    },
677 // CHECK-NEXT:    "name": "d",
678 // CHECK-NEXT:    "inner": [
679 // CHECK-NEXT:     {
680 // CHECK-NEXT:      "id": "0x{{.*}}",
681 // CHECK-NEXT:      "kind": "TemplateTypeParmDecl",
682 // CHECK-NEXT:      "loc": {
683 // CHECK-NEXT:       "offset": 297,
684 // CHECK-NEXT:       "line": 15,
685 // CHECK-NEXT:       "col": 20,
686 // CHECK-NEXT:       "tokLen": 2
687 // CHECK-NEXT:      },
688 // CHECK-NEXT:      "range": {
689 // CHECK-NEXT:       "begin": {
690 // CHECK-NEXT:        "offset": 288,
691 // CHECK-NEXT:        "col": 11,
692 // CHECK-NEXT:        "tokLen": 8
693 // CHECK-NEXT:       },
694 // CHECK-NEXT:       "end": {
695 // CHECK-NEXT:        "offset": 297,
696 // CHECK-NEXT:        "col": 20,
697 // CHECK-NEXT:        "tokLen": 2
698 // CHECK-NEXT:       }
699 // CHECK-NEXT:      },
700 // CHECK-NEXT:      "isReferenced": true,
701 // CHECK-NEXT:      "name": "Ty",
702 // CHECK-NEXT:      "tagUsed": "typename",
703 // CHECK-NEXT:      "depth": 0,
704 // CHECK-NEXT:      "index": 0
705 // CHECK-NEXT:     },
706 // CHECK-NEXT:     {
707 // CHECK-NEXT:      "id": "0x{{.*}}",
708 // CHECK-NEXT:      "kind": "TemplateTemplateParmDecl",
709 // CHECK-NEXT:      "loc": {
710 // CHECK-NEXT:       "offset": 329,
711 // CHECK-NEXT:       "col": 52,
712 // CHECK-NEXT:       "tokLen": 2
713 // CHECK-NEXT:      },
714 // CHECK-NEXT:      "range": {
715 // CHECK-NEXT:       "begin": {
716 // CHECK-NEXT:        "offset": 301,
717 // CHECK-NEXT:        "col": 24,
718 // CHECK-NEXT:        "tokLen": 8
719 // CHECK-NEXT:       },
720 // CHECK-NEXT:       "end": {
721 // CHECK-NEXT:        "offset": 329,
722 // CHECK-NEXT:        "col": 52,
723 // CHECK-NEXT:        "tokLen": 2
724 // CHECK-NEXT:       }
725 // CHECK-NEXT:      },
726 // CHECK-NEXT:      "name": "Uy",
727 // CHECK-NEXT:      "depth": 0,
728 // CHECK-NEXT:      "index": 1,
729 // CHECK-NEXT:      "inner": [
730 // CHECK-NEXT:       {
731 // CHECK-NEXT:        "id": "0x{{.*}}",
732 // CHECK-NEXT:        "kind": "TemplateTypeParmDecl",
733 // CHECK-NEXT:        "loc": {
734 // CHECK-NEXT:         "offset": 318,
735 // CHECK-NEXT:         "col": 41,
736 // CHECK-NEXT:         "tokLen": 1
737 // CHECK-NEXT:        },
738 // CHECK-NEXT:        "range": {
739 // CHECK-NEXT:         "begin": {
740 // CHECK-NEXT:          "offset": 310,
741 // CHECK-NEXT:          "col": 33,
742 // CHECK-NEXT:          "tokLen": 8
743 // CHECK-NEXT:         },
744 // CHECK-NEXT:         "end": {
745 // CHECK-NEXT:          "offset": 310,
746 // CHECK-NEXT:          "col": 33,
747 // CHECK-NEXT:          "tokLen": 8
748 // CHECK-NEXT:         }
749 // CHECK-NEXT:        },
750 // CHECK-NEXT:        "tagUsed": "typename",
751 // CHECK-NEXT:        "depth": 1,
752 // CHECK-NEXT:        "index": 0
753 // CHECK-NEXT:       }
754 // CHECK-NEXT:      ]
755 // CHECK-NEXT:     },
756 // CHECK-NEXT:     {
757 // CHECK-NEXT:      "id": "0x{{.*}}",
758 // CHECK-NEXT:      "kind": "FunctionDecl",
759 // CHECK-NEXT:      "loc": {
760 // CHECK-NEXT:       "offset": 338,
761 // CHECK-NEXT:       "line": 16,
762 // CHECK-NEXT:       "col": 6,
763 // CHECK-NEXT:       "tokLen": 1
764 // CHECK-NEXT:      },
765 // CHECK-NEXT:      "range": {
766 // CHECK-NEXT:       "begin": {
767 // CHECK-NEXT:        "offset": 333,
768 // CHECK-NEXT:        "col": 1,
769 // CHECK-NEXT:        "tokLen": 4
770 // CHECK-NEXT:       },
771 // CHECK-NEXT:       "end": {
772 // CHECK-NEXT:        "offset": 350,
773 // CHECK-NEXT:        "col": 18,
774 // CHECK-NEXT:        "tokLen": 1
775 // CHECK-NEXT:       }
776 // CHECK-NEXT:      },
777 // CHECK-NEXT:      "name": "d",
778 // CHECK-NEXT:      "type": {
779 // CHECK-NEXT:       "qualType": "void (Ty, Uy<Ty>)"
780 // CHECK-NEXT:      },
781 // CHECK-NEXT:      "inner": [
782 // CHECK-NEXT:       {
783 // CHECK-NEXT:        "id": "0x{{.*}}",
784 // CHECK-NEXT:        "kind": "ParmVarDecl",
785 // CHECK-NEXT:        "loc": {
786 // CHECK-NEXT:         "offset": 342,
787 // CHECK-NEXT:         "col": 10,
788 // CHECK-NEXT:         "tokLen": 1
789 // CHECK-NEXT:        },
790 // CHECK-NEXT:        "range": {
791 // CHECK-NEXT:         "begin": {
792 // CHECK-NEXT:          "offset": 340,
793 // CHECK-NEXT:          "col": 8,
794 // CHECK-NEXT:          "tokLen": 2
795 // CHECK-NEXT:         },
796 // CHECK-NEXT:         "end": {
797 // CHECK-NEXT:          "offset": 340,
798 // CHECK-NEXT:          "col": 8,
799 // CHECK-NEXT:          "tokLen": 2
800 // CHECK-NEXT:         }
801 // CHECK-NEXT:        },
802 // CHECK-NEXT:        "type": {
803 // CHECK-NEXT:         "qualType": "Ty"
804 // CHECK-NEXT:        }
805 // CHECK-NEXT:       },
806 // CHECK-NEXT:       {
807 // CHECK-NEXT:        "id": "0x{{.*}}",
808 // CHECK-NEXT:        "kind": "ParmVarDecl",
809 // CHECK-NEXT:        "loc": {
810 // CHECK-NEXT:         "offset": 350,
811 // CHECK-NEXT:         "col": 18,
812 // CHECK-NEXT:         "tokLen": 1
813 // CHECK-NEXT:        },
814 // CHECK-NEXT:        "range": {
815 // CHECK-NEXT:         "begin": {
816 // CHECK-NEXT:          "offset": 344,
817 // CHECK-NEXT:          "col": 12,
818 // CHECK-NEXT:          "tokLen": 2
819 // CHECK-NEXT:         },
820 // CHECK-NEXT:         "end": {
821 // CHECK-NEXT:          "offset": 349,
822 // CHECK-NEXT:          "col": 17,
823 // CHECK-NEXT:          "tokLen": 1
824 // CHECK-NEXT:         }
825 // CHECK-NEXT:        },
826 // CHECK-NEXT:        "type": {
827 // CHECK-NEXT:         "qualType": "Uy<Ty>"
828 // CHECK-NEXT:        }
829 // CHECK-NEXT:       }
830 // CHECK-NEXT:      ]
831 // CHECK-NEXT:     }
832 // CHECK-NEXT:    ]
833 // CHECK-NEXT:   },
834 // CHECK-NEXT:   {
835 // CHECK-NEXT:    "id": "0x{{.*}}",
836 // CHECK-NEXT:    "kind": "FunctionTemplateDecl",
837 // CHECK-NEXT:    "loc": {
838 // CHECK-NEXT:     "offset": 379,
839 // CHECK-NEXT:     "line": 19,
840 // CHECK-NEXT:     "col": 6,
841 // CHECK-NEXT:     "tokLen": 1
842 // CHECK-NEXT:    },
843 // CHECK-NEXT:    "range": {
844 // CHECK-NEXT:     "begin": {
845 // CHECK-NEXT:      "offset": 354,
846 // CHECK-NEXT:      "line": 18,
847 // CHECK-NEXT:      "col": 1,
848 // CHECK-NEXT:      "tokLen": 8
849 // CHECK-NEXT:     },
850 // CHECK-NEXT:     "end": {
851 // CHECK-NEXT:      "offset": 383,
852 // CHECK-NEXT:      "line": 19,
853 // CHECK-NEXT:      "col": 10,
854 // CHECK-NEXT:      "tokLen": 1
855 // CHECK-NEXT:     }
856 // CHECK-NEXT:    },
857 // CHECK-NEXT:    "name": "e",
858 // CHECK-NEXT:    "inner": [
859 // CHECK-NEXT:     {
860 // CHECK-NEXT:      "id": "0x{{.*}}",
861 // CHECK-NEXT:      "kind": "TemplateTypeParmDecl",
862 // CHECK-NEXT:      "loc": {
863 // CHECK-NEXT:       "offset": 370,
864 // CHECK-NEXT:       "line": 18,
865 // CHECK-NEXT:       "col": 17,
866 // CHECK-NEXT:       "tokLen": 2
867 // CHECK-NEXT:      },
868 // CHECK-NEXT:      "range": {
869 // CHECK-NEXT:       "begin": {
870 // CHECK-NEXT:        "offset": 364,
871 // CHECK-NEXT:        "col": 11,
872 // CHECK-NEXT:        "tokLen": 5
873 // CHECK-NEXT:       },
874 // CHECK-NEXT:       "end": {
875 // CHECK-NEXT:        "offset": 370,
876 // CHECK-NEXT:        "col": 17,
877 // CHECK-NEXT:        "tokLen": 2
878 // CHECK-NEXT:       }
879 // CHECK-NEXT:      },
880 // CHECK-NEXT:      "isReferenced": true,
881 // CHECK-NEXT:      "name": "Ty",
882 // CHECK-NEXT:      "tagUsed": "class",
883 // CHECK-NEXT:      "depth": 0,
884 // CHECK-NEXT:      "index": 0
885 // CHECK-NEXT:     },
886 // CHECK-NEXT:     {
887 // CHECK-NEXT:      "id": "0x{{.*}}",
888 // CHECK-NEXT:      "kind": "FunctionDecl",
889 // CHECK-NEXT:      "loc": {
890 // CHECK-NEXT:       "offset": 379,
891 // CHECK-NEXT:       "line": 19,
892 // CHECK-NEXT:       "col": 6,
893 // CHECK-NEXT:       "tokLen": 1
894 // CHECK-NEXT:      },
895 // CHECK-NEXT:      "range": {
896 // CHECK-NEXT:       "begin": {
897 // CHECK-NEXT:        "offset": 374,
898 // CHECK-NEXT:        "col": 1,
899 // CHECK-NEXT:        "tokLen": 4
900 // CHECK-NEXT:       },
901 // CHECK-NEXT:       "end": {
902 // CHECK-NEXT:        "offset": 383,
903 // CHECK-NEXT:        "col": 10,
904 // CHECK-NEXT:        "tokLen": 1
905 // CHECK-NEXT:       }
906 // CHECK-NEXT:      },
907 // CHECK-NEXT:      "name": "e",
908 // CHECK-NEXT:      "type": {
909 // CHECK-NEXT:       "qualType": "void (Ty)"
910 // CHECK-NEXT:      },
911 // CHECK-NEXT:      "inner": [
912 // CHECK-NEXT:       {
913 // CHECK-NEXT:        "id": "0x{{.*}}",
914 // CHECK-NEXT:        "kind": "ParmVarDecl",
915 // CHECK-NEXT:        "loc": {
916 // CHECK-NEXT:         "offset": 383,
917 // CHECK-NEXT:         "col": 10,
918 // CHECK-NEXT:         "tokLen": 1
919 // CHECK-NEXT:        },
920 // CHECK-NEXT:        "range": {
921 // CHECK-NEXT:         "begin": {
922 // CHECK-NEXT:          "offset": 381,
923 // CHECK-NEXT:          "col": 8,
924 // CHECK-NEXT:          "tokLen": 2
925 // CHECK-NEXT:         },
926 // CHECK-NEXT:         "end": {
927 // CHECK-NEXT:          "offset": 381,
928 // CHECK-NEXT:          "col": 8,
929 // CHECK-NEXT:          "tokLen": 2
930 // CHECK-NEXT:         }
931 // CHECK-NEXT:        },
932 // CHECK-NEXT:        "type": {
933 // CHECK-NEXT:         "qualType": "Ty"
934 // CHECK-NEXT:        }
935 // CHECK-NEXT:       }
936 // CHECK-NEXT:      ]
937 // CHECK-NEXT:     }
938 // CHECK-NEXT:    ]
939 // CHECK-NEXT:   },
940 // CHECK-NEXT:   {
941 // CHECK-NEXT:    "id": "0x{{.*}}",
942 // CHECK-NEXT:    "kind": "FunctionTemplateDecl",
943 // CHECK-NEXT:    "loc": {
944 // CHECK-NEXT:     "offset": 409,
945 // CHECK-NEXT:     "line": 22,
946 // CHECK-NEXT:     "col": 6,
947 // CHECK-NEXT:     "tokLen": 1
948 // CHECK-NEXT:    },
949 // CHECK-NEXT:    "range": {
950 // CHECK-NEXT:     "begin": {
951 // CHECK-NEXT:      "offset": 387,
952 // CHECK-NEXT:      "line": 21,
953 // CHECK-NEXT:      "col": 1,
954 // CHECK-NEXT:      "tokLen": 8
955 // CHECK-NEXT:     },
956 // CHECK-NEXT:     "end": {
957 // CHECK-NEXT:      "offset": 420,
958 // CHECK-NEXT:      "line": 22,
959 // CHECK-NEXT:      "col": 17,
960 // CHECK-NEXT:      "tokLen": 1
961 // CHECK-NEXT:     }
962 // CHECK-NEXT:    },
963 // CHECK-NEXT:    "name": "f",
964 // CHECK-NEXT:    "inner": [
965 // CHECK-NEXT:     {
966 // CHECK-NEXT:      "id": "0x{{.*}}",
967 // CHECK-NEXT:      "kind": "NonTypeTemplateParmDecl",
968 // CHECK-NEXT:      "loc": {
969 // CHECK-NEXT:       "offset": 401,
970 // CHECK-NEXT:       "line": 21,
971 // CHECK-NEXT:       "col": 15,
972 // CHECK-NEXT:       "tokLen": 1
973 // CHECK-NEXT:      },
974 // CHECK-NEXT:      "range": {
975 // CHECK-NEXT:       "begin": {
976 // CHECK-NEXT:        "offset": 397,
977 // CHECK-NEXT:        "col": 11,
978 // CHECK-NEXT:        "tokLen": 3
979 // CHECK-NEXT:       },
980 // CHECK-NEXT:       "end": {
981 // CHECK-NEXT:        "offset": 401,
982 // CHECK-NEXT:        "col": 15,
983 // CHECK-NEXT:        "tokLen": 1
984 // CHECK-NEXT:       }
985 // CHECK-NEXT:      },
986 // CHECK-NEXT:      "isReferenced": true,
987 // CHECK-NEXT:      "name": "N",
988 // CHECK-NEXT:      "type": {
989 // CHECK-NEXT:       "qualType": "int"
990 // CHECK-NEXT:      },
991 // CHECK-NEXT:      "depth": 0,
992 // CHECK-NEXT:      "index": 0
993 // CHECK-NEXT:     },
994 // CHECK-NEXT:     {
995 // CHECK-NEXT:      "id": "0x{{.*}}",
996 // CHECK-NEXT:      "kind": "FunctionDecl",
997 // CHECK-NEXT:      "loc": {
998 // CHECK-NEXT:       "offset": 409,
999 // CHECK-NEXT:       "line": 22,
1000 // CHECK-NEXT:       "col": 6,
1001 // CHECK-NEXT:       "tokLen": 1
1002 // CHECK-NEXT:      },
1003 // CHECK-NEXT:      "range": {
1004 // CHECK-NEXT:       "begin": {
1005 // CHECK-NEXT:        "offset": 404,
1006 // CHECK-NEXT:        "col": 1,
1007 // CHECK-NEXT:        "tokLen": 4
1008 // CHECK-NEXT:       },
1009 // CHECK-NEXT:       "end": {
1010 // CHECK-NEXT:        "offset": 420,
1011 // CHECK-NEXT:        "col": 17,
1012 // CHECK-NEXT:        "tokLen": 1
1013 // CHECK-NEXT:       }
1014 // CHECK-NEXT:      },
1015 // CHECK-NEXT:      "name": "f",
1016 // CHECK-NEXT:      "type": {
1017 // CHECK-NEXT:       "qualType": "void (int)"
1018 // CHECK-NEXT:      },
1019 // CHECK-NEXT:      "inner": [
1020 // CHECK-NEXT:       {
1021 // CHECK-NEXT:        "id": "0x{{.*}}",
1022 // CHECK-NEXT:        "kind": "ParmVarDecl",
1023 // CHECK-NEXT:        "loc": {
1024 // CHECK-NEXT:         "offset": 415,
1025 // CHECK-NEXT:         "col": 12,
1026 // CHECK-NEXT:         "tokLen": 1
1027 // CHECK-NEXT:        },
1028 // CHECK-NEXT:        "range": {
1029 // CHECK-NEXT:         "begin": {
1030 // CHECK-NEXT:          "offset": 411,
1031 // CHECK-NEXT:          "col": 8,
1032 // CHECK-NEXT:          "tokLen": 3
1033 // CHECK-NEXT:         },
1034 // CHECK-NEXT:         "end": {
1035 // CHECK-NEXT:          "offset": 419,
1036 // CHECK-NEXT:          "col": 16,
1037 // CHECK-NEXT:          "tokLen": 1
1038 // CHECK-NEXT:         }
1039 // CHECK-NEXT:        },
1040 // CHECK-NEXT:        "name": "i",
1041 // CHECK-NEXT:        "mangledName": "_ZZ1fiE1i",
1042 // CHECK-NEXT:        "type": {
1043 // CHECK-NEXT:         "qualType": "int"
1044 // CHECK-NEXT:        },
1045 // CHECK-NEXT:        "init": "c",
1046 // CHECK-NEXT:        "inner": [
1047 // CHECK-NEXT:         {
1048 // CHECK-NEXT:          "id": "0x{{.*}}",
1049 // CHECK-NEXT:          "kind": "DeclRefExpr",
1050 // CHECK-NEXT:          "range": {
1051 // CHECK-NEXT:           "begin": {
1052 // CHECK-NEXT:            "offset": 419,
1053 // CHECK-NEXT:            "col": 16,
1054 // CHECK-NEXT:            "tokLen": 1
1055 // CHECK-NEXT:           },
1056 // CHECK-NEXT:           "end": {
1057 // CHECK-NEXT:            "offset": 419,
1058 // CHECK-NEXT:            "col": 16,
1059 // CHECK-NEXT:            "tokLen": 1
1060 // CHECK-NEXT:           }
1061 // CHECK-NEXT:          },
1062 // CHECK-NEXT:          "type": {
1063 // CHECK-NEXT:           "qualType": "int"
1064 // CHECK-NEXT:          },
1065 // CHECK-NEXT:          "valueCategory": "prvalue",
1066 // CHECK-NEXT:          "referencedDecl": {
1067 // CHECK-NEXT:           "id": "0x{{.*}}",
1068 // CHECK-NEXT:           "kind": "NonTypeTemplateParmDecl",
1069 // CHECK-NEXT:           "name": "N",
1070 // CHECK-NEXT:           "type": {
1071 // CHECK-NEXT:            "qualType": "int"
1072 // CHECK-NEXT:           }
1073 // CHECK-NEXT:          }
1074 // CHECK-NEXT:         }
1075 // CHECK-NEXT:        ]
1076 // CHECK-NEXT:       }
1077 // CHECK-NEXT:      ]
1078 // CHECK-NEXT:     }
1079 // CHECK-NEXT:    ]
1080 // CHECK-NEXT:   },
1081 // CHECK-NEXT:   {
1082 // CHECK-NEXT:    "id": "0x{{.*}}",
1083 // CHECK-NEXT:    "kind": "FunctionTemplateDecl",
1084 // CHECK-NEXT:    "loc": {
1085 // CHECK-NEXT:     "offset": 458,
1086 // CHECK-NEXT:     "line": 25,
1087 // CHECK-NEXT:     "col": 6,
1088 // CHECK-NEXT:     "tokLen": 1
1089 // CHECK-NEXT:    },
1090 // CHECK-NEXT:    "range": {
1091 // CHECK-NEXT:     "begin": {
1092 // CHECK-NEXT:      "offset": 424,
1093 // CHECK-NEXT:      "line": 24,
1094 // CHECK-NEXT:      "col": 1,
1095 // CHECK-NEXT:      "tokLen": 8
1096 // CHECK-NEXT:     },
1097 // CHECK-NEXT:     "end": {
1098 // CHECK-NEXT:      "offset": 462,
1099 // CHECK-NEXT:      "line": 25,
1100 // CHECK-NEXT:      "col": 10,
1101 // CHECK-NEXT:      "tokLen": 1
1102 // CHECK-NEXT:     }
1103 // CHECK-NEXT:    },
1104 // CHECK-NEXT:    "name": "g",
1105 // CHECK-NEXT:    "inner": [
1106 // CHECK-NEXT:     {
1107 // CHECK-NEXT:      "id": "0x{{.*}}",
1108 // CHECK-NEXT:      "kind": "TemplateTypeParmDecl",
1109 // CHECK-NEXT:      "loc": {
1110 // CHECK-NEXT:       "offset": 443,
1111 // CHECK-NEXT:       "line": 24,
1112 // CHECK-NEXT:       "col": 20,
1113 // CHECK-NEXT:       "tokLen": 2
1114 // CHECK-NEXT:      },
1115 // CHECK-NEXT:      "range": {
1116 // CHECK-NEXT:       "begin": {
1117 // CHECK-NEXT:        "offset": 434,
1118 // CHECK-NEXT:        "col": 11,
1119 // CHECK-NEXT:        "tokLen": 8
1120 // CHECK-NEXT:       },
1121 // CHECK-NEXT:       "end": {
1122 // CHECK-NEXT:        "offset": 448,
1123 // CHECK-NEXT:        "col": 25,
1124 // CHECK-NEXT:        "tokLen": 3
1125 // CHECK-NEXT:       }
1126 // CHECK-NEXT:      },
1127 // CHECK-NEXT:      "isReferenced": true,
1128 // CHECK-NEXT:      "name": "Ty",
1129 // CHECK-NEXT:      "tagUsed": "typename",
1130 // CHECK-NEXT:      "depth": 0,
1131 // CHECK-NEXT:      "index": 0,
1132 // CHECK-NEXT:      "defaultArg": {
1133 // CHECK-NEXT:       "kind": "TemplateArgument",
1134 // CHECK-NEXT:       "type": {
1135 // CHECK-NEXT:        "qualType": "int"
1136 // CHECK-NEXT:       }
1137 // CHECK-NEXT:      },
1138 // CHECK-NEXT:      "inner": [
1139 // CHECK-NEXT:       {
1140 // CHECK-NEXT:        "kind": "TemplateArgument",
1141 // CHECK-NEXT:        "type": {
1142 // CHECK-NEXT:         "qualType": "int"
1143 // CHECK-NEXT:        },
1144 // CHECK-NEXT:        "inner": [
1145 // CHECK-NEXT:         {
1146 // CHECK-NEXT:          "id": "0x{{.*}}",
1147 // CHECK-NEXT:          "kind": "BuiltinType",
1148 // CHECK-NEXT:          "type": {
1149 // CHECK-NEXT:           "qualType": "int"
1150 // CHECK-NEXT:          }
1151 // CHECK-NEXT:         }
1152 // CHECK-NEXT:        ]
1153 // CHECK-NEXT:       }
1154 // CHECK-NEXT:      ]
1155 // CHECK-NEXT:     },
1156 // CHECK-NEXT:     {
1157 // CHECK-NEXT:      "id": "0x{{.*}}",
1158 // CHECK-NEXT:      "kind": "FunctionDecl",
1159 // CHECK-NEXT:      "loc": {
1160 // CHECK-NEXT:       "offset": 458,
1161 // CHECK-NEXT:       "line": 25,
1162 // CHECK-NEXT:       "col": 6,
1163 // CHECK-NEXT:       "tokLen": 1
1164 // CHECK-NEXT:      },
1165 // CHECK-NEXT:      "range": {
1166 // CHECK-NEXT:       "begin": {
1167 // CHECK-NEXT:        "offset": 453,
1168 // CHECK-NEXT:        "col": 1,
1169 // CHECK-NEXT:        "tokLen": 4
1170 // CHECK-NEXT:       },
1171 // CHECK-NEXT:       "end": {
1172 // CHECK-NEXT:        "offset": 462,
1173 // CHECK-NEXT:        "col": 10,
1174 // CHECK-NEXT:        "tokLen": 1
1175 // CHECK-NEXT:       }
1176 // CHECK-NEXT:      },
1177 // CHECK-NEXT:      "name": "g",
1178 // CHECK-NEXT:      "type": {
1179 // CHECK-NEXT:       "qualType": "void (Ty)"
1180 // CHECK-NEXT:      },
1181 // CHECK-NEXT:      "inner": [
1182 // CHECK-NEXT:       {
1183 // CHECK-NEXT:        "id": "0x{{.*}}",
1184 // CHECK-NEXT:        "kind": "ParmVarDecl",
1185 // CHECK-NEXT:        "loc": {
1186 // CHECK-NEXT:         "offset": 462,
1187 // CHECK-NEXT:         "col": 10,
1188 // CHECK-NEXT:         "tokLen": 1
1189 // CHECK-NEXT:        },
1190 // CHECK-NEXT:        "range": {
1191 // CHECK-NEXT:         "begin": {
1192 // CHECK-NEXT:          "offset": 460,
1193 // CHECK-NEXT:          "col": 8,
1194 // CHECK-NEXT:          "tokLen": 2
1195 // CHECK-NEXT:         },
1196 // CHECK-NEXT:         "end": {
1197 // CHECK-NEXT:          "offset": 460,
1198 // CHECK-NEXT:          "col": 8,
1199 // CHECK-NEXT:          "tokLen": 2
1200 // CHECK-NEXT:         }
1201 // CHECK-NEXT:        },
1202 // CHECK-NEXT:        "type": {
1203 // CHECK-NEXT:         "qualType": "Ty"
1204 // CHECK-NEXT:        }
1205 // CHECK-NEXT:       }
1206 // CHECK-NEXT:      ]
1207 // CHECK-NEXT:     }
1208 // CHECK-NEXT:    ]
1209 // CHECK-NEXT:   },
1210 // CHECK-NEXT:   {
1211 // CHECK-NEXT:    "id": "0x{{.*}}",
1212 // CHECK-NEXT:    "kind": "FunctionTemplateDecl",
1213 // CHECK-NEXT:    "loc": {
1214 // CHECK-NEXT:     "offset": 498,
1215 // CHECK-NEXT:     "line": 28,
1216 // CHECK-NEXT:     "col": 6,
1217 // CHECK-NEXT:     "tokLen": 1
1218 // CHECK-NEXT:    },
1219 // CHECK-NEXT:    "range": {
1220 // CHECK-NEXT:     "begin": {
1221 // CHECK-NEXT:      "offset": 466,
1222 // CHECK-NEXT:      "line": 27,
1223 // CHECK-NEXT:      "col": 1,
1224 // CHECK-NEXT:      "tokLen": 8
1225 // CHECK-NEXT:     },
1226 // CHECK-NEXT:     "end": {
1227 // CHECK-NEXT:      "offset": 500,
1228 // CHECK-NEXT:      "line": 28,
1229 // CHECK-NEXT:      "col": 8,
1230 // CHECK-NEXT:      "tokLen": 1
1231 // CHECK-NEXT:     }
1232 // CHECK-NEXT:    },
1233 // CHECK-NEXT:    "name": "h",
1234 // CHECK-NEXT:    "inner": [
1235 // CHECK-NEXT:     {
1236 // CHECK-NEXT:      "id": "0x{{.*}}",
1237 // CHECK-NEXT:      "kind": "TemplateTypeParmDecl",
1238 // CHECK-NEXT:      "loc": {
1239 // CHECK-NEXT:       "offset": 485,
1240 // CHECK-NEXT:       "line": 27,
1241 // CHECK-NEXT:       "col": 20,
1242 // CHECK-NEXT:       "tokLen": 1
1243 // CHECK-NEXT:      },
1244 // CHECK-NEXT:      "range": {
1245 // CHECK-NEXT:       "begin": {
1246 // CHECK-NEXT:        "offset": 476,
1247 // CHECK-NEXT:        "col": 11,
1248 // CHECK-NEXT:        "tokLen": 8
1249 // CHECK-NEXT:       },
1250 // CHECK-NEXT:       "end": {
1251 // CHECK-NEXT:        "offset": 487,
1252 // CHECK-NEXT:        "col": 22,
1253 // CHECK-NEXT:        "tokLen": 4
1254 // CHECK-NEXT:       }
1255 // CHECK-NEXT:      },
1256 // CHECK-NEXT:      "tagUsed": "typename",
1257 // CHECK-NEXT:      "depth": 0,
1258 // CHECK-NEXT:      "index": 0,
1259 // CHECK-NEXT:      "defaultArg": {
1260 // CHECK-NEXT:       "kind": "TemplateArgument",
1261 // CHECK-NEXT:       "type": {
1262 // CHECK-NEXT:        "qualType": "void"
1263 // CHECK-NEXT:       }
1264 // CHECK-NEXT:      },
1265 // CHECK-NEXT:      "inner": [
1266 // CHECK-NEXT:       {
1267 // CHECK-NEXT:        "kind": "TemplateArgument",
1268 // CHECK-NEXT:        "type": {
1269 // CHECK-NEXT:         "qualType": "void"
1270 // CHECK-NEXT:        },
1271 // CHECK-NEXT:        "inner": [
1272 // CHECK-NEXT:         {
1273 // CHECK-NEXT:          "id": "0x{{.*}}",
1274 // CHECK-NEXT:          "kind": "BuiltinType",
1275 // CHECK-NEXT:          "type": {
1276 // CHECK-NEXT:           "qualType": "void"
1277 // CHECK-NEXT:          }
1278 // CHECK-NEXT:         }
1279 // CHECK-NEXT:        ]
1280 // CHECK-NEXT:       }
1281 // CHECK-NEXT:      ]
1282 // CHECK-NEXT:     },
1283 // CHECK-NEXT:     {
1284 // CHECK-NEXT:      "id": "0x{{.*}}",
1285 // CHECK-NEXT:      "kind": "FunctionDecl",
1286 // CHECK-NEXT:      "loc": {
1287 // CHECK-NEXT:       "offset": 498,
1288 // CHECK-NEXT:       "line": 28,
1289 // CHECK-NEXT:       "col": 6,
1290 // CHECK-NEXT:       "tokLen": 1
1291 // CHECK-NEXT:      },
1292 // CHECK-NEXT:      "range": {
1293 // CHECK-NEXT:       "begin": {
1294 // CHECK-NEXT:        "offset": 493,
1295 // CHECK-NEXT:        "col": 1,
1296 // CHECK-NEXT:        "tokLen": 4
1297 // CHECK-NEXT:       },
1298 // CHECK-NEXT:       "end": {
1299 // CHECK-NEXT:        "offset": 500,
1300 // CHECK-NEXT:        "col": 8,
1301 // CHECK-NEXT:        "tokLen": 1
1302 // CHECK-NEXT:       }
1303 // CHECK-NEXT:      },
1304 // CHECK-NEXT:      "name": "h",
1305 // CHECK-NEXT:      "type": {
1306 // CHECK-NEXT:       "qualType": "void ()"
1307 // CHECK-NEXT:      }
1308 // CHECK-NEXT:     }
1309 // CHECK-NEXT:    ]
1310 // CHECK-NEXT:   },
1311 // CHECK-NEXT:   {
1312 // CHECK-NEXT:    "id": "0x{{.*}}",
1313 // CHECK-NEXT:    "kind": "ClassTemplateDecl",
1314 // CHECK-NEXT:    "loc": {
1315 // CHECK-NEXT:     "offset": 534,
1316 // CHECK-NEXT:     "line": 31,
1317 // CHECK-NEXT:     "col": 8,
1318 // CHECK-NEXT:     "tokLen": 1
1319 // CHECK-NEXT:    },
1320 // CHECK-NEXT:    "range": {
1321 // CHECK-NEXT:     "begin": {
1322 // CHECK-NEXT:      "offset": 504,
1323 // CHECK-NEXT:      "line": 30,
1324 // CHECK-NEXT:      "col": 1,
1325 // CHECK-NEXT:      "tokLen": 8
1326 // CHECK-NEXT:     },
1327 // CHECK-NEXT:     "end": {
1328 // CHECK-NEXT:      "offset": 537,
1329 // CHECK-NEXT:      "line": 31,
1330 // CHECK-NEXT:      "col": 11,
1331 // CHECK-NEXT:      "tokLen": 1
1332 // CHECK-NEXT:     }
1333 // CHECK-NEXT:    },
1334 // CHECK-NEXT:    "name": "R",
1335 // CHECK-NEXT:    "inner": [
1336 // CHECK-NEXT:     {
1337 // CHECK-NEXT:      "id": "0x{{.*}}",
1338 // CHECK-NEXT:      "kind": "TemplateTypeParmDecl",
1339 // CHECK-NEXT:      "loc": {
1340 // CHECK-NEXT:       "offset": 523,
1341 // CHECK-NEXT:       "line": 30,
1342 // CHECK-NEXT:       "col": 20,
1343 // CHECK-NEXT:       "tokLen": 2
1344 // CHECK-NEXT:      },
1345 // CHECK-NEXT:      "range": {
1346 // CHECK-NEXT:       "begin": {
1347 // CHECK-NEXT:        "offset": 514,
1348 // CHECK-NEXT:        "col": 11,
1349 // CHECK-NEXT:        "tokLen": 8
1350 // CHECK-NEXT:       },
1351 // CHECK-NEXT:       "end": {
1352 // CHECK-NEXT:        "offset": 523,
1353 // CHECK-NEXT:        "col": 20,
1354 // CHECK-NEXT:        "tokLen": 2
1355 // CHECK-NEXT:       }
1356 // CHECK-NEXT:      },
1357 // CHECK-NEXT:      "name": "Ty",
1358 // CHECK-NEXT:      "tagUsed": "typename",
1359 // CHECK-NEXT:      "depth": 0,
1360 // CHECK-NEXT:      "index": 0
1361 // CHECK-NEXT:     },
1362 // CHECK-NEXT:     {
1363 // CHECK-NEXT:      "id": "0x{{.*}}",
1364 // CHECK-NEXT:      "kind": "CXXRecordDecl",
1365 // CHECK-NEXT:      "loc": {
1366 // CHECK-NEXT:       "offset": 534,
1367 // CHECK-NEXT:       "line": 31,
1368 // CHECK-NEXT:       "col": 8,
1369 // CHECK-NEXT:       "tokLen": 1
1370 // CHECK-NEXT:      },
1371 // CHECK-NEXT:      "range": {
1372 // CHECK-NEXT:       "begin": {
1373 // CHECK-NEXT:        "offset": 527,
1374 // CHECK-NEXT:        "col": 1,
1375 // CHECK-NEXT:        "tokLen": 6
1376 // CHECK-NEXT:       },
1377 // CHECK-NEXT:       "end": {
1378 // CHECK-NEXT:        "offset": 537,
1379 // CHECK-NEXT:        "col": 11,
1380 // CHECK-NEXT:        "tokLen": 1
1381 // CHECK-NEXT:       }
1382 // CHECK-NEXT:      },
1383 // CHECK-NEXT:      "name": "R",
1384 // CHECK-NEXT:      "tagUsed": "struct",
1385 // CHECK-NEXT:      "completeDefinition": true,
1386 // CHECK-NEXT:      "definitionData": {
1387 // CHECK-NEXT:       "canConstDefaultInit": true,
1388 // CHECK-NEXT:       "copyAssign": {
1389 // CHECK-NEXT:        "hasConstParam": true,
1390 // CHECK-NEXT:        "implicitHasConstParam": true,
1391 // CHECK-NEXT:        "needsImplicit": true,
1392 // CHECK-NEXT:        "simple": true,
1393 // CHECK-NEXT:        "trivial": true
1394 // CHECK-NEXT:       },
1395 // CHECK-NEXT:       "copyCtor": {
1396 // CHECK-NEXT:        "hasConstParam": true,
1397 // CHECK-NEXT:        "implicitHasConstParam": true,
1398 // CHECK-NEXT:        "needsImplicit": true,
1399 // CHECK-NEXT:        "simple": true,
1400 // CHECK-NEXT:        "trivial": true
1401 // CHECK-NEXT:       },
1402 // CHECK-NEXT:       "defaultCtor": {
1403 // CHECK-NEXT:        "defaultedIsConstexpr": true,
1404 // CHECK-NEXT:        "exists": true,
1405 // CHECK-NEXT:        "isConstexpr": true,
1406 // CHECK-NEXT:        "needsImplicit": true,
1407 // CHECK-NEXT:        "trivial": true
1408 // CHECK-NEXT:       },
1409 // CHECK-NEXT:       "dtor": {
1410 // CHECK-NEXT:        "irrelevant": true,
1411 // CHECK-NEXT:        "needsImplicit": true,
1412 // CHECK-NEXT:        "simple": true,
1413 // CHECK-NEXT:        "trivial": true
1414 // CHECK-NEXT:       },
1415 // CHECK-NEXT:       "hasConstexprNonCopyMoveConstructor": true,
1416 // CHECK-NEXT:       "isAggregate": true,
1417 // CHECK-NEXT:       "isEmpty": true,
1418 // CHECK-NEXT:       "isLiteral": true,
1419 // CHECK-NEXT:       "isPOD": true,
1420 // CHECK-NEXT:       "isStandardLayout": true,
1421 // CHECK-NEXT:       "isTrivial": true,
1422 // CHECK-NEXT:       "isTriviallyCopyable": true,
1423 // CHECK-NEXT:       "moveAssign": {
1424 // CHECK-NEXT:        "exists": true,
1425 // CHECK-NEXT:        "needsImplicit": true,
1426 // CHECK-NEXT:        "simple": true,
1427 // CHECK-NEXT:        "trivial": true
1428 // CHECK-NEXT:       },
1429 // CHECK-NEXT:       "moveCtor": {
1430 // CHECK-NEXT:        "exists": true,
1431 // CHECK-NEXT:        "needsImplicit": true,
1432 // CHECK-NEXT:        "simple": true,
1433 // CHECK-NEXT:        "trivial": true
1434 // CHECK-NEXT:       }
1435 // CHECK-NEXT:      },
1436 // CHECK-NEXT:      "inner": [
1437 // CHECK-NEXT:       {
1438 // CHECK-NEXT:        "id": "0x{{.*}}",
1439 // CHECK-NEXT:        "kind": "CXXRecordDecl",
1440 // CHECK-NEXT:        "loc": {
1441 // CHECK-NEXT:         "offset": 534,
1442 // CHECK-NEXT:         "col": 8,
1443 // CHECK-NEXT:         "tokLen": 1
1444 // CHECK-NEXT:        },
1445 // CHECK-NEXT:        "range": {
1446 // CHECK-NEXT:         "begin": {
1447 // CHECK-NEXT:          "offset": 527,
1448 // CHECK-NEXT:          "col": 1,
1449 // CHECK-NEXT:          "tokLen": 6
1450 // CHECK-NEXT:         },
1451 // CHECK-NEXT:         "end": {
1452 // CHECK-NEXT:          "offset": 534,
1453 // CHECK-NEXT:          "col": 8,
1454 // CHECK-NEXT:          "tokLen": 1
1455 // CHECK-NEXT:         }
1456 // CHECK-NEXT:        },
1457 // CHECK-NEXT:        "isImplicit": true,
1458 // CHECK-NEXT:        "name": "R",
1459 // CHECK-NEXT:        "tagUsed": "struct"
1460 // CHECK-NEXT:       }
1461 // CHECK-NEXT:      ]
1462 // CHECK-NEXT:     },
1463 // CHECK-NEXT:     {
1464 // CHECK-NEXT:      "id": "0x{{.*}}",
1465 // CHECK-NEXT:      "kind": "ClassTemplateSpecializationDecl",
1466 // CHECK-NEXT:      "name": "R"
1467 // CHECK-NEXT:     }
1468 // CHECK-NEXT:    ]
1469 // CHECK-NEXT:   },
1470 // CHECK-NEXT:   {
1471 // CHECK-NEXT:    "id": "0x{{.*}}",
1472 // CHECK-NEXT:    "kind": "ClassTemplateSpecializationDecl",
1473 // CHECK-NEXT:    "loc": {
1474 // CHECK-NEXT:     "offset": 560,
1475 // CHECK-NEXT:     "line": 34,
1476 // CHECK-NEXT:     "col": 8,
1477 // CHECK-NEXT:     "tokLen": 1
1478 // CHECK-NEXT:    },
1479 // CHECK-NEXT:    "range": {
1480 // CHECK-NEXT:     "begin": {
1481 // CHECK-NEXT:      "offset": 541,
1482 // CHECK-NEXT:      "line": 33,
1483 // CHECK-NEXT:      "col": 1,
1484 // CHECK-NEXT:      "tokLen": 8
1485 // CHECK-NEXT:     },
1486 // CHECK-NEXT:     "end": {
1487 // CHECK-NEXT:      "offset": 568,
1488 // CHECK-NEXT:      "line": 34,
1489 // CHECK-NEXT:      "col": 16,
1490 // CHECK-NEXT:      "tokLen": 1
1491 // CHECK-NEXT:     }
1492 // CHECK-NEXT:    },
1493 // CHECK-NEXT:    "name": "R",
1494 // CHECK-NEXT:    "tagUsed": "struct",
1495 // CHECK-NEXT:    "completeDefinition": true,
1496 // CHECK-NEXT:    "definitionData": {
1497 // CHECK-NEXT:     "canConstDefaultInit": true,
1498 // CHECK-NEXT:     "canPassInRegisters": true,
1499 // CHECK-NEXT:     "copyAssign": {
1500 // CHECK-NEXT:      "hasConstParam": true,
1501 // CHECK-NEXT:      "implicitHasConstParam": true,
1502 // CHECK-NEXT:      "needsImplicit": true,
1503 // CHECK-NEXT:      "simple": true,
1504 // CHECK-NEXT:      "trivial": true
1505 // CHECK-NEXT:     },
1506 // CHECK-NEXT:     "copyCtor": {
1507 // CHECK-NEXT:      "hasConstParam": true,
1508 // CHECK-NEXT:      "implicitHasConstParam": true,
1509 // CHECK-NEXT:      "needsImplicit": true,
1510 // CHECK-NEXT:      "simple": true,
1511 // CHECK-NEXT:      "trivial": true
1512 // CHECK-NEXT:     },
1513 // CHECK-NEXT:     "defaultCtor": {
1514 // CHECK-NEXT:      "defaultedIsConstexpr": true,
1515 // CHECK-NEXT:      "exists": true,
1516 // CHECK-NEXT:      "isConstexpr": true,
1517 // CHECK-NEXT:      "needsImplicit": true,
1518 // CHECK-NEXT:      "trivial": true
1519 // CHECK-NEXT:     },
1520 // CHECK-NEXT:     "dtor": {
1521 // CHECK-NEXT:      "irrelevant": true,
1522 // CHECK-NEXT:      "needsImplicit": true,
1523 // CHECK-NEXT:      "simple": true,
1524 // CHECK-NEXT:      "trivial": true
1525 // CHECK-NEXT:     },
1526 // CHECK-NEXT:     "hasConstexprNonCopyMoveConstructor": true,
1527 // CHECK-NEXT:     "isAggregate": true,
1528 // CHECK-NEXT:     "isEmpty": true,
1529 // CHECK-NEXT:     "isLiteral": true,
1530 // CHECK-NEXT:     "isPOD": true,
1531 // CHECK-NEXT:     "isStandardLayout": true,
1532 // CHECK-NEXT:     "isTrivial": true,
1533 // CHECK-NEXT:     "isTriviallyCopyable": true,
1534 // CHECK-NEXT:     "moveAssign": {
1535 // CHECK-NEXT:      "exists": true,
1536 // CHECK-NEXT:      "needsImplicit": true,
1537 // CHECK-NEXT:      "simple": true,
1538 // CHECK-NEXT:      "trivial": true
1539 // CHECK-NEXT:     },
1540 // CHECK-NEXT:     "moveCtor": {
1541 // CHECK-NEXT:      "exists": true,
1542 // CHECK-NEXT:      "needsImplicit": true,
1543 // CHECK-NEXT:      "simple": true,
1544 // CHECK-NEXT:      "trivial": true
1545 // CHECK-NEXT:     }
1546 // CHECK-NEXT:    },
1547 // CHECK-NEXT:    "inner": [
1548 // CHECK-NEXT:     {
1549 // CHECK-NEXT:      "kind": "TemplateArgument",
1550 // CHECK-NEXT:      "type": {
1551 // CHECK-NEXT:       "qualType": "int"
1552 // CHECK-NEXT:      },
1553 // CHECK-NEXT:      "inner": [
1554 // CHECK-NEXT:       {
1555 // CHECK-NEXT:        "id": "0x{{.*}}",
1556 // CHECK-NEXT:        "kind": "BuiltinType",
1557 // CHECK-NEXT:        "type": {
1558 // CHECK-NEXT:         "qualType": "int"
1559 // CHECK-NEXT:        }
1560 // CHECK-NEXT:       }
1561 // CHECK-NEXT:      ]
1562 // CHECK-NEXT:     },
1563 // CHECK-NEXT:     {
1564 // CHECK-NEXT:      "id": "0x{{.*}}",
1565 // CHECK-NEXT:      "kind": "CXXRecordDecl",
1566 // CHECK-NEXT:      "loc": {
1567 // CHECK-NEXT:       "offset": 560,
1568 // CHECK-NEXT:       "col": 8,
1569 // CHECK-NEXT:       "tokLen": 1
1570 // CHECK-NEXT:      },
1571 // CHECK-NEXT:      "range": {
1572 // CHECK-NEXT:       "begin": {
1573 // CHECK-NEXT:        "offset": 553,
1574 // CHECK-NEXT:        "col": 1,
1575 // CHECK-NEXT:        "tokLen": 6
1576 // CHECK-NEXT:       },
1577 // CHECK-NEXT:       "end": {
1578 // CHECK-NEXT:        "offset": 560,
1579 // CHECK-NEXT:        "col": 8,
1580 // CHECK-NEXT:        "tokLen": 1
1581 // CHECK-NEXT:       }
1582 // CHECK-NEXT:      },
1583 // CHECK-NEXT:      "isImplicit": true,
1584 // CHECK-NEXT:      "name": "R",
1585 // CHECK-NEXT:      "tagUsed": "struct"
1586 // CHECK-NEXT:     }
1587 // CHECK-NEXT:    ]
1588 // CHECK-NEXT:   },
1589 // CHECK-NEXT:   {
1590 // CHECK-NEXT:    "id": "0x{{.*}}",
1591 // CHECK-NEXT:    "kind": "ClassTemplateDecl",
1592 // CHECK-NEXT:    "loc": {
1593 // CHECK-NEXT:     "offset": 612,
1594 // CHECK-NEXT:     "line": 37,
1595 // CHECK-NEXT:     "col": 8,
1596 // CHECK-NEXT:     "tokLen": 1
1597 // CHECK-NEXT:    },
1598 // CHECK-NEXT:    "range": {
1599 // CHECK-NEXT:     "begin": {
1600 // CHECK-NEXT:      "offset": 572,
1601 // CHECK-NEXT:      "line": 36,
1602 // CHECK-NEXT:      "col": 1,
1603 // CHECK-NEXT:      "tokLen": 8
1604 // CHECK-NEXT:     },
1605 // CHECK-NEXT:     "end": {
1606 // CHECK-NEXT:      "offset": 615,
1607 // CHECK-NEXT:      "line": 37,
1608 // CHECK-NEXT:      "col": 11,
1609 // CHECK-NEXT:      "tokLen": 1
1610 // CHECK-NEXT:     }
1611 // CHECK-NEXT:    },
1612 // CHECK-NEXT:    "name": "S",
1613 // CHECK-NEXT:    "inner": [
1614 // CHECK-NEXT:     {
1615 // CHECK-NEXT:      "id": "0x{{.*}}",
1616 // CHECK-NEXT:      "kind": "TemplateTypeParmDecl",
1617 // CHECK-NEXT:      "loc": {
1618 // CHECK-NEXT:       "offset": 591,
1619 // CHECK-NEXT:       "line": 36,
1620 // CHECK-NEXT:       "col": 20,
1621 // CHECK-NEXT:       "tokLen": 2
1622 // CHECK-NEXT:      },
1623 // CHECK-NEXT:      "range": {
1624 // CHECK-NEXT:       "begin": {
1625 // CHECK-NEXT:        "offset": 582,
1626 // CHECK-NEXT:        "col": 11,
1627 // CHECK-NEXT:        "tokLen": 8
1628 // CHECK-NEXT:       },
1629 // CHECK-NEXT:       "end": {
1630 // CHECK-NEXT:        "offset": 591,
1631 // CHECK-NEXT:        "col": 20,
1632 // CHECK-NEXT:        "tokLen": 2
1633 // CHECK-NEXT:       }
1634 // CHECK-NEXT:      },
1635 // CHECK-NEXT:      "name": "Ty",
1636 // CHECK-NEXT:      "tagUsed": "typename",
1637 // CHECK-NEXT:      "depth": 0,
1638 // CHECK-NEXT:      "index": 0
1639 // CHECK-NEXT:     },
1640 // CHECK-NEXT:     {
1641 // CHECK-NEXT:      "id": "0x{{.*}}",
1642 // CHECK-NEXT:      "kind": "TemplateTypeParmDecl",
1643 // CHECK-NEXT:      "loc": {
1644 // CHECK-NEXT:       "offset": 601,
1645 // CHECK-NEXT:       "col": 30,
1646 // CHECK-NEXT:       "tokLen": 2
1647 // CHECK-NEXT:      },
1648 // CHECK-NEXT:      "range": {
1649 // CHECK-NEXT:       "begin": {
1650 // CHECK-NEXT:        "offset": 595,
1651 // CHECK-NEXT:        "col": 24,
1652 // CHECK-NEXT:        "tokLen": 5
1653 // CHECK-NEXT:       },
1654 // CHECK-NEXT:       "end": {
1655 // CHECK-NEXT:        "offset": 601,
1656 // CHECK-NEXT:        "col": 30,
1657 // CHECK-NEXT:        "tokLen": 2
1658 // CHECK-NEXT:       }
1659 // CHECK-NEXT:      },
1660 // CHECK-NEXT:      "name": "Uy",
1661 // CHECK-NEXT:      "tagUsed": "class",
1662 // CHECK-NEXT:      "depth": 0,
1663 // CHECK-NEXT:      "index": 1
1664 // CHECK-NEXT:     },
1665 // CHECK-NEXT:     {
1666 // CHECK-NEXT:      "id": "0x{{.*}}",
1667 // CHECK-NEXT:      "kind": "CXXRecordDecl",
1668 // CHECK-NEXT:      "loc": {
1669 // CHECK-NEXT:       "offset": 612,
1670 // CHECK-NEXT:       "line": 37,
1671 // CHECK-NEXT:       "col": 8,
1672 // CHECK-NEXT:       "tokLen": 1
1673 // CHECK-NEXT:      },
1674 // CHECK-NEXT:      "range": {
1675 // CHECK-NEXT:       "begin": {
1676 // CHECK-NEXT:        "offset": 605,
1677 // CHECK-NEXT:        "col": 1,
1678 // CHECK-NEXT:        "tokLen": 6
1679 // CHECK-NEXT:       },
1680 // CHECK-NEXT:       "end": {
1681 // CHECK-NEXT:        "offset": 615,
1682 // CHECK-NEXT:        "col": 11,
1683 // CHECK-NEXT:        "tokLen": 1
1684 // CHECK-NEXT:       }
1685 // CHECK-NEXT:      },
1686 // CHECK-NEXT:      "name": "S",
1687 // CHECK-NEXT:      "tagUsed": "struct",
1688 // CHECK-NEXT:      "completeDefinition": true,
1689 // CHECK-NEXT:      "definitionData": {
1690 // CHECK-NEXT:       "canConstDefaultInit": true,
1691 // CHECK-NEXT:       "copyAssign": {
1692 // CHECK-NEXT:        "hasConstParam": true,
1693 // CHECK-NEXT:        "implicitHasConstParam": true,
1694 // CHECK-NEXT:        "needsImplicit": true,
1695 // CHECK-NEXT:        "simple": true,
1696 // CHECK-NEXT:        "trivial": true
1697 // CHECK-NEXT:       },
1698 // CHECK-NEXT:       "copyCtor": {
1699 // CHECK-NEXT:        "hasConstParam": true,
1700 // CHECK-NEXT:        "implicitHasConstParam": true,
1701 // CHECK-NEXT:        "needsImplicit": true,
1702 // CHECK-NEXT:        "simple": true,
1703 // CHECK-NEXT:        "trivial": true
1704 // CHECK-NEXT:       },
1705 // CHECK-NEXT:       "defaultCtor": {
1706 // CHECK-NEXT:        "defaultedIsConstexpr": true,
1707 // CHECK-NEXT:        "exists": true,
1708 // CHECK-NEXT:        "isConstexpr": true,
1709 // CHECK-NEXT:        "needsImplicit": true,
1710 // CHECK-NEXT:        "trivial": true
1711 // CHECK-NEXT:       },
1712 // CHECK-NEXT:       "dtor": {
1713 // CHECK-NEXT:        "irrelevant": true,
1714 // CHECK-NEXT:        "needsImplicit": true,
1715 // CHECK-NEXT:        "simple": true,
1716 // CHECK-NEXT:        "trivial": true
1717 // CHECK-NEXT:       },
1718 // CHECK-NEXT:       "hasConstexprNonCopyMoveConstructor": true,
1719 // CHECK-NEXT:       "isAggregate": true,
1720 // CHECK-NEXT:       "isEmpty": true,
1721 // CHECK-NEXT:       "isLiteral": true,
1722 // CHECK-NEXT:       "isPOD": true,
1723 // CHECK-NEXT:       "isStandardLayout": true,
1724 // CHECK-NEXT:       "isTrivial": true,
1725 // CHECK-NEXT:       "isTriviallyCopyable": true,
1726 // CHECK-NEXT:       "moveAssign": {
1727 // CHECK-NEXT:        "exists": true,
1728 // CHECK-NEXT:        "needsImplicit": true,
1729 // CHECK-NEXT:        "simple": true,
1730 // CHECK-NEXT:        "trivial": true
1731 // CHECK-NEXT:       },
1732 // CHECK-NEXT:       "moveCtor": {
1733 // CHECK-NEXT:        "exists": true,
1734 // CHECK-NEXT:        "needsImplicit": true,
1735 // CHECK-NEXT:        "simple": true,
1736 // CHECK-NEXT:        "trivial": true
1737 // CHECK-NEXT:       }
1738 // CHECK-NEXT:      },
1739 // CHECK-NEXT:      "inner": [
1740 // CHECK-NEXT:       {
1741 // CHECK-NEXT:        "id": "0x{{.*}}",
1742 // CHECK-NEXT:        "kind": "CXXRecordDecl",
1743 // CHECK-NEXT:        "loc": {
1744 // CHECK-NEXT:         "offset": 612,
1745 // CHECK-NEXT:         "col": 8,
1746 // CHECK-NEXT:         "tokLen": 1
1747 // CHECK-NEXT:        },
1748 // CHECK-NEXT:        "range": {
1749 // CHECK-NEXT:         "begin": {
1750 // CHECK-NEXT:          "offset": 605,
1751 // CHECK-NEXT:          "col": 1,
1752 // CHECK-NEXT:          "tokLen": 6
1753 // CHECK-NEXT:         },
1754 // CHECK-NEXT:         "end": {
1755 // CHECK-NEXT:          "offset": 612,
1756 // CHECK-NEXT:          "col": 8,
1757 // CHECK-NEXT:          "tokLen": 1
1758 // CHECK-NEXT:         }
1759 // CHECK-NEXT:        },
1760 // CHECK-NEXT:        "isImplicit": true,
1761 // CHECK-NEXT:        "name": "S",
1762 // CHECK-NEXT:        "tagUsed": "struct"
1763 // CHECK-NEXT:       }
1764 // CHECK-NEXT:      ]
1765 // CHECK-NEXT:     }
1766 // CHECK-NEXT:    ]
1767 // CHECK-NEXT:   },
1768 // CHECK-NEXT:   {
1769 // CHECK-NEXT:    "id": "0x{{.*}}",
1770 // CHECK-NEXT:    "kind": "ClassTemplatePartialSpecializationDecl",
1771 // CHECK-NEXT:    "loc": {
1772 // CHECK-NEXT:     "offset": 649,
1773 // CHECK-NEXT:     "line": 40,
1774 // CHECK-NEXT:     "col": 8,
1775 // CHECK-NEXT:     "tokLen": 1
1776 // CHECK-NEXT:    },
1777 // CHECK-NEXT:    "range": {
1778 // CHECK-NEXT:     "begin": {
1779 // CHECK-NEXT:      "offset": 619,
1780 // CHECK-NEXT:      "line": 39,
1781 // CHECK-NEXT:      "col": 1,
1782 // CHECK-NEXT:      "tokLen": 8
1783 // CHECK-NEXT:     },
1784 // CHECK-NEXT:     "end": {
1785 // CHECK-NEXT:      "offset": 661,
1786 // CHECK-NEXT:      "line": 40,
1787 // CHECK-NEXT:      "col": 20,
1788 // CHECK-NEXT:      "tokLen": 1
1789 // CHECK-NEXT:     }
1790 // CHECK-NEXT:    },
1791 // CHECK-NEXT:    "name": "S",
1792 // CHECK-NEXT:    "tagUsed": "struct",
1793 // CHECK-NEXT:    "completeDefinition": true,
1794 // CHECK-NEXT:    "definitionData": {
1795 // CHECK-NEXT:     "canConstDefaultInit": true,
1796 // CHECK-NEXT:     "copyAssign": {
1797 // CHECK-NEXT:      "hasConstParam": true,
1798 // CHECK-NEXT:      "implicitHasConstParam": true,
1799 // CHECK-NEXT:      "needsImplicit": true,
1800 // CHECK-NEXT:      "simple": true,
1801 // CHECK-NEXT:      "trivial": true
1802 // CHECK-NEXT:     },
1803 // CHECK-NEXT:     "copyCtor": {
1804 // CHECK-NEXT:      "hasConstParam": true,
1805 // CHECK-NEXT:      "implicitHasConstParam": true,
1806 // CHECK-NEXT:      "needsImplicit": true,
1807 // CHECK-NEXT:      "simple": true,
1808 // CHECK-NEXT:      "trivial": true
1809 // CHECK-NEXT:     },
1810 // CHECK-NEXT:     "defaultCtor": {
1811 // CHECK-NEXT:      "defaultedIsConstexpr": true,
1812 // CHECK-NEXT:      "exists": true,
1813 // CHECK-NEXT:      "isConstexpr": true,
1814 // CHECK-NEXT:      "needsImplicit": true,
1815 // CHECK-NEXT:      "trivial": true
1816 // CHECK-NEXT:     },
1817 // CHECK-NEXT:     "dtor": {
1818 // CHECK-NEXT:      "irrelevant": true,
1819 // CHECK-NEXT:      "needsImplicit": true,
1820 // CHECK-NEXT:      "simple": true,
1821 // CHECK-NEXT:      "trivial": true
1822 // CHECK-NEXT:     },
1823 // CHECK-NEXT:     "hasConstexprNonCopyMoveConstructor": true,
1824 // CHECK-NEXT:     "isAggregate": true,
1825 // CHECK-NEXT:     "isEmpty": true,
1826 // CHECK-NEXT:     "isLiteral": true,
1827 // CHECK-NEXT:     "isPOD": true,
1828 // CHECK-NEXT:     "isStandardLayout": true,
1829 // CHECK-NEXT:     "isTrivial": true,
1830 // CHECK-NEXT:     "isTriviallyCopyable": true,
1831 // CHECK-NEXT:     "moveAssign": {
1832 // CHECK-NEXT:      "exists": true,
1833 // CHECK-NEXT:      "needsImplicit": true,
1834 // CHECK-NEXT:      "simple": true,
1835 // CHECK-NEXT:      "trivial": true
1836 // CHECK-NEXT:     },
1837 // CHECK-NEXT:     "moveCtor": {
1838 // CHECK-NEXT:      "exists": true,
1839 // CHECK-NEXT:      "needsImplicit": true,
1840 // CHECK-NEXT:      "simple": true,
1841 // CHECK-NEXT:      "trivial": true
1842 // CHECK-NEXT:     }
1843 // CHECK-NEXT:    },
1844 // CHECK-NEXT:    "inner": [
1845 // CHECK-NEXT:     {
1846 // CHECK-NEXT:      "kind": "TemplateArgument",
1847 // CHECK-NEXT:      "type": {
1848 // CHECK-NEXT:       "qualType": "type-parameter-0-0"
1849 // CHECK-NEXT:      },
1850 // CHECK-NEXT:      "inner": [
1851 // CHECK-NEXT:       {
1852 // CHECK-NEXT:        "id": "0x{{.*}}",
1853 // CHECK-NEXT:        "kind": "TemplateTypeParmType",
1854 // CHECK-NEXT:        "type": {
1855 // CHECK-NEXT:         "qualType": "type-parameter-0-0"
1856 // CHECK-NEXT:        },
1857 // CHECK-NEXT:        "isDependent": true,
1858 // CHECK-NEXT:        "isInstantiationDependent": true,
1859 // CHECK-NEXT:        "depth": 0,
1860 // CHECK-NEXT:        "index": 0,
1861 // CHECK-NEXT:        "decl": {
1862 // CHECK-NEXT:         "id": "0x0"
1863 // CHECK-NEXT:        }
1864 // CHECK-NEXT:       }
1865 // CHECK-NEXT:      ]
1866 // CHECK-NEXT:     },
1867 // CHECK-NEXT:     {
1868 // CHECK-NEXT:      "kind": "TemplateArgument",
1869 // CHECK-NEXT:      "type": {
1870 // CHECK-NEXT:       "qualType": "int"
1871 // CHECK-NEXT:      },
1872 // CHECK-NEXT:      "inner": [
1873 // CHECK-NEXT:       {
1874 // CHECK-NEXT:        "id": "0x{{.*}}",
1875 // CHECK-NEXT:        "kind": "BuiltinType",
1876 // CHECK-NEXT:        "type": {
1877 // CHECK-NEXT:         "qualType": "int"
1878 // CHECK-NEXT:        }
1879 // CHECK-NEXT:       }
1880 // CHECK-NEXT:      ]
1881 // CHECK-NEXT:     },
1882 // CHECK-NEXT:     {
1883 // CHECK-NEXT:      "id": "0x{{.*}}",
1884 // CHECK-NEXT:      "kind": "TemplateTypeParmDecl",
1885 // CHECK-NEXT:      "loc": {
1886 // CHECK-NEXT:       "offset": 638,
1887 // CHECK-NEXT:       "line": 39,
1888 // CHECK-NEXT:       "col": 20,
1889 // CHECK-NEXT:       "tokLen": 2
1890 // CHECK-NEXT:      },
1891 // CHECK-NEXT:      "range": {
1892 // CHECK-NEXT:       "begin": {
1893 // CHECK-NEXT:        "offset": 629,
1894 // CHECK-NEXT:        "col": 11,
1895 // CHECK-NEXT:        "tokLen": 8
1896 // CHECK-NEXT:       },
1897 // CHECK-NEXT:       "end": {
1898 // CHECK-NEXT:        "offset": 638,
1899 // CHECK-NEXT:        "col": 20,
1900 // CHECK-NEXT:        "tokLen": 2
1901 // CHECK-NEXT:       }
1902 // CHECK-NEXT:      },
1903 // CHECK-NEXT:      "isReferenced": true,
1904 // CHECK-NEXT:      "name": "Ty",
1905 // CHECK-NEXT:      "tagUsed": "typename",
1906 // CHECK-NEXT:      "depth": 0,
1907 // CHECK-NEXT:      "index": 0
1908 // CHECK-NEXT:     },
1909 // CHECK-NEXT:     {
1910 // CHECK-NEXT:      "id": "0x{{.*}}",
1911 // CHECK-NEXT:      "kind": "CXXRecordDecl",
1912 // CHECK-NEXT:      "loc": {
1913 // CHECK-NEXT:       "offset": 649,
1914 // CHECK-NEXT:       "line": 40,
1915 // CHECK-NEXT:       "col": 8,
1916 // CHECK-NEXT:       "tokLen": 1
1917 // CHECK-NEXT:      },
1918 // CHECK-NEXT:      "range": {
1919 // CHECK-NEXT:       "begin": {
1920 // CHECK-NEXT:        "offset": 642,
1921 // CHECK-NEXT:        "col": 1,
1922 // CHECK-NEXT:        "tokLen": 6
1923 // CHECK-NEXT:       },
1924 // CHECK-NEXT:       "end": {
1925 // CHECK-NEXT:        "offset": 649,
1926 // CHECK-NEXT:        "col": 8,
1927 // CHECK-NEXT:        "tokLen": 1
1928 // CHECK-NEXT:       }
1929 // CHECK-NEXT:      },
1930 // CHECK-NEXT:      "isImplicit": true,
1931 // CHECK-NEXT:      "name": "S",
1932 // CHECK-NEXT:      "tagUsed": "struct"
1933 // CHECK-NEXT:     }
1934 // CHECK-NEXT:    ]
1935 // CHECK-NEXT:   },
1936 // CHECK-NEXT:   {
1937 // CHECK-NEXT:    "id": "0x{{.*}}",
1938 // CHECK-NEXT:    "kind": "ClassTemplateDecl",
1939 // CHECK-NEXT:    "loc": {
1940 // CHECK-NEXT:     "offset": 688,
1941 // CHECK-NEXT:     "line": 43,
1942 // CHECK-NEXT:     "col": 8,
1943 // CHECK-NEXT:     "tokLen": 1
1944 // CHECK-NEXT:    },
1945 // CHECK-NEXT:    "range": {
1946 // CHECK-NEXT:     "begin": {
1947 // CHECK-NEXT:      "offset": 665,
1948 // CHECK-NEXT:      "line": 42,
1949 // CHECK-NEXT:      "col": 1,
1950 // CHECK-NEXT:      "tokLen": 8
1951 // CHECK-NEXT:     },
1952 // CHECK-NEXT:     "end": {
1953 // CHECK-NEXT:      "offset": 691,
1954 // CHECK-NEXT:      "line": 43,
1955 // CHECK-NEXT:      "col": 11,
1956 // CHECK-NEXT:      "tokLen": 1
1957 // CHECK-NEXT:     }
1958 // CHECK-NEXT:    },
1959 // CHECK-NEXT:    "name": "T",
1960 // CHECK-NEXT:    "inner": [
1961 // CHECK-NEXT:     {
1962 // CHECK-NEXT:      "id": "0x{{.*}}",
1963 // CHECK-NEXT:      "kind": "NonTypeTemplateParmDecl",
1964 // CHECK-NEXT:      "loc": {
1965 // CHECK-NEXT:       "offset": 679,
1966 // CHECK-NEXT:       "line": 42,
1967 // CHECK-NEXT:       "col": 15,
1968 // CHECK-NEXT:       "tokLen": 1
1969 // CHECK-NEXT:      },
1970 // CHECK-NEXT:      "range": {
1971 // CHECK-NEXT:       "begin": {
1972 // CHECK-NEXT:        "offset": 675,
1973 // CHECK-NEXT:        "col": 11,
1974 // CHECK-NEXT:        "tokLen": 4
1975 // CHECK-NEXT:       },
1976 // CHECK-NEXT:       "end": {
1977 // CHECK-NEXT:        "offset": 675,
1978 // CHECK-NEXT:        "col": 11,
1979 // CHECK-NEXT:        "tokLen": 4
1980 // CHECK-NEXT:       }
1981 // CHECK-NEXT:      },
1982 // CHECK-NEXT:      "type": {
1983 // CHECK-NEXT:       "qualType": "auto"
1984 // CHECK-NEXT:      },
1985 // CHECK-NEXT:      "depth": 0,
1986 // CHECK-NEXT:      "index": 0
1987 // CHECK-NEXT:     },
1988 // CHECK-NEXT:     {
1989 // CHECK-NEXT:      "id": "0x{{.*}}",
1990 // CHECK-NEXT:      "kind": "CXXRecordDecl",
1991 // CHECK-NEXT:      "loc": {
1992 // CHECK-NEXT:       "offset": 688,
1993 // CHECK-NEXT:       "line": 43,
1994 // CHECK-NEXT:       "col": 8,
1995 // CHECK-NEXT:       "tokLen": 1
1996 // CHECK-NEXT:      },
1997 // CHECK-NEXT:      "range": {
1998 // CHECK-NEXT:       "begin": {
1999 // CHECK-NEXT:        "offset": 681,
2000 // CHECK-NEXT:        "col": 1,
2001 // CHECK-NEXT:        "tokLen": 6
2002 // CHECK-NEXT:       },
2003 // CHECK-NEXT:       "end": {
2004 // CHECK-NEXT:        "offset": 691,
2005 // CHECK-NEXT:        "col": 11,
2006 // CHECK-NEXT:        "tokLen": 1
2007 // CHECK-NEXT:       }
2008 // CHECK-NEXT:      },
2009 // CHECK-NEXT:      "name": "T",
2010 // CHECK-NEXT:      "tagUsed": "struct",
2011 // CHECK-NEXT:      "completeDefinition": true,
2012 // CHECK-NEXT:      "definitionData": {
2013 // CHECK-NEXT:       "canConstDefaultInit": true,
2014 // CHECK-NEXT:       "copyAssign": {
2015 // CHECK-NEXT:        "hasConstParam": true,
2016 // CHECK-NEXT:        "implicitHasConstParam": true,
2017 // CHECK-NEXT:        "needsImplicit": true,
2018 // CHECK-NEXT:        "simple": true,
2019 // CHECK-NEXT:        "trivial": true
2020 // CHECK-NEXT:       },
2021 // CHECK-NEXT:       "copyCtor": {
2022 // CHECK-NEXT:        "hasConstParam": true,
2023 // CHECK-NEXT:        "implicitHasConstParam": true,
2024 // CHECK-NEXT:        "needsImplicit": true,
2025 // CHECK-NEXT:        "simple": true,
2026 // CHECK-NEXT:        "trivial": true
2027 // CHECK-NEXT:       },
2028 // CHECK-NEXT:       "defaultCtor": {
2029 // CHECK-NEXT:        "defaultedIsConstexpr": true,
2030 // CHECK-NEXT:        "exists": true,
2031 // CHECK-NEXT:        "isConstexpr": true,
2032 // CHECK-NEXT:        "needsImplicit": true,
2033 // CHECK-NEXT:        "trivial": true
2034 // CHECK-NEXT:       },
2035 // CHECK-NEXT:       "dtor": {
2036 // CHECK-NEXT:        "irrelevant": true,
2037 // CHECK-NEXT:        "needsImplicit": true,
2038 // CHECK-NEXT:        "simple": true,
2039 // CHECK-NEXT:        "trivial": true
2040 // CHECK-NEXT:       },
2041 // CHECK-NEXT:       "hasConstexprNonCopyMoveConstructor": true,
2042 // CHECK-NEXT:       "isAggregate": true,
2043 // CHECK-NEXT:       "isEmpty": true,
2044 // CHECK-NEXT:       "isLiteral": true,
2045 // CHECK-NEXT:       "isPOD": true,
2046 // CHECK-NEXT:       "isStandardLayout": true,
2047 // CHECK-NEXT:       "isTrivial": true,
2048 // CHECK-NEXT:       "isTriviallyCopyable": true,
2049 // CHECK-NEXT:       "moveAssign": {
2050 // CHECK-NEXT:        "exists": true,
2051 // CHECK-NEXT:        "needsImplicit": true,
2052 // CHECK-NEXT:        "simple": true,
2053 // CHECK-NEXT:        "trivial": true
2054 // CHECK-NEXT:       },
2055 // CHECK-NEXT:       "moveCtor": {
2056 // CHECK-NEXT:        "exists": true,
2057 // CHECK-NEXT:        "needsImplicit": true,
2058 // CHECK-NEXT:        "simple": true,
2059 // CHECK-NEXT:        "trivial": true
2060 // CHECK-NEXT:       }
2061 // CHECK-NEXT:      },
2062 // CHECK-NEXT:      "inner": [
2063 // CHECK-NEXT:       {
2064 // CHECK-NEXT:        "id": "0x{{.*}}",
2065 // CHECK-NEXT:        "kind": "CXXRecordDecl",
2066 // CHECK-NEXT:        "loc": {
2067 // CHECK-NEXT:         "offset": 688,
2068 // CHECK-NEXT:         "col": 8,
2069 // CHECK-NEXT:         "tokLen": 1
2070 // CHECK-NEXT:        },
2071 // CHECK-NEXT:        "range": {
2072 // CHECK-NEXT:         "begin": {
2073 // CHECK-NEXT:          "offset": 681,
2074 // CHECK-NEXT:          "col": 1,
2075 // CHECK-NEXT:          "tokLen": 6
2076 // CHECK-NEXT:         },
2077 // CHECK-NEXT:         "end": {
2078 // CHECK-NEXT:          "offset": 688,
2079 // CHECK-NEXT:          "col": 8,
2080 // CHECK-NEXT:          "tokLen": 1
2081 // CHECK-NEXT:         }
2082 // CHECK-NEXT:        },
2083 // CHECK-NEXT:        "isImplicit": true,
2084 // CHECK-NEXT:        "name": "T",
2085 // CHECK-NEXT:        "tagUsed": "struct"
2086 // CHECK-NEXT:       }
2087 // CHECK-NEXT:      ]
2088 // CHECK-NEXT:     }
2089 // CHECK-NEXT:    ]
2090 // CHECK-NEXT:   },
2091 // CHECK-NEXT:   {
2092 // CHECK-NEXT:    "id": "0x{{.*}}",
2093 // CHECK-NEXT:    "kind": "ClassTemplateDecl",
2094 // CHECK-NEXT:    "loc": {
2095 // CHECK-NEXT:     "offset": 728,
2096 // CHECK-NEXT:     "line": 46,
2097 // CHECK-NEXT:     "col": 8,
2098 // CHECK-NEXT:     "tokLen": 1
2099 // CHECK-NEXT:    },
2100 // CHECK-NEXT:    "range": {
2101 // CHECK-NEXT:     "begin": {
2102 // CHECK-NEXT:      "offset": 695,
2103 // CHECK-NEXT:      "line": 45,
2104 // CHECK-NEXT:      "col": 1,
2105 // CHECK-NEXT:      "tokLen": 8
2106 // CHECK-NEXT:     },
2107 // CHECK-NEXT:     "end": {
2108 // CHECK-NEXT:      "offset": 731,
2109 // CHECK-NEXT:      "line": 46,
2110 // CHECK-NEXT:      "col": 11,
2111 // CHECK-NEXT:      "tokLen": 1
2112 // CHECK-NEXT:     }
2113 // CHECK-NEXT:    },
2114 // CHECK-NEXT:    "name": "U",
2115 // CHECK-NEXT:    "inner": [
2116 // CHECK-NEXT:     {
2117 // CHECK-NEXT:      "id": "0x{{.*}}",
2118 // CHECK-NEXT:      "kind": "NonTypeTemplateParmDecl",
2119 // CHECK-NEXT:      "loc": {
2120 // CHECK-NEXT:       "offset": 719,
2121 // CHECK-NEXT:       "line": 45,
2122 // CHECK-NEXT:       "col": 25,
2123 // CHECK-NEXT:       "tokLen": 1
2124 // CHECK-NEXT:      },
2125 // CHECK-NEXT:      "range": {
2126 // CHECK-NEXT:       "begin": {
2127 // CHECK-NEXT:        "offset": 705,
2128 // CHECK-NEXT:        "col": 11,
2129 // CHECK-NEXT:        "tokLen": 8
2130 // CHECK-NEXT:       },
2131 // CHECK-NEXT:       "end": {
2132 // CHECK-NEXT:        "offset": 705,
2133 // CHECK-NEXT:        "col": 11,
2134 // CHECK-NEXT:        "tokLen": 8
2135 // CHECK-NEXT:       }
2136 // CHECK-NEXT:      },
2137 // CHECK-NEXT:      "type": {
2138 // CHECK-NEXT:       "qualType": "decltype(auto)"
2139 // CHECK-NEXT:      },
2140 // CHECK-NEXT:      "depth": 0,
2141 // CHECK-NEXT:      "index": 0
2142 // CHECK-NEXT:     },
2143 // CHECK-NEXT:     {
2144 // CHECK-NEXT:      "id": "0x{{.*}}",
2145 // CHECK-NEXT:      "kind": "CXXRecordDecl",
2146 // CHECK-NEXT:      "loc": {
2147 // CHECK-NEXT:       "offset": 728,
2148 // CHECK-NEXT:       "line": 46,
2149 // CHECK-NEXT:       "col": 8,
2150 // CHECK-NEXT:       "tokLen": 1
2151 // CHECK-NEXT:      },
2152 // CHECK-NEXT:      "range": {
2153 // CHECK-NEXT:       "begin": {
2154 // CHECK-NEXT:        "offset": 721,
2155 // CHECK-NEXT:        "col": 1,
2156 // CHECK-NEXT:        "tokLen": 6
2157 // CHECK-NEXT:       },
2158 // CHECK-NEXT:       "end": {
2159 // CHECK-NEXT:        "offset": 731,
2160 // CHECK-NEXT:        "col": 11,
2161 // CHECK-NEXT:        "tokLen": 1
2162 // CHECK-NEXT:       }
2163 // CHECK-NEXT:      },
2164 // CHECK-NEXT:      "name": "U",
2165 // CHECK-NEXT:      "tagUsed": "struct",
2166 // CHECK-NEXT:      "completeDefinition": true,
2167 // CHECK-NEXT:      "definitionData": {
2168 // CHECK-NEXT:       "canConstDefaultInit": true,
2169 // CHECK-NEXT:       "copyAssign": {
2170 // CHECK-NEXT:        "hasConstParam": true,
2171 // CHECK-NEXT:        "implicitHasConstParam": true,
2172 // CHECK-NEXT:        "needsImplicit": true,
2173 // CHECK-NEXT:        "simple": true,
2174 // CHECK-NEXT:        "trivial": true
2175 // CHECK-NEXT:       },
2176 // CHECK-NEXT:       "copyCtor": {
2177 // CHECK-NEXT:        "hasConstParam": true,
2178 // CHECK-NEXT:        "implicitHasConstParam": true,
2179 // CHECK-NEXT:        "needsImplicit": true,
2180 // CHECK-NEXT:        "simple": true,
2181 // CHECK-NEXT:        "trivial": true
2182 // CHECK-NEXT:       },
2183 // CHECK-NEXT:       "defaultCtor": {
2184 // CHECK-NEXT:        "defaultedIsConstexpr": true,
2185 // CHECK-NEXT:        "exists": true,
2186 // CHECK-NEXT:        "isConstexpr": true,
2187 // CHECK-NEXT:        "needsImplicit": true,
2188 // CHECK-NEXT:        "trivial": true
2189 // CHECK-NEXT:       },
2190 // CHECK-NEXT:       "dtor": {
2191 // CHECK-NEXT:        "irrelevant": true,
2192 // CHECK-NEXT:        "needsImplicit": true,
2193 // CHECK-NEXT:        "simple": true,
2194 // CHECK-NEXT:        "trivial": true
2195 // CHECK-NEXT:       },
2196 // CHECK-NEXT:       "hasConstexprNonCopyMoveConstructor": true,
2197 // CHECK-NEXT:       "isAggregate": true,
2198 // CHECK-NEXT:       "isEmpty": true,
2199 // CHECK-NEXT:       "isLiteral": true,
2200 // CHECK-NEXT:       "isPOD": true,
2201 // CHECK-NEXT:       "isStandardLayout": true,
2202 // CHECK-NEXT:       "isTrivial": true,
2203 // CHECK-NEXT:       "isTriviallyCopyable": true,
2204 // CHECK-NEXT:       "moveAssign": {
2205 // CHECK-NEXT:        "exists": true,
2206 // CHECK-NEXT:        "needsImplicit": true,
2207 // CHECK-NEXT:        "simple": true,
2208 // CHECK-NEXT:        "trivial": true
2209 // CHECK-NEXT:       },
2210 // CHECK-NEXT:       "moveCtor": {
2211 // CHECK-NEXT:        "exists": true,
2212 // CHECK-NEXT:        "needsImplicit": true,
2213 // CHECK-NEXT:        "simple": true,
2214 // CHECK-NEXT:        "trivial": true
2215 // CHECK-NEXT:       }
2216 // CHECK-NEXT:      },
2217 // CHECK-NEXT:      "inner": [
2218 // CHECK-NEXT:       {
2219 // CHECK-NEXT:        "id": "0x{{.*}}",
2220 // CHECK-NEXT:        "kind": "CXXRecordDecl",
2221 // CHECK-NEXT:        "loc": {
2222 // CHECK-NEXT:         "offset": 728,
2223 // CHECK-NEXT:         "col": 8,
2224 // CHECK-NEXT:         "tokLen": 1
2225 // CHECK-NEXT:        },
2226 // CHECK-NEXT:        "range": {
2227 // CHECK-NEXT:         "begin": {
2228 // CHECK-NEXT:          "offset": 721,
2229 // CHECK-NEXT:          "col": 1,
2230 // CHECK-NEXT:          "tokLen": 6
2231 // CHECK-NEXT:         },
2232 // CHECK-NEXT:         "end": {
2233 // CHECK-NEXT:          "offset": 728,
2234 // CHECK-NEXT:          "col": 8,
2235 // CHECK-NEXT:          "tokLen": 1
2236 // CHECK-NEXT:         }
2237 // CHECK-NEXT:        },
2238 // CHECK-NEXT:        "isImplicit": true,
2239 // CHECK-NEXT:        "name": "U",
2240 // CHECK-NEXT:        "tagUsed": "struct"
2241 // CHECK-NEXT:       }
2242 // CHECK-NEXT:      ]
2243 // CHECK-NEXT:     }
2244 // CHECK-NEXT:    ]
2245 // CHECK-NEXT:   },
2246 // CHECK-NEXT:   {
2247 // CHECK-NEXT:    "id": "0x{{.*}}",
2248 // CHECK-NEXT:    "kind": "ClassTemplateDecl",
2249 // CHECK-NEXT:    "loc": {
2250 // CHECK-NEXT:     "offset": 765,
2251 // CHECK-NEXT:     "line": 49,
2252 // CHECK-NEXT:     "col": 8,
2253 // CHECK-NEXT:     "tokLen": 1
2254 // CHECK-NEXT:    },
2255 // CHECK-NEXT:    "range": {
2256 // CHECK-NEXT:     "begin": {
2257 // CHECK-NEXT:      "offset": 735,
2258 // CHECK-NEXT:      "line": 48,
2259 // CHECK-NEXT:      "col": 1,
2260 // CHECK-NEXT:      "tokLen": 8
2261 // CHECK-NEXT:     },
2262 // CHECK-NEXT:     "end": {
2263 // CHECK-NEXT:      "offset": 806,
2264 // CHECK-NEXT:      "line": 52,
2265 // CHECK-NEXT:      "col": 1,
2266 // CHECK-NEXT:      "tokLen": 1
2267 // CHECK-NEXT:     }
2268 // CHECK-NEXT:    },
2269 // CHECK-NEXT:    "name": "V",
2270 // CHECK-NEXT:    "inner": [
2271 // CHECK-NEXT:     {
2272 // CHECK-NEXT:      "id": "0x{{.*}}",
2273 // CHECK-NEXT:      "kind": "TemplateTypeParmDecl",
2274 // CHECK-NEXT:      "loc": {
2275 // CHECK-NEXT:       "offset": 754,
2276 // CHECK-NEXT:       "line": 48,
2277 // CHECK-NEXT:       "col": 20,
2278 // CHECK-NEXT:       "tokLen": 2
2279 // CHECK-NEXT:      },
2280 // CHECK-NEXT:      "range": {
2281 // CHECK-NEXT:       "begin": {
2282 // CHECK-NEXT:        "offset": 745,
2283 // CHECK-NEXT:        "col": 11,
2284 // CHECK-NEXT:        "tokLen": 8
2285 // CHECK-NEXT:       },
2286 // CHECK-NEXT:       "end": {
2287 // CHECK-NEXT:        "offset": 754,
2288 // CHECK-NEXT:        "col": 20,
2289 // CHECK-NEXT:        "tokLen": 2
2290 // CHECK-NEXT:       }
2291 // CHECK-NEXT:      },
2292 // CHECK-NEXT:      "name": "Ty",
2293 // CHECK-NEXT:      "tagUsed": "typename",
2294 // CHECK-NEXT:      "depth": 0,
2295 // CHECK-NEXT:      "index": 0
2296 // CHECK-NEXT:     },
2297 // CHECK-NEXT:     {
2298 // CHECK-NEXT:      "id": "0x{{.*}}",
2299 // CHECK-NEXT:      "kind": "CXXRecordDecl",
2300 // CHECK-NEXT:      "loc": {
2301 // CHECK-NEXT:       "offset": 765,
2302 // CHECK-NEXT:       "line": 49,
2303 // CHECK-NEXT:       "col": 8,
2304 // CHECK-NEXT:       "tokLen": 1
2305 // CHECK-NEXT:      },
2306 // CHECK-NEXT:      "range": {
2307 // CHECK-NEXT:       "begin": {
2308 // CHECK-NEXT:        "offset": 758,
2309 // CHECK-NEXT:        "col": 1,
2310 // CHECK-NEXT:        "tokLen": 6
2311 // CHECK-NEXT:       },
2312 // CHECK-NEXT:       "end": {
2313 // CHECK-NEXT:        "offset": 806,
2314 // CHECK-NEXT:        "line": 52,
2315 // CHECK-NEXT:        "col": 1,
2316 // CHECK-NEXT:        "tokLen": 1
2317 // CHECK-NEXT:       }
2318 // CHECK-NEXT:      },
2319 // CHECK-NEXT:      "name": "V",
2320 // CHECK-NEXT:      "tagUsed": "struct",
2321 // CHECK-NEXT:      "completeDefinition": true,
2322 // CHECK-NEXT:      "definitionData": {
2323 // CHECK-NEXT:       "canConstDefaultInit": true,
2324 // CHECK-NEXT:       "copyAssign": {
2325 // CHECK-NEXT:        "hasConstParam": true,
2326 // CHECK-NEXT:        "implicitHasConstParam": true,
2327 // CHECK-NEXT:        "needsImplicit": true,
2328 // CHECK-NEXT:        "simple": true,
2329 // CHECK-NEXT:        "trivial": true
2330 // CHECK-NEXT:       },
2331 // CHECK-NEXT:       "copyCtor": {
2332 // CHECK-NEXT:        "hasConstParam": true,
2333 // CHECK-NEXT:        "implicitHasConstParam": true,
2334 // CHECK-NEXT:        "needsImplicit": true,
2335 // CHECK-NEXT:        "simple": true,
2336 // CHECK-NEXT:        "trivial": true
2337 // CHECK-NEXT:       },
2338 // CHECK-NEXT:       "defaultCtor": {
2339 // CHECK-NEXT:        "defaultedIsConstexpr": true,
2340 // CHECK-NEXT:        "exists": true,
2341 // CHECK-NEXT:        "isConstexpr": true,
2342 // CHECK-NEXT:        "needsImplicit": true,
2343 // CHECK-NEXT:        "trivial": true
2344 // CHECK-NEXT:       },
2345 // CHECK-NEXT:       "dtor": {
2346 // CHECK-NEXT:        "irrelevant": true,
2347 // CHECK-NEXT:        "needsImplicit": true,
2348 // CHECK-NEXT:        "simple": true,
2349 // CHECK-NEXT:        "trivial": true
2350 // CHECK-NEXT:       },
2351 // CHECK-NEXT:       "hasConstexprNonCopyMoveConstructor": true,
2352 // CHECK-NEXT:       "isAggregate": true,
2353 // CHECK-NEXT:       "isEmpty": true,
2354 // CHECK-NEXT:       "isLiteral": true,
2355 // CHECK-NEXT:       "isPOD": true,
2356 // CHECK-NEXT:       "isStandardLayout": true,
2357 // CHECK-NEXT:       "isTrivial": true,
2358 // CHECK-NEXT:       "isTriviallyCopyable": true,
2359 // CHECK-NEXT:       "moveAssign": {
2360 // CHECK-NEXT:        "exists": true,
2361 // CHECK-NEXT:        "needsImplicit": true,
2362 // CHECK-NEXT:        "simple": true,
2363 // CHECK-NEXT:        "trivial": true
2364 // CHECK-NEXT:       },
2365 // CHECK-NEXT:       "moveCtor": {
2366 // CHECK-NEXT:        "exists": true,
2367 // CHECK-NEXT:        "needsImplicit": true,
2368 // CHECK-NEXT:        "simple": true,
2369 // CHECK-NEXT:        "trivial": true
2370 // CHECK-NEXT:       }
2371 // CHECK-NEXT:      },
2372 // CHECK-NEXT:      "inner": [
2373 // CHECK-NEXT:       {
2374 // CHECK-NEXT:        "id": "0x{{.*}}",
2375 // CHECK-NEXT:        "kind": "CXXRecordDecl",
2376 // CHECK-NEXT:        "loc": {
2377 // CHECK-NEXT:         "offset": 765,
2378 // CHECK-NEXT:         "line": 49,
2379 // CHECK-NEXT:         "col": 8,
2380 // CHECK-NEXT:         "tokLen": 1
2381 // CHECK-NEXT:        },
2382 // CHECK-NEXT:        "range": {
2383 // CHECK-NEXT:         "begin": {
2384 // CHECK-NEXT:          "offset": 758,
2385 // CHECK-NEXT:          "col": 1,
2386 // CHECK-NEXT:          "tokLen": 6
2387 // CHECK-NEXT:         },
2388 // CHECK-NEXT:         "end": {
2389 // CHECK-NEXT:          "offset": 765,
2390 // CHECK-NEXT:          "col": 8,
2391 // CHECK-NEXT:          "tokLen": 1
2392 // CHECK-NEXT:         }
2393 // CHECK-NEXT:        },
2394 // CHECK-NEXT:        "isImplicit": true,
2395 // CHECK-NEXT:        "name": "V",
2396 // CHECK-NEXT:        "tagUsed": "struct"
2397 // CHECK-NEXT:       },
2398 // CHECK-NEXT:       {
2399 // CHECK-NEXT:        "id": "0x{{.*}}",
2400 // CHECK-NEXT:        "kind": "FunctionTemplateDecl",
2401 // CHECK-NEXT:        "loc": {
2402 // CHECK-NEXT:         "offset": 801,
2403 // CHECK-NEXT:         "line": 51,
2404 // CHECK-NEXT:         "col": 8,
2405 // CHECK-NEXT:         "tokLen": 1
2406 // CHECK-NEXT:        },
2407 // CHECK-NEXT:        "range": {
2408 // CHECK-NEXT:         "begin": {
2409 // CHECK-NEXT:          "offset": 771,
2410 // CHECK-NEXT:          "line": 50,
2411 // CHECK-NEXT:          "col": 3,
2412 // CHECK-NEXT:          "tokLen": 8
2413 // CHECK-NEXT:         },
2414 // CHECK-NEXT:         "end": {
2415 // CHECK-NEXT:          "offset": 803,
2416 // CHECK-NEXT:          "line": 51,
2417 // CHECK-NEXT:          "col": 10,
2418 // CHECK-NEXT:          "tokLen": 1
2419 // CHECK-NEXT:         }
2420 // CHECK-NEXT:        },
2421 // CHECK-NEXT:        "name": "f",
2422 // CHECK-NEXT:        "inner": [
2423 // CHECK-NEXT:         {
2424 // CHECK-NEXT:          "id": "0x{{.*}}",
2425 // CHECK-NEXT:          "kind": "TemplateTypeParmDecl",
2426 // CHECK-NEXT:          "loc": {
2427 // CHECK-NEXT:           "offset": 790,
2428 // CHECK-NEXT:           "line": 50,
2429 // CHECK-NEXT:           "col": 22,
2430 // CHECK-NEXT:           "tokLen": 2
2431 // CHECK-NEXT:          },
2432 // CHECK-NEXT:          "range": {
2433 // CHECK-NEXT:           "begin": {
2434 // CHECK-NEXT:            "offset": 781,
2435 // CHECK-NEXT:            "col": 13,
2436 // CHECK-NEXT:            "tokLen": 8
2437 // CHECK-NEXT:           },
2438 // CHECK-NEXT:           "end": {
2439 // CHECK-NEXT:            "offset": 790,
2440 // CHECK-NEXT:            "col": 22,
2441 // CHECK-NEXT:            "tokLen": 2
2442 // CHECK-NEXT:           }
2443 // CHECK-NEXT:          },
2444 // CHECK-NEXT:          "name": "Uy",
2445 // CHECK-NEXT:          "tagUsed": "typename",
2446 // CHECK-NEXT:          "depth": 1,
2447 // CHECK-NEXT:          "index": 0
2448 // CHECK-NEXT:         },
2449 // CHECK-NEXT:         {
2450 // CHECK-NEXT:          "id": "0x{{.*}}",
2451 // CHECK-NEXT:          "kind": "CXXMethodDecl",
2452 // CHECK-NEXT:          "loc": {
2453 // CHECK-NEXT:           "offset": 801,
2454 // CHECK-NEXT:           "line": 51,
2455 // CHECK-NEXT:           "col": 8,
2456 // CHECK-NEXT:           "tokLen": 1
2457 // CHECK-NEXT:          },
2458 // CHECK-NEXT:          "range": {
2459 // CHECK-NEXT:           "begin": {
2460 // CHECK-NEXT:            "offset": 796,
2461 // CHECK-NEXT:            "col": 3,
2462 // CHECK-NEXT:            "tokLen": 4
2463 // CHECK-NEXT:           },
2464 // CHECK-NEXT:           "end": {
2465 // CHECK-NEXT:            "offset": 803,
2466 // CHECK-NEXT:            "col": 10,
2467 // CHECK-NEXT:            "tokLen": 1
2468 // CHECK-NEXT:           }
2469 // CHECK-NEXT:          },
2470 // CHECK-NEXT:          "name": "f",
2471 // CHECK-NEXT:          "type": {
2472 // CHECK-NEXT:           "qualType": "void ()"
2473 // CHECK-NEXT:          }
2474 // CHECK-NEXT:         }
2475 // CHECK-NEXT:        ]
2476 // CHECK-NEXT:       }
2477 // CHECK-NEXT:      ]
2478 // CHECK-NEXT:     }
2479 // CHECK-NEXT:    ]
2480 // CHECK-NEXT:   },
2481 // CHECK-NEXT:   {
2482 // CHECK-NEXT:    "id": "0x{{.*}}",
2483 // CHECK-NEXT:    "kind": "FunctionTemplateDecl",
2484 // CHECK-NEXT:    "loc": {
2485 // CHECK-NEXT:     "offset": 868,
2486 // CHECK-NEXT:     "line": 56,
2487 // CHECK-NEXT:     "col": 13,
2488 // CHECK-NEXT:     "tokLen": 1
2489 // CHECK-NEXT:    },
2490 // CHECK-NEXT:    "range": {
2491 // CHECK-NEXT:     "begin": {
2492 // CHECK-NEXT:      "offset": 833,
2493 // CHECK-NEXT:      "line": 55,
2494 // CHECK-NEXT:      "col": 1,
2495 // CHECK-NEXT:      "tokLen": 8
2496 // CHECK-NEXT:     },
2497 // CHECK-NEXT:     "end": {
2498 // CHECK-NEXT:      "offset": 873,
2499 // CHECK-NEXT:      "line": 56,
2500 // CHECK-NEXT:      "col": 18,
2501 // CHECK-NEXT:      "tokLen": 1
2502 // CHECK-NEXT:     }
2503 // CHECK-NEXT:    },
2504 // CHECK-NEXT:    "parentDeclContextId": "0x{{.*}}",
2505 // CHECK-NEXT:    "previousDecl": "0x{{.*}}",
2506 // CHECK-NEXT:    "name": "f",
2507 // CHECK-NEXT:    "inner": [
2508 // CHECK-NEXT:     {
2509 // CHECK-NEXT:      "id": "0x{{.*}}",
2510 // CHECK-NEXT:      "kind": "TemplateTypeParmDecl",
2511 // CHECK-NEXT:      "loc": {
2512 // CHECK-NEXT:       "offset": 852,
2513 // CHECK-NEXT:       "line": 55,
2514 // CHECK-NEXT:       "col": 20,
2515 // CHECK-NEXT:       "tokLen": 2
2516 // CHECK-NEXT:      },
2517 // CHECK-NEXT:      "range": {
2518 // CHECK-NEXT:       "begin": {
2519 // CHECK-NEXT:        "offset": 843,
2520 // CHECK-NEXT:        "col": 11,
2521 // CHECK-NEXT:        "tokLen": 8
2522 // CHECK-NEXT:       },
2523 // CHECK-NEXT:       "end": {
2524 // CHECK-NEXT:        "offset": 852,
2525 // CHECK-NEXT:        "col": 20,
2526 // CHECK-NEXT:        "tokLen": 2
2527 // CHECK-NEXT:       }
2528 // CHECK-NEXT:      },
2529 // CHECK-NEXT:      "name": "Uy",
2530 // CHECK-NEXT:      "tagUsed": "typename",
2531 // CHECK-NEXT:      "depth": 1,
2532 // CHECK-NEXT:      "index": 0
2533 // CHECK-NEXT:     },
2534 // CHECK-NEXT:     {
2535 // CHECK-NEXT:      "id": "0x{{.*}}",
2536 // CHECK-NEXT:      "kind": "CXXMethodDecl",
2537 // CHECK-NEXT:      "loc": {
2538 // CHECK-NEXT:       "offset": 868,
2539 // CHECK-NEXT:       "line": 56,
2540 // CHECK-NEXT:       "col": 13,
2541 // CHECK-NEXT:       "tokLen": 1
2542 // CHECK-NEXT:      },
2543 // CHECK-NEXT:      "range": {
2544 // CHECK-NEXT:       "begin": {
2545 // CHECK-NEXT:        "offset": 810,
2546 // CHECK-NEXT:        "line": 54,
2547 // CHECK-NEXT:        "col": 1,
2548 // CHECK-NEXT:        "tokLen": 8
2549 // CHECK-NEXT:       },
2550 // CHECK-NEXT:       "end": {
2551 // CHECK-NEXT:        "offset": 873,
2552 // CHECK-NEXT:        "line": 56,
2553 // CHECK-NEXT:        "col": 18,
2554 // CHECK-NEXT:        "tokLen": 1
2555 // CHECK-NEXT:       }
2556 // CHECK-NEXT:      },
2557 // CHECK-NEXT:      "parentDeclContextId": "0x{{.*}}",
2558 // CHECK-NEXT:      "previousDecl": "0x{{.*}}",
2559 // CHECK-NEXT:      "name": "f",
2560 // CHECK-NEXT:      "type": {
2561 // CHECK-NEXT:       "qualType": "void ()"
2562 // CHECK-NEXT:      },
2563 // CHECK-NEXT:      "inner": [
2564 // CHECK-NEXT:       {
2565 // CHECK-NEXT:        "id": "0x{{.*}}",
2566 // CHECK-NEXT:        "kind": "CompoundStmt",
2567 // CHECK-NEXT:        "range": {
2568 // CHECK-NEXT:         "begin": {
2569 // CHECK-NEXT:          "offset": 872,
2570 // CHECK-NEXT:          "col": 17,
2571 // CHECK-NEXT:          "tokLen": 1
2572 // CHECK-NEXT:         },
2573 // CHECK-NEXT:         "end": {
2574 // CHECK-NEXT:          "offset": 873,
2575 // CHECK-NEXT:          "col": 18,
2576 // CHECK-NEXT:          "tokLen": 1
2577 // CHECK-NEXT:         }
2578 // CHECK-NEXT:        }
2579 // CHECK-NEXT:       }
2580 // CHECK-NEXT:      ]
2581 // CHECK-NEXT:     }
2582 // CHECK-NEXT:    ]
2583 // CHECK-NEXT:   },
2584 // CHECK-NEXT:   {
2585 // CHECK-NEXT:    "id": "0x{{.*}}",
2586 // CHECK-NEXT:    "kind": "FunctionTemplateDecl",
2587 // CHECK-NEXT:    "loc": {
2588 // CHECK-NEXT:     "offset": 922,
2589 // CHECK-NEXT:     "line": 59,
2590 // CHECK-NEXT:     "col": 6,
2591 // CHECK-NEXT:     "tokLen": 1
2592 // CHECK-NEXT:    },
2593 // CHECK-NEXT:    "range": {
2594 // CHECK-NEXT:     "begin": {
2595 // CHECK-NEXT:      "offset": 876,
2596 // CHECK-NEXT:      "line": 58,
2597 // CHECK-NEXT:      "col": 1,
2598 // CHECK-NEXT:      "tokLen": 8
2599 // CHECK-NEXT:     },
2600 // CHECK-NEXT:     "end": {
2601 // CHECK-NEXT:      "offset": 924,
2602 // CHECK-NEXT:      "line": 59,
2603 // CHECK-NEXT:      "col": 8,
2604 // CHECK-NEXT:      "tokLen": 1
2605 // CHECK-NEXT:     }
2606 // CHECK-NEXT:    },
2607 // CHECK-NEXT:    "name": "i",
2608 // CHECK-NEXT:    "inner": [
2609 // CHECK-NEXT:     {
2610 // CHECK-NEXT:      "id": "0x{{.*}}",
2611 // CHECK-NEXT:      "kind": "TemplateTemplateParmDecl",
2612 // CHECK-NEXT:      "loc": {
2613 // CHECK-NEXT:       "offset": 912,
2614 // CHECK-NEXT:       "line": 58,
2615 // CHECK-NEXT:       "col": 37,
2616 // CHECK-NEXT:       "tokLen": 1
2617 // CHECK-NEXT:      },
2618 // CHECK-NEXT:      "range": {
2619 // CHECK-NEXT:       "begin": {
2620 // CHECK-NEXT:        "offset": 886,
2621 // CHECK-NEXT:        "col": 11,
2622 // CHECK-NEXT:        "tokLen": 8
2623 // CHECK-NEXT:       },
2624 // CHECK-NEXT:       "end": {
2625 // CHECK-NEXT:        "offset": 914,
2626 // CHECK-NEXT:        "col": 39,
2627 // CHECK-NEXT:        "tokLen": 1
2628 // CHECK-NEXT:       }
2629 // CHECK-NEXT:      },
2630 // CHECK-NEXT:      "depth": 0,
2631 // CHECK-NEXT:      "index": 0,
2632 // CHECK-NEXT:      "defaultArg": {
2633 // CHECK-NEXT:       "kind": "TemplateArgument"
2634 // CHECK-NEXT:      },
2635 // CHECK-NEXT:      "inner": [
2636 // CHECK-NEXT:       {
2637 // CHECK-NEXT:        "id": "0x{{.*}}",
2638 // CHECK-NEXT:        "kind": "TemplateTypeParmDecl",
2639 // CHECK-NEXT:        "loc": {
2640 // CHECK-NEXT:         "offset": 904,
2641 // CHECK-NEXT:         "col": 29,
2642 // CHECK-NEXT:         "tokLen": 1
2643 // CHECK-NEXT:        },
2644 // CHECK-NEXT:        "range": {
2645 // CHECK-NEXT:         "begin": {
2646 // CHECK-NEXT:          "offset": 896,
2647 // CHECK-NEXT:          "col": 21,
2648 // CHECK-NEXT:          "tokLen": 8
2649 // CHECK-NEXT:         },
2650 // CHECK-NEXT:         "end": {
2651 // CHECK-NEXT:          "offset": 896,
2652 // CHECK-NEXT:          "col": 21,
2653 // CHECK-NEXT:          "tokLen": 8
2654 // CHECK-NEXT:         }
2655 // CHECK-NEXT:        },
2656 // CHECK-NEXT:        "tagUsed": "typename",
2657 // CHECK-NEXT:        "depth": 1,
2658 // CHECK-NEXT:        "index": 0
2659 // CHECK-NEXT:       },
2660 // CHECK-NEXT:       {
2661 // CHECK-NEXT:        "kind": "TemplateArgument",
2662 // CHECK-NEXT:        "range": {
2663 // CHECK-NEXT:         "begin": {
2664 // CHECK-NEXT:          "offset": 914,
2665 // CHECK-NEXT:          "col": 39,
2666 // CHECK-NEXT:          "tokLen": 1
2667 // CHECK-NEXT:         },
2668 // CHECK-NEXT:         "end": {
2669 // CHECK-NEXT:          "offset": 914,
2670 // CHECK-NEXT:          "col": 39,
2671 // CHECK-NEXT:          "tokLen": 1
2672 // CHECK-NEXT:         }
2673 // CHECK-NEXT:        }
2674 // CHECK-NEXT:       }
2675 // CHECK-NEXT:      ]
2676 // CHECK-NEXT:     },
2677 // CHECK-NEXT:     {
2678 // CHECK-NEXT:      "id": "0x{{.*}}",
2679 // CHECK-NEXT:      "kind": "FunctionDecl",
2680 // CHECK-NEXT:      "loc": {
2681 // CHECK-NEXT:       "offset": 922,
2682 // CHECK-NEXT:       "line": 59,
2683 // CHECK-NEXT:       "col": 6,
2684 // CHECK-NEXT:       "tokLen": 1
2685 // CHECK-NEXT:      },
2686 // CHECK-NEXT:      "range": {
2687 // CHECK-NEXT:       "begin": {
2688 // CHECK-NEXT:        "offset": 917,
2689 // CHECK-NEXT:        "col": 1,
2690 // CHECK-NEXT:        "tokLen": 4
2691 // CHECK-NEXT:       },
2692 // CHECK-NEXT:       "end": {
2693 // CHECK-NEXT:        "offset": 924,
2694 // CHECK-NEXT:        "col": 8,
2695 // CHECK-NEXT:        "tokLen": 1
2696 // CHECK-NEXT:       }
2697 // CHECK-NEXT:      },
2698 // CHECK-NEXT:      "name": "i",
2699 // CHECK-NEXT:      "type": {
2700 // CHECK-NEXT:       "qualType": "void ()"
2701 // CHECK-NEXT:      }
2702 // CHECK-NEXT:     }
2703 // CHECK-NEXT:    ]
2704 // CHECK-NEXT:   }
2705 // CHECK-NEXT:  ]
2706 // CHECK-NEXT: }
2707