xref: /llvm-project/clang/test/AST/ast-dump-decl-json.m (revision f9ead46931aef2978ddf350ba6523638175d7861)
1// RUN: %clang_cc1 -triple x86_64-apple-darwin -Wno-unused -fblocks -ast-dump=json -ast-dump-filter Test %s | FileCheck %s
2
3@protocol P
4@end
5
6@interface A
7@end
8
9@interface TestObjCIvarDecl : A
10@end
11
12@implementation TestObjCIvarDecl {
13  int varDefault;
14  @private int varPrivate;
15  @protected int varProtected;
16  @public int varPublic;
17  @package int varPackage;
18}
19@end
20
21@interface testObjCMethodDecl : A {
22}
23- (int) TestObjCMethodDecl: (int)i, ...;
24@end
25
26@implementation testObjCMethodDecl
27- (int) TestObjCMethodDecl: (int)i, ... {
28  return 0;
29}
30@end
31
32@protocol TestObjCProtocolDecl
33- (void) foo;
34@end
35
36@interface TestObjCClass : A <P>
37- (void) foo;
38@end
39
40@implementation TestObjCClass : A {
41  int i;
42}
43- (void) foo {
44}
45@end
46
47@interface TestObjCClass (TestObjCCategoryDecl) <P>
48- (void) bar;
49@end
50
51@interface TestGenericInterface<T> : A<P> {
52}
53@end
54
55@implementation TestObjCClass (TestObjCCategoryDecl)
56- (void) bar {
57}
58@end
59
60@compatibility_alias TestObjCCompatibleAliasDecl A;
61
62@interface TestObjCProperty: A
63@property(getter=getterFoo, setter=setterFoo:) int foo;
64@property int bar;
65@end
66
67@implementation TestObjCProperty {
68  int i;
69}
70@synthesize foo=i;
71@synthesize bar;
72@end
73
74void TestBlockDecl(int x) {
75  ^(int y, ...){ x; };
76}
77
78@interface B
79+ (int) foo;
80@end
81
82void f(void) {
83  __typeof__(B.foo) Test;
84}
85
86// NOTE: CHECK lines have been autogenerated by gen_ast_dump_json_test.py
87
88
89// CHECK-NOT: {{^}}Dumping
90// CHECK:  "kind": "ObjCInterfaceDecl",
91// CHECK-NEXT:  "loc": {
92// CHECK-NEXT:   "offset": {{[0-9]+}},
93// CHECK-NEXT:   "file": "{{.*}}",
94// CHECK-NEXT:   "line": 9,
95// CHECK-NEXT:   "col": 12,
96// CHECK-NEXT:   "tokLen": 16
97// CHECK-NEXT:  },
98// CHECK-NEXT:  "range": {
99// CHECK-NEXT:   "begin": {
100// CHECK-NEXT:    "offset": {{[0-9]+}},
101// CHECK-NEXT:    "col": 1,
102// CHECK-NEXT:    "tokLen": 1
103// CHECK-NEXT:   },
104// CHECK-NEXT:   "end": {
105// CHECK-NEXT:    "offset": {{[0-9]+}},
106// CHECK-NEXT:    "line": 10,
107// CHECK-NEXT:    "col": 2,
108// CHECK-NEXT:    "tokLen": 3
109// CHECK-NEXT:   }
110// CHECK-NEXT:  },
111// CHECK-NEXT:  "name": "TestObjCIvarDecl",
112// CHECK-NEXT:  "mangledName": "_OBJC_CLASS_$_TestObjCIvarDecl",
113// CHECK-NEXT:  "super": {
114// CHECK-NEXT:   "id": "0x{{.*}}",
115// CHECK-NEXT:   "kind": "ObjCInterfaceDecl",
116// CHECK-NEXT:   "name": "A"
117// CHECK-NEXT:  },
118// CHECK-NEXT:  "implementation": {
119// CHECK-NEXT:   "id": "0x{{.*}}",
120// CHECK-NEXT:   "kind": "ObjCImplementationDecl",
121// CHECK-NEXT:   "name": "TestObjCIvarDecl"
122// CHECK-NEXT:  }
123// CHECK-NEXT: }
124
125
126// CHECK-NOT: {{^}}Dumping
127// CHECK:  "kind": "ObjCImplementationDecl",
128// CHECK-NEXT:  "loc": {
129// CHECK-NEXT:   "offset": {{[0-9]+}},
130// CHECK-NEXT:   "file": "{{.*}}",
131// CHECK-NEXT:   "line": 12,
132// CHECK-NEXT:   "col": 17,
133// CHECK-NEXT:   "tokLen": 16
134// CHECK-NEXT:  },
135// CHECK-NEXT:  "range": {
136// CHECK-NEXT:   "begin": {
137// CHECK-NEXT:    "offset": {{[0-9]+}},
138// CHECK-NEXT:    "col": 1,
139// CHECK-NEXT:    "tokLen": 1
140// CHECK-NEXT:   },
141// CHECK-NEXT:   "end": {
142// CHECK-NEXT:    "offset": {{[0-9]+}},
143// CHECK-NEXT:    "line": 19,
144// CHECK-NEXT:    "col": 1,
145// CHECK-NEXT:    "tokLen": 1
146// CHECK-NEXT:   }
147// CHECK-NEXT:  },
148// CHECK-NEXT:  "name": "TestObjCIvarDecl",
149// CHECK-NEXT:  "super": {
150// CHECK-NEXT:   "id": "0x0"
151// CHECK-NEXT:  },
152// CHECK-NEXT:  "interface": {
153// CHECK-NEXT:   "id": "0x{{.*}}",
154// CHECK-NEXT:   "kind": "ObjCInterfaceDecl",
155// CHECK-NEXT:   "name": "TestObjCIvarDecl"
156// CHECK-NEXT:  },
157// CHECK-NEXT:  "inner": [
158// CHECK-NEXT:   {
159// CHECK-NEXT:    "id": "0x{{.*}}",
160// CHECK-NEXT:    "kind": "ObjCIvarDecl",
161// CHECK-NEXT:    "loc": {
162// CHECK-NEXT:     "offset": {{[0-9]+}},
163// CHECK-NEXT:     "line": 13,
164// CHECK-NEXT:     "col": 7,
165// CHECK-NEXT:     "tokLen": 10
166// CHECK-NEXT:    },
167// CHECK-NEXT:    "range": {
168// CHECK-NEXT:     "begin": {
169// CHECK-NEXT:      "offset": {{[0-9]+}},
170// CHECK-NEXT:      "col": 3,
171// CHECK-NEXT:      "tokLen": 3
172// CHECK-NEXT:     },
173// CHECK-NEXT:     "end": {
174// CHECK-NEXT:      "offset": {{[0-9]+}},
175// CHECK-NEXT:      "col": 7,
176// CHECK-NEXT:      "tokLen": 10
177// CHECK-NEXT:     }
178// CHECK-NEXT:    },
179// CHECK-NEXT:    "name": "varDefault",
180// CHECK-NEXT:    "type": {
181// CHECK-NEXT:     "qualType": "int"
182// CHECK-NEXT:    },
183// CHECK-NEXT:    "access": "private"
184// CHECK-NEXT:   },
185// CHECK-NEXT:   {
186// CHECK-NEXT:    "id": "0x{{.*}}",
187// CHECK-NEXT:    "kind": "ObjCIvarDecl",
188// CHECK-NEXT:    "loc": {
189// CHECK-NEXT:     "offset": {{[0-9]+}},
190// CHECK-NEXT:     "line": 14,
191// CHECK-NEXT:     "col": 16,
192// CHECK-NEXT:     "tokLen": 10
193// CHECK-NEXT:    },
194// CHECK-NEXT:    "range": {
195// CHECK-NEXT:     "begin": {
196// CHECK-NEXT:      "offset": {{[0-9]+}},
197// CHECK-NEXT:      "col": 12,
198// CHECK-NEXT:      "tokLen": 3
199// CHECK-NEXT:     },
200// CHECK-NEXT:     "end": {
201// CHECK-NEXT:      "offset": {{[0-9]+}},
202// CHECK-NEXT:      "col": 16,
203// CHECK-NEXT:      "tokLen": 10
204// CHECK-NEXT:     }
205// CHECK-NEXT:    },
206// CHECK-NEXT:    "name": "varPrivate",
207// CHECK-NEXT:    "type": {
208// CHECK-NEXT:     "qualType": "int"
209// CHECK-NEXT:    },
210// CHECK-NEXT:    "access": "private"
211// CHECK-NEXT:   },
212// CHECK-NEXT:   {
213// CHECK-NEXT:    "id": "0x{{.*}}",
214// CHECK-NEXT:    "kind": "ObjCIvarDecl",
215// CHECK-NEXT:    "loc": {
216// CHECK-NEXT:     "offset": {{[0-9]+}},
217// CHECK-NEXT:     "line": 15,
218// CHECK-NEXT:     "col": 18,
219// CHECK-NEXT:     "tokLen": 12
220// CHECK-NEXT:    },
221// CHECK-NEXT:    "range": {
222// CHECK-NEXT:     "begin": {
223// CHECK-NEXT:      "offset": {{[0-9]+}},
224// CHECK-NEXT:      "col": 14,
225// CHECK-NEXT:      "tokLen": 3
226// CHECK-NEXT:     },
227// CHECK-NEXT:     "end": {
228// CHECK-NEXT:      "offset": {{[0-9]+}},
229// CHECK-NEXT:      "col": 18,
230// CHECK-NEXT:      "tokLen": 12
231// CHECK-NEXT:     }
232// CHECK-NEXT:    },
233// CHECK-NEXT:    "name": "varProtected",
234// CHECK-NEXT:    "type": {
235// CHECK-NEXT:     "qualType": "int"
236// CHECK-NEXT:    },
237// CHECK-NEXT:    "access": "protected"
238// CHECK-NEXT:   },
239// CHECK-NEXT:   {
240// CHECK-NEXT:    "id": "0x{{.*}}",
241// CHECK-NEXT:    "kind": "ObjCIvarDecl",
242// CHECK-NEXT:    "loc": {
243// CHECK-NEXT:     "offset": {{[0-9]+}},
244// CHECK-NEXT:     "line": 16,
245// CHECK-NEXT:     "col": 15,
246// CHECK-NEXT:     "tokLen": 9
247// CHECK-NEXT:    },
248// CHECK-NEXT:    "range": {
249// CHECK-NEXT:     "begin": {
250// CHECK-NEXT:      "offset": {{[0-9]+}},
251// CHECK-NEXT:      "col": 11,
252// CHECK-NEXT:      "tokLen": 3
253// CHECK-NEXT:     },
254// CHECK-NEXT:     "end": {
255// CHECK-NEXT:      "offset": {{[0-9]+}},
256// CHECK-NEXT:      "col": 15,
257// CHECK-NEXT:      "tokLen": 9
258// CHECK-NEXT:     }
259// CHECK-NEXT:    },
260// CHECK-NEXT:    "name": "varPublic",
261// CHECK-NEXT:    "type": {
262// CHECK-NEXT:     "qualType": "int"
263// CHECK-NEXT:    },
264// CHECK-NEXT:    "access": "public"
265// CHECK-NEXT:   },
266// CHECK-NEXT:   {
267// CHECK-NEXT:    "id": "0x{{.*}}",
268// CHECK-NEXT:    "kind": "ObjCIvarDecl",
269// CHECK-NEXT:    "loc": {
270// CHECK-NEXT:     "offset": {{[0-9]+}},
271// CHECK-NEXT:     "line": 17,
272// CHECK-NEXT:     "col": 16,
273// CHECK-NEXT:     "tokLen": 10
274// CHECK-NEXT:    },
275// CHECK-NEXT:    "range": {
276// CHECK-NEXT:     "begin": {
277// CHECK-NEXT:      "offset": {{[0-9]+}},
278// CHECK-NEXT:      "col": 12,
279// CHECK-NEXT:      "tokLen": 3
280// CHECK-NEXT:     },
281// CHECK-NEXT:     "end": {
282// CHECK-NEXT:      "offset": {{[0-9]+}},
283// CHECK-NEXT:      "col": 16,
284// CHECK-NEXT:      "tokLen": 10
285// CHECK-NEXT:     }
286// CHECK-NEXT:    },
287// CHECK-NEXT:    "name": "varPackage",
288// CHECK-NEXT:    "type": {
289// CHECK-NEXT:     "qualType": "int"
290// CHECK-NEXT:    },
291// CHECK-NEXT:    "access": "package"
292// CHECK-NEXT:   }
293// CHECK-NEXT:  ]
294// CHECK-NEXT: }
295
296
297// CHECK-NOT: {{^}}Dumping
298// CHECK:  "kind": "ObjCMethodDecl",
299// CHECK-NEXT:  "loc": {
300// CHECK-NEXT:   "offset": {{[0-9]+}},
301// CHECK-NEXT:   "file": "{{.*}}",
302// CHECK-NEXT:   "line": 23,
303// CHECK-NEXT:   "col": 1,
304// CHECK-NEXT:   "tokLen": 1
305// CHECK-NEXT:  },
306// CHECK-NEXT:  "range": {
307// CHECK-NEXT:   "begin": {
308// CHECK-NEXT:    "offset": {{[0-9]+}},
309// CHECK-NEXT:    "col": 1,
310// CHECK-NEXT:    "tokLen": 1
311// CHECK-NEXT:   },
312// CHECK-NEXT:   "end": {
313// CHECK-NEXT:    "offset": {{[0-9]+}},
314// CHECK-NEXT:    "col": 40,
315// CHECK-NEXT:    "tokLen": 1
316// CHECK-NEXT:   }
317// CHECK-NEXT:  },
318// CHECK-NEXT:  "name": "TestObjCMethodDecl:",
319// CHECK-NEXT:  "mangledName": "-[testObjCMethodDecl TestObjCMethodDecl:]",
320// CHECK-NEXT:  "returnType": {
321// CHECK-NEXT:   "qualType": "int"
322// CHECK-NEXT:  },
323// CHECK-NEXT:  "instance": true,
324// CHECK-NEXT:  "variadic": true,
325// CHECK-NEXT:  "inner": [
326// CHECK-NEXT:   {
327// CHECK-NEXT:    "id": "0x{{.*}}",
328// CHECK-NEXT:    "kind": "ParmVarDecl",
329// CHECK-NEXT:    "loc": {
330// CHECK-NEXT:     "offset": {{[0-9]+}},
331// CHECK-NEXT:     "col": 34,
332// CHECK-NEXT:     "tokLen": 1
333// CHECK-NEXT:    },
334// CHECK-NEXT:    "range": {
335// CHECK-NEXT:     "begin": {
336// CHECK-NEXT:      "offset": {{[0-9]+}},
337// CHECK-NEXT:      "col": 30,
338// CHECK-NEXT:      "tokLen": 3
339// CHECK-NEXT:     },
340// CHECK-NEXT:     "end": {
341// CHECK-NEXT:      "offset": {{[0-9]+}},
342// CHECK-NEXT:      "col": 34,
343// CHECK-NEXT:      "tokLen": 1
344// CHECK-NEXT:     }
345// CHECK-NEXT:    },
346// CHECK-NEXT:    "name": "i",
347// CHECK-NEXT:    "type": {
348// CHECK-NEXT:     "qualType": "int"
349// CHECK-NEXT:    }
350// CHECK-NEXT:   }
351// CHECK-NEXT:  ]
352// CHECK-NEXT: }
353
354
355// CHECK-NOT: {{^}}Dumping
356// CHECK:  "kind": "ObjCMethodDecl",
357// CHECK-NEXT:  "loc": {
358// CHECK-NEXT:   "offset": {{[0-9]+}},
359// CHECK-NEXT:   "file": "{{.*}}",
360// CHECK-NEXT:   "line": 27,
361// CHECK-NEXT:   "col": 1,
362// CHECK-NEXT:   "tokLen": 1
363// CHECK-NEXT:  },
364// CHECK-NEXT:  "range": {
365// CHECK-NEXT:   "begin": {
366// CHECK-NEXT:    "offset": {{[0-9]+}},
367// CHECK-NEXT:    "col": 1,
368// CHECK-NEXT:    "tokLen": 1
369// CHECK-NEXT:   },
370// CHECK-NEXT:   "end": {
371// CHECK-NEXT:    "offset": {{[0-9]+}},
372// CHECK-NEXT:    "line": 29,
373// CHECK-NEXT:    "col": 1,
374// CHECK-NEXT:    "tokLen": 1
375// CHECK-NEXT:   }
376// CHECK-NEXT:  },
377// CHECK-NEXT:  "name": "TestObjCMethodDecl:",
378// CHECK-NEXT:  "mangledName": "-[testObjCMethodDecl TestObjCMethodDecl:]",
379// CHECK-NEXT:  "returnType": {
380// CHECK-NEXT:   "qualType": "int"
381// CHECK-NEXT:  },
382// CHECK-NEXT:  "instance": true,
383// CHECK-NEXT:  "variadic": true,
384// CHECK-NEXT:  "inner": [
385// CHECK-NEXT:   {
386// CHECK-NEXT:    "id": "0x{{.*}}",
387// CHECK-NEXT:    "kind": "ImplicitParamDecl",
388// CHECK-NEXT:    "loc": {},
389// CHECK-NEXT:    "range": {
390// CHECK-NEXT:     "begin": {},
391// CHECK-NEXT:     "end": {}
392// CHECK-NEXT:    },
393// CHECK-NEXT:    "isImplicit": true,
394// CHECK-NEXT:    "name": "self",
395// CHECK-NEXT:    "type": {
396// CHECK-NEXT:     "qualType": "testObjCMethodDecl *"
397// CHECK-NEXT:    }
398// CHECK-NEXT:   },
399// CHECK-NEXT:   {
400// CHECK-NEXT:    "id": "0x{{.*}}",
401// CHECK-NEXT:    "kind": "ImplicitParamDecl",
402// CHECK-NEXT:    "loc": {},
403// CHECK-NEXT:    "range": {
404// CHECK-NEXT:     "begin": {},
405// CHECK-NEXT:     "end": {}
406// CHECK-NEXT:    },
407// CHECK-NEXT:    "isImplicit": true,
408// CHECK-NEXT:    "name": "_cmd",
409// CHECK-NEXT:    "type": {
410// CHECK-NEXT:     "desugaredQualType": "SEL *",
411// CHECK-NEXT:     "qualType": "SEL",
412// CHECK-NEXT:     "typeAliasDeclId": "0x{{.*}}"
413// CHECK-NEXT:    }
414// CHECK-NEXT:   },
415// CHECK-NEXT:   {
416// CHECK-NEXT:    "id": "0x{{.*}}",
417// CHECK-NEXT:    "kind": "ParmVarDecl",
418// CHECK-NEXT:    "loc": {
419// CHECK-NEXT:     "offset": {{[0-9]+}},
420// CHECK-NEXT:     "line": 27,
421// CHECK-NEXT:     "col": 34,
422// CHECK-NEXT:     "tokLen": 1
423// CHECK-NEXT:    },
424// CHECK-NEXT:    "range": {
425// CHECK-NEXT:     "begin": {
426// CHECK-NEXT:      "offset": {{[0-9]+}},
427// CHECK-NEXT:      "col": 30,
428// CHECK-NEXT:      "tokLen": 3
429// CHECK-NEXT:     },
430// CHECK-NEXT:     "end": {
431// CHECK-NEXT:      "offset": {{[0-9]+}},
432// CHECK-NEXT:      "col": 34,
433// CHECK-NEXT:      "tokLen": 1
434// CHECK-NEXT:     }
435// CHECK-NEXT:    },
436// CHECK-NEXT:    "name": "i",
437// CHECK-NEXT:    "type": {
438// CHECK-NEXT:     "qualType": "int"
439// CHECK-NEXT:    }
440// CHECK-NEXT:   },
441// CHECK-NEXT:   {
442// CHECK-NEXT:    "id": "0x{{.*}}",
443// CHECK-NEXT:    "kind": "CompoundStmt",
444// CHECK-NEXT:    "range": {
445// CHECK-NEXT:     "begin": {
446// CHECK-NEXT:      "offset": {{[0-9]+}},
447// CHECK-NEXT:      "col": 41,
448// CHECK-NEXT:      "tokLen": 1
449// CHECK-NEXT:     },
450// CHECK-NEXT:     "end": {
451// CHECK-NEXT:      "offset": {{[0-9]+}},
452// CHECK-NEXT:      "line": 29,
453// CHECK-NEXT:      "col": 1,
454// CHECK-NEXT:      "tokLen": 1
455// CHECK-NEXT:     }
456// CHECK-NEXT:    },
457// CHECK-NEXT:    "inner": [
458// CHECK-NEXT:     {
459// CHECK-NEXT:      "id": "0x{{.*}}",
460// CHECK-NEXT:      "kind": "ReturnStmt",
461// CHECK-NEXT:      "range": {
462// CHECK-NEXT:       "begin": {
463// CHECK-NEXT:        "offset": {{[0-9]+}},
464// CHECK-NEXT:        "line": 28,
465// CHECK-NEXT:        "col": 3,
466// CHECK-NEXT:        "tokLen": 6
467// CHECK-NEXT:       },
468// CHECK-NEXT:       "end": {
469// CHECK-NEXT:        "offset": {{[0-9]+}},
470// CHECK-NEXT:        "col": 10,
471// CHECK-NEXT:        "tokLen": 1
472// CHECK-NEXT:       }
473// CHECK-NEXT:      },
474// CHECK-NEXT:      "inner": [
475// CHECK-NEXT:       {
476// CHECK-NEXT:        "id": "0x{{.*}}",
477// CHECK-NEXT:        "kind": "IntegerLiteral",
478// CHECK-NEXT:        "range": {
479// CHECK-NEXT:         "begin": {
480// CHECK-NEXT:          "offset": {{[0-9]+}},
481// CHECK-NEXT:          "col": 10,
482// CHECK-NEXT:          "tokLen": 1
483// CHECK-NEXT:         },
484// CHECK-NEXT:         "end": {
485// CHECK-NEXT:          "offset": {{[0-9]+}},
486// CHECK-NEXT:          "col": 10,
487// CHECK-NEXT:          "tokLen": 1
488// CHECK-NEXT:         }
489// CHECK-NEXT:        },
490// CHECK-NEXT:        "type": {
491// CHECK-NEXT:         "qualType": "int"
492// CHECK-NEXT:        },
493// CHECK-NEXT:        "valueCategory": "prvalue",
494// CHECK-NEXT:        "value": "0"
495// CHECK-NEXT:       }
496// CHECK-NEXT:      ]
497// CHECK-NEXT:     }
498// CHECK-NEXT:    ]
499// CHECK-NEXT:   }
500// CHECK-NEXT:  ]
501// CHECK-NEXT: }
502
503
504// CHECK-NOT: {{^}}Dumping
505// CHECK:  "kind": "ObjCProtocolDecl",
506// CHECK-NEXT:  "loc": {
507// CHECK-NEXT:   "offset": {{[0-9]+}},
508// CHECK-NEXT:   "file": "{{.*}}",
509// CHECK-NEXT:   "line": 32,
510// CHECK-NEXT:   "col": 11,
511// CHECK-NEXT:   "tokLen": 20
512// CHECK-NEXT:  },
513// CHECK-NEXT:  "range": {
514// CHECK-NEXT:   "begin": {
515// CHECK-NEXT:    "offset": {{[0-9]+}},
516// CHECK-NEXT:    "col": 1,
517// CHECK-NEXT:    "tokLen": 1
518// CHECK-NEXT:   },
519// CHECK-NEXT:   "end": {
520// CHECK-NEXT:    "offset": {{[0-9]+}},
521// CHECK-NEXT:    "line": 34,
522// CHECK-NEXT:    "col": 2,
523// CHECK-NEXT:    "tokLen": 3
524// CHECK-NEXT:   }
525// CHECK-NEXT:  },
526// CHECK-NEXT:  "name": "TestObjCProtocolDecl",
527// CHECK-NEXT:  "inner": [
528// CHECK-NEXT:   {
529// CHECK-NEXT:    "id": "0x{{.*}}",
530// CHECK-NEXT:    "kind": "ObjCMethodDecl",
531// CHECK-NEXT:    "loc": {
532// CHECK-NEXT:     "offset": {{[0-9]+}},
533// CHECK-NEXT:     "line": 33,
534// CHECK-NEXT:     "col": 1,
535// CHECK-NEXT:     "tokLen": 1
536// CHECK-NEXT:    },
537// CHECK-NEXT:    "range": {
538// CHECK-NEXT:     "begin": {
539// CHECK-NEXT:      "offset": {{[0-9]+}},
540// CHECK-NEXT:      "col": 1,
541// CHECK-NEXT:      "tokLen": 1
542// CHECK-NEXT:     },
543// CHECK-NEXT:     "end": {
544// CHECK-NEXT:      "offset": {{[0-9]+}},
545// CHECK-NEXT:      "col": 13,
546// CHECK-NEXT:      "tokLen": 1
547// CHECK-NEXT:     }
548// CHECK-NEXT:    },
549// CHECK-NEXT:    "name": "foo",
550// CHECK-NEXT:    "mangledName": "-[TestObjCProtocolDecl foo]",
551// CHECK-NEXT:    "returnType": {
552// CHECK-NEXT:     "qualType": "void"
553// CHECK-NEXT:    },
554// CHECK-NEXT:    "instance": true
555// CHECK-NEXT:   }
556// CHECK-NEXT:  ]
557// CHECK-NEXT: }
558
559
560// CHECK-NOT: {{^}}Dumping
561// CHECK:  "kind": "ObjCInterfaceDecl",
562// CHECK-NEXT:  "loc": {
563// CHECK-NEXT:   "offset": {{[0-9]+}},
564// CHECK-NEXT:   "file": "{{.*}}",
565// CHECK-NEXT:   "line": 36,
566// CHECK-NEXT:   "col": 12,
567// CHECK-NEXT:   "tokLen": 13
568// CHECK-NEXT:  },
569// CHECK-NEXT:  "range": {
570// CHECK-NEXT:   "begin": {
571// CHECK-NEXT:    "offset": {{[0-9]+}},
572// CHECK-NEXT:    "col": 1,
573// CHECK-NEXT:    "tokLen": 1
574// CHECK-NEXT:   },
575// CHECK-NEXT:   "end": {
576// CHECK-NEXT:    "offset": {{[0-9]+}},
577// CHECK-NEXT:    "line": 38,
578// CHECK-NEXT:    "col": 2,
579// CHECK-NEXT:    "tokLen": 3
580// CHECK-NEXT:   }
581// CHECK-NEXT:  },
582// CHECK-NEXT:  "name": "TestObjCClass",
583// CHECK-NEXT:  "mangledName": "_OBJC_CLASS_$_TestObjCClass",
584// CHECK-NEXT:  "super": {
585// CHECK-NEXT:   "id": "0x{{.*}}",
586// CHECK-NEXT:   "kind": "ObjCInterfaceDecl",
587// CHECK-NEXT:   "name": "A"
588// CHECK-NEXT:  },
589// CHECK-NEXT:  "implementation": {
590// CHECK-NEXT:   "id": "0x{{.*}}",
591// CHECK-NEXT:   "kind": "ObjCImplementationDecl",
592// CHECK-NEXT:   "name": "TestObjCClass"
593// CHECK-NEXT:  },
594// CHECK-NEXT:  "protocols": [
595// CHECK-NEXT:   {
596// CHECK-NEXT:    "id": "0x{{.*}}",
597// CHECK-NEXT:    "kind": "ObjCProtocolDecl",
598// CHECK-NEXT:    "name": "P"
599// CHECK-NEXT:   }
600// CHECK-NEXT:  ],
601// CHECK-NEXT:  "inner": [
602// CHECK-NEXT:   {
603// CHECK-NEXT:    "id": "0x{{.*}}",
604// CHECK-NEXT:    "kind": "ObjCMethodDecl",
605// CHECK-NEXT:    "loc": {
606// CHECK-NEXT:     "offset": {{[0-9]+}},
607// CHECK-NEXT:     "line": 37,
608// CHECK-NEXT:     "col": 1,
609// CHECK-NEXT:     "tokLen": 1
610// CHECK-NEXT:    },
611// CHECK-NEXT:    "range": {
612// CHECK-NEXT:     "begin": {
613// CHECK-NEXT:      "offset": {{[0-9]+}},
614// CHECK-NEXT:      "col": 1,
615// CHECK-NEXT:      "tokLen": 1
616// CHECK-NEXT:     },
617// CHECK-NEXT:     "end": {
618// CHECK-NEXT:      "offset": {{[0-9]+}},
619// CHECK-NEXT:      "col": 13,
620// CHECK-NEXT:      "tokLen": 1
621// CHECK-NEXT:     }
622// CHECK-NEXT:    },
623// CHECK-NEXT:    "name": "foo",
624// CHECK-NEXT:    "mangledName": "-[TestObjCClass foo]",
625// CHECK-NEXT:    "returnType": {
626// CHECK-NEXT:     "qualType": "void"
627// CHECK-NEXT:    },
628// CHECK-NEXT:    "instance": true
629// CHECK-NEXT:   }
630// CHECK-NEXT:  ]
631// CHECK-NEXT: }
632
633
634// CHECK-NOT: {{^}}Dumping
635// CHECK:  "kind": "ObjCImplementationDecl",
636// CHECK-NEXT:  "loc": {
637// CHECK-NEXT:   "offset": {{[0-9]+}},
638// CHECK-NEXT:   "file": "{{.*}}",
639// CHECK-NEXT:   "line": 40,
640// CHECK-NEXT:   "col": 17,
641// CHECK-NEXT:   "tokLen": 13
642// CHECK-NEXT:  },
643// CHECK-NEXT:  "range": {
644// CHECK-NEXT:   "begin": {
645// CHECK-NEXT:    "offset": {{[0-9]+}},
646// CHECK-NEXT:    "col": 1,
647// CHECK-NEXT:    "tokLen": 1
648// CHECK-NEXT:   },
649// CHECK-NEXT:   "end": {
650// CHECK-NEXT:    "offset": {{[0-9]+}},
651// CHECK-NEXT:    "line": 45,
652// CHECK-NEXT:    "col": 1,
653// CHECK-NEXT:    "tokLen": 1
654// CHECK-NEXT:   }
655// CHECK-NEXT:  },
656// CHECK-NEXT:  "name": "TestObjCClass",
657// CHECK-NEXT:  "super": {
658// CHECK-NEXT:   "id": "0x{{.*}}",
659// CHECK-NEXT:   "kind": "ObjCInterfaceDecl",
660// CHECK-NEXT:   "name": "A"
661// CHECK-NEXT:  },
662// CHECK-NEXT:  "interface": {
663// CHECK-NEXT:   "id": "0x{{.*}}",
664// CHECK-NEXT:   "kind": "ObjCInterfaceDecl",
665// CHECK-NEXT:   "name": "TestObjCClass"
666// CHECK-NEXT:  },
667// CHECK-NEXT:  "inner": [
668// CHECK-NEXT:   {
669// CHECK-NEXT:    "id": "0x{{.*}}",
670// CHECK-NEXT:    "kind": "ObjCIvarDecl",
671// CHECK-NEXT:    "loc": {
672// CHECK-NEXT:     "offset": {{[0-9]+}},
673// CHECK-NEXT:     "line": 41,
674// CHECK-NEXT:     "col": 7,
675// CHECK-NEXT:     "tokLen": 1
676// CHECK-NEXT:    },
677// CHECK-NEXT:    "range": {
678// CHECK-NEXT:     "begin": {
679// CHECK-NEXT:      "offset": {{[0-9]+}},
680// CHECK-NEXT:      "col": 3,
681// CHECK-NEXT:      "tokLen": 3
682// CHECK-NEXT:     },
683// CHECK-NEXT:     "end": {
684// CHECK-NEXT:      "offset": {{[0-9]+}},
685// CHECK-NEXT:      "col": 7,
686// CHECK-NEXT:      "tokLen": 1
687// CHECK-NEXT:     }
688// CHECK-NEXT:    },
689// CHECK-NEXT:    "name": "i",
690// CHECK-NEXT:    "type": {
691// CHECK-NEXT:     "qualType": "int"
692// CHECK-NEXT:    },
693// CHECK-NEXT:    "access": "private"
694// CHECK-NEXT:   },
695// CHECK-NEXT:   {
696// CHECK-NEXT:    "id": "0x{{.*}}",
697// CHECK-NEXT:    "kind": "ObjCMethodDecl",
698// CHECK-NEXT:    "loc": {
699// CHECK-NEXT:     "offset": {{[0-9]+}},
700// CHECK-NEXT:     "line": 43,
701// CHECK-NEXT:     "col": 1,
702// CHECK-NEXT:     "tokLen": 1
703// CHECK-NEXT:    },
704// CHECK-NEXT:    "range": {
705// CHECK-NEXT:     "begin": {
706// CHECK-NEXT:      "offset": {{[0-9]+}},
707// CHECK-NEXT:      "col": 1,
708// CHECK-NEXT:      "tokLen": 1
709// CHECK-NEXT:     },
710// CHECK-NEXT:     "end": {
711// CHECK-NEXT:      "offset": {{[0-9]+}},
712// CHECK-NEXT:      "line": 44,
713// CHECK-NEXT:      "col": 1,
714// CHECK-NEXT:      "tokLen": 1
715// CHECK-NEXT:     }
716// CHECK-NEXT:    },
717// CHECK-NEXT:    "name": "foo",
718// CHECK-NEXT:    "mangledName": "-[TestObjCClass foo]",
719// CHECK-NEXT:    "returnType": {
720// CHECK-NEXT:     "qualType": "void"
721// CHECK-NEXT:    },
722// CHECK-NEXT:    "instance": true,
723// CHECK-NEXT:    "inner": [
724// CHECK-NEXT:     {
725// CHECK-NEXT:      "id": "0x{{.*}}",
726// CHECK-NEXT:      "kind": "ImplicitParamDecl",
727// CHECK-NEXT:      "loc": {},
728// CHECK-NEXT:      "range": {
729// CHECK-NEXT:       "begin": {},
730// CHECK-NEXT:       "end": {}
731// CHECK-NEXT:      },
732// CHECK-NEXT:      "isImplicit": true,
733// CHECK-NEXT:      "name": "self",
734// CHECK-NEXT:      "type": {
735// CHECK-NEXT:       "qualType": "TestObjCClass *"
736// CHECK-NEXT:      }
737// CHECK-NEXT:     },
738// CHECK-NEXT:     {
739// CHECK-NEXT:      "id": "0x{{.*}}",
740// CHECK-NEXT:      "kind": "ImplicitParamDecl",
741// CHECK-NEXT:      "loc": {},
742// CHECK-NEXT:      "range": {
743// CHECK-NEXT:       "begin": {},
744// CHECK-NEXT:       "end": {}
745// CHECK-NEXT:      },
746// CHECK-NEXT:      "isImplicit": true,
747// CHECK-NEXT:      "name": "_cmd",
748// CHECK-NEXT:      "type": {
749// CHECK-NEXT:       "desugaredQualType": "SEL *",
750// CHECK-NEXT:       "qualType": "SEL",
751// CHECK-NEXT:       "typeAliasDeclId": "0x{{.*}}"
752// CHECK-NEXT:      }
753// CHECK-NEXT:     },
754// CHECK-NEXT:     {
755// CHECK-NEXT:      "id": "0x{{.*}}",
756// CHECK-NEXT:      "kind": "CompoundStmt",
757// CHECK-NEXT:      "range": {
758// CHECK-NEXT:       "begin": {
759// CHECK-NEXT:        "offset": {{[0-9]+}},
760// CHECK-NEXT:        "line": 43,
761// CHECK-NEXT:        "col": 14,
762// CHECK-NEXT:        "tokLen": 1
763// CHECK-NEXT:       },
764// CHECK-NEXT:       "end": {
765// CHECK-NEXT:        "offset": {{[0-9]+}},
766// CHECK-NEXT:        "line": 44,
767// CHECK-NEXT:        "col": 1,
768// CHECK-NEXT:        "tokLen": 1
769// CHECK-NEXT:       }
770// CHECK-NEXT:      }
771// CHECK-NEXT:     }
772// CHECK-NEXT:    ]
773// CHECK-NEXT:   }
774// CHECK-NEXT:  ]
775// CHECK-NEXT: }
776
777
778// CHECK-NOT: {{^}}Dumping
779// CHECK:  "kind": "ObjCCategoryDecl",
780// CHECK-NEXT:  "loc": {
781// CHECK-NEXT:   "offset": {{[0-9]+}},
782// CHECK-NEXT:   "file": "{{.*}}",
783// CHECK-NEXT:   "line": 47,
784// CHECK-NEXT:   "col": 12,
785// CHECK-NEXT:   "tokLen": 13
786// CHECK-NEXT:  },
787// CHECK-NEXT:  "range": {
788// CHECK-NEXT:   "begin": {
789// CHECK-NEXT:    "offset": {{[0-9]+}},
790// CHECK-NEXT:    "col": 1,
791// CHECK-NEXT:    "tokLen": 1
792// CHECK-NEXT:   },
793// CHECK-NEXT:   "end": {
794// CHECK-NEXT:    "offset": {{[0-9]+}},
795// CHECK-NEXT:    "line": 49,
796// CHECK-NEXT:    "col": 2,
797// CHECK-NEXT:    "tokLen": 3
798// CHECK-NEXT:   }
799// CHECK-NEXT:  },
800// CHECK-NEXT:  "name": "TestObjCCategoryDecl",
801// CHECK-NEXT:  "interface": {
802// CHECK-NEXT:   "id": "0x{{.*}}",
803// CHECK-NEXT:   "kind": "ObjCInterfaceDecl",
804// CHECK-NEXT:   "name": "TestObjCClass"
805// CHECK-NEXT:  },
806// CHECK-NEXT:  "implementation": {
807// CHECK-NEXT:   "id": "0x{{.*}}",
808// CHECK-NEXT:   "kind": "ObjCCategoryImplDecl",
809// CHECK-NEXT:   "name": "TestObjCCategoryDecl"
810// CHECK-NEXT:  },
811// CHECK-NEXT:  "protocols": [
812// CHECK-NEXT:   {
813// CHECK-NEXT:    "id": "0x{{.*}}",
814// CHECK-NEXT:    "kind": "ObjCProtocolDecl",
815// CHECK-NEXT:    "name": "P"
816// CHECK-NEXT:   }
817// CHECK-NEXT:  ],
818// CHECK-NEXT:  "inner": [
819// CHECK-NEXT:   {
820// CHECK-NEXT:    "id": "0x{{.*}}",
821// CHECK-NEXT:    "kind": "ObjCMethodDecl",
822// CHECK-NEXT:    "loc": {
823// CHECK-NEXT:     "offset": {{[0-9]+}},
824// CHECK-NEXT:     "line": 48,
825// CHECK-NEXT:     "col": 1,
826// CHECK-NEXT:     "tokLen": 1
827// CHECK-NEXT:    },
828// CHECK-NEXT:    "range": {
829// CHECK-NEXT:     "begin": {
830// CHECK-NEXT:      "offset": {{[0-9]+}},
831// CHECK-NEXT:      "col": 1,
832// CHECK-NEXT:      "tokLen": 1
833// CHECK-NEXT:     },
834// CHECK-NEXT:     "end": {
835// CHECK-NEXT:      "offset": {{[0-9]+}},
836// CHECK-NEXT:      "col": 13,
837// CHECK-NEXT:      "tokLen": 1
838// CHECK-NEXT:     }
839// CHECK-NEXT:    },
840// CHECK-NEXT:    "name": "bar",
841// CHECK-NEXT:    "mangledName": "-[TestObjCClass(TestObjCCategoryDecl) bar]",
842// CHECK-NEXT:    "returnType": {
843// CHECK-NEXT:     "qualType": "void"
844// CHECK-NEXT:    },
845// CHECK-NEXT:    "instance": true
846// CHECK-NEXT:   }
847// CHECK-NEXT:  ]
848// CHECK-NEXT: }
849
850
851// CHECK-NOT: {{^}}Dumping
852// CHECK:  "kind": "ObjCInterfaceDecl",
853// CHECK-NEXT:  "loc": {
854// CHECK-NEXT:   "offset": {{[0-9]+}},
855// CHECK-NEXT:   "file": "{{.*}}",
856// CHECK-NEXT:   "line": 51,
857// CHECK-NEXT:   "col": 12,
858// CHECK-NEXT:   "tokLen": 20
859// CHECK-NEXT:  },
860// CHECK-NEXT:  "range": {
861// CHECK-NEXT:   "begin": {
862// CHECK-NEXT:    "offset": {{[0-9]+}},
863// CHECK-NEXT:    "col": 1,
864// CHECK-NEXT:    "tokLen": 1
865// CHECK-NEXT:   },
866// CHECK-NEXT:   "end": {
867// CHECK-NEXT:    "offset": {{[0-9]+}},
868// CHECK-NEXT:    "line": 53,
869// CHECK-NEXT:    "col": 2,
870// CHECK-NEXT:    "tokLen": 3
871// CHECK-NEXT:   }
872// CHECK-NEXT:  },
873// CHECK-NEXT:  "name": "TestGenericInterface",
874// CHECK-NEXT:  "mangledName": "_OBJC_CLASS_$_TestGenericInterface",
875// CHECK-NEXT:  "super": {
876// CHECK-NEXT:   "id": "0x{{.*}}",
877// CHECK-NEXT:   "kind": "ObjCInterfaceDecl",
878// CHECK-NEXT:   "name": "A"
879// CHECK-NEXT:  },
880// CHECK-NEXT:  "implementation": {
881// CHECK-NEXT:   "id": "0x0"
882// CHECK-NEXT:  },
883// CHECK-NEXT:  "protocols": [
884// CHECK-NEXT:   {
885// CHECK-NEXT:    "id": "0x{{.*}}",
886// CHECK-NEXT:    "kind": "ObjCProtocolDecl",
887// CHECK-NEXT:    "name": "P"
888// CHECK-NEXT:   }
889// CHECK-NEXT:  ],
890// CHECK-NEXT:  "inner": [
891// CHECK-NEXT:   {
892// CHECK-NEXT:    "id": "0x{{.*}}",
893// CHECK-NEXT:    "kind": "ObjCTypeParamDecl",
894// CHECK-NEXT:    "loc": {
895// CHECK-NEXT:     "offset": {{[0-9]+}},
896// CHECK-NEXT:     "line": 51,
897// CHECK-NEXT:     "col": 33,
898// CHECK-NEXT:     "tokLen": 1
899// CHECK-NEXT:    },
900// CHECK-NEXT:    "range": {
901// CHECK-NEXT:     "begin": {
902// CHECK-NEXT:      "offset": {{[0-9]+}},
903// CHECK-NEXT:      "col": 33,
904// CHECK-NEXT:      "tokLen": 1
905// CHECK-NEXT:     },
906// CHECK-NEXT:     "end": {
907// CHECK-NEXT:      "offset": {{[0-9]+}},
908// CHECK-NEXT:      "col": 33,
909// CHECK-NEXT:      "tokLen": 1
910// CHECK-NEXT:     }
911// CHECK-NEXT:    },
912// CHECK-NEXT:    "name": "T",
913// CHECK-NEXT:    "type": {
914// CHECK-NEXT:     "qualType": "id",
915// CHECK-NEXT:     "typeAliasDeclId": "0x{{.*}}"
916// CHECK-NEXT:    }
917// CHECK-NEXT:   }
918// CHECK-NEXT:  ]
919// CHECK-NEXT: }
920
921
922// CHECK-NOT: {{^}}Dumping
923// CHECK:  "kind": "ObjCCategoryImplDecl",
924// CHECK-NEXT:  "loc": {
925// CHECK-NEXT:   "offset": {{[0-9]+}},
926// CHECK-NEXT:   "file": "{{.*}}",
927// CHECK-NEXT:   "line": 55,
928// CHECK-NEXT:   "col": 17,
929// CHECK-NEXT:   "tokLen": 13
930// CHECK-NEXT:  },
931// CHECK-NEXT:  "range": {
932// CHECK-NEXT:   "begin": {
933// CHECK-NEXT:    "offset": {{[0-9]+}},
934// CHECK-NEXT:    "col": 1,
935// CHECK-NEXT:    "tokLen": 1
936// CHECK-NEXT:   },
937// CHECK-NEXT:   "end": {
938// CHECK-NEXT:    "offset": {{[0-9]+}},
939// CHECK-NEXT:    "line": 58,
940// CHECK-NEXT:    "col": 1,
941// CHECK-NEXT:    "tokLen": 1
942// CHECK-NEXT:   }
943// CHECK-NEXT:  },
944// CHECK-NEXT:  "name": "TestObjCCategoryDecl",
945// CHECK-NEXT:  "interface": {
946// CHECK-NEXT:   "id": "0x{{.*}}",
947// CHECK-NEXT:   "kind": "ObjCInterfaceDecl",
948// CHECK-NEXT:   "name": "TestObjCClass"
949// CHECK-NEXT:  },
950// CHECK-NEXT:  "categoryDecl": {
951// CHECK-NEXT:   "id": "0x{{.*}}",
952// CHECK-NEXT:   "kind": "ObjCCategoryDecl",
953// CHECK-NEXT:   "name": "TestObjCCategoryDecl"
954// CHECK-NEXT:  },
955// CHECK-NEXT:  "inner": [
956// CHECK-NEXT:   {
957// CHECK-NEXT:    "id": "0x{{.*}}",
958// CHECK-NEXT:    "kind": "ObjCMethodDecl",
959// CHECK-NEXT:    "loc": {
960// CHECK-NEXT:     "offset": {{[0-9]+}},
961// CHECK-NEXT:     "line": 56,
962// CHECK-NEXT:     "col": 1,
963// CHECK-NEXT:     "tokLen": 1
964// CHECK-NEXT:    },
965// CHECK-NEXT:    "range": {
966// CHECK-NEXT:     "begin": {
967// CHECK-NEXT:      "offset": {{[0-9]+}},
968// CHECK-NEXT:      "col": 1,
969// CHECK-NEXT:      "tokLen": 1
970// CHECK-NEXT:     },
971// CHECK-NEXT:     "end": {
972// CHECK-NEXT:      "offset": {{[0-9]+}},
973// CHECK-NEXT:      "line": 57,
974// CHECK-NEXT:      "col": 1,
975// CHECK-NEXT:      "tokLen": 1
976// CHECK-NEXT:     }
977// CHECK-NEXT:    },
978// CHECK-NEXT:    "name": "bar",
979// CHECK-NEXT:    "mangledName": "-[TestObjCClass(TestObjCCategoryDecl) bar]",
980// CHECK-NEXT:    "returnType": {
981// CHECK-NEXT:     "qualType": "void"
982// CHECK-NEXT:    },
983// CHECK-NEXT:    "instance": true,
984// CHECK-NEXT:    "inner": [
985// CHECK-NEXT:     {
986// CHECK-NEXT:      "id": "0x{{.*}}",
987// CHECK-NEXT:      "kind": "ImplicitParamDecl",
988// CHECK-NEXT:      "loc": {},
989// CHECK-NEXT:      "range": {
990// CHECK-NEXT:       "begin": {},
991// CHECK-NEXT:       "end": {}
992// CHECK-NEXT:      },
993// CHECK-NEXT:      "isImplicit": true,
994// CHECK-NEXT:      "name": "self",
995// CHECK-NEXT:      "type": {
996// CHECK-NEXT:       "qualType": "TestObjCClass *"
997// CHECK-NEXT:      }
998// CHECK-NEXT:     },
999// CHECK-NEXT:     {
1000// CHECK-NEXT:      "id": "0x{{.*}}",
1001// CHECK-NEXT:      "kind": "ImplicitParamDecl",
1002// CHECK-NEXT:      "loc": {},
1003// CHECK-NEXT:      "range": {
1004// CHECK-NEXT:       "begin": {},
1005// CHECK-NEXT:       "end": {}
1006// CHECK-NEXT:      },
1007// CHECK-NEXT:      "isImplicit": true,
1008// CHECK-NEXT:      "name": "_cmd",
1009// CHECK-NEXT:      "type": {
1010// CHECK-NEXT:       "desugaredQualType": "SEL *",
1011// CHECK-NEXT:       "qualType": "SEL",
1012// CHECK-NEXT:       "typeAliasDeclId": "0x{{.*}}"
1013// CHECK-NEXT:      }
1014// CHECK-NEXT:     },
1015// CHECK-NEXT:     {
1016// CHECK-NEXT:      "id": "0x{{.*}}",
1017// CHECK-NEXT:      "kind": "CompoundStmt",
1018// CHECK-NEXT:      "range": {
1019// CHECK-NEXT:       "begin": {
1020// CHECK-NEXT:        "offset": {{[0-9]+}},
1021// CHECK-NEXT:        "line": 56,
1022// CHECK-NEXT:        "col": 14,
1023// CHECK-NEXT:        "tokLen": 1
1024// CHECK-NEXT:       },
1025// CHECK-NEXT:       "end": {
1026// CHECK-NEXT:        "offset": {{[0-9]+}},
1027// CHECK-NEXT:        "line": 57,
1028// CHECK-NEXT:        "col": 1,
1029// CHECK-NEXT:        "tokLen": 1
1030// CHECK-NEXT:       }
1031// CHECK-NEXT:      }
1032// CHECK-NEXT:     }
1033// CHECK-NEXT:    ]
1034// CHECK-NEXT:   }
1035// CHECK-NEXT:  ]
1036// CHECK-NEXT: }
1037
1038
1039// CHECK-NOT: {{^}}Dumping
1040// CHECK:  "kind": "ObjCCompatibleAliasDecl",
1041// CHECK-NEXT:  "loc": {
1042// CHECK-NEXT:   "offset": {{[0-9]+}},
1043// CHECK-NEXT:   "file": "{{.*}}",
1044// CHECK-NEXT:   "line": 60,
1045// CHECK-NEXT:   "col": 1,
1046// CHECK-NEXT:   "tokLen": 1
1047// CHECK-NEXT:  },
1048// CHECK-NEXT:  "range": {
1049// CHECK-NEXT:   "begin": {
1050// CHECK-NEXT:    "offset": {{[0-9]+}},
1051// CHECK-NEXT:    "col": 1,
1052// CHECK-NEXT:    "tokLen": 1
1053// CHECK-NEXT:   },
1054// CHECK-NEXT:   "end": {
1055// CHECK-NEXT:    "offset": {{[0-9]+}},
1056// CHECK-NEXT:    "col": 1,
1057// CHECK-NEXT:    "tokLen": 1
1058// CHECK-NEXT:   }
1059// CHECK-NEXT:  },
1060// CHECK-NEXT:  "name": "TestObjCCompatibleAliasDecl",
1061// CHECK-NEXT:  "interface": {
1062// CHECK-NEXT:   "id": "0x{{.*}}",
1063// CHECK-NEXT:   "kind": "ObjCInterfaceDecl",
1064// CHECK-NEXT:   "name": "A"
1065// CHECK-NEXT:  }
1066// CHECK-NEXT: }
1067
1068
1069// CHECK-NOT: {{^}}Dumping
1070// CHECK:  "kind": "ObjCInterfaceDecl",
1071// CHECK-NEXT:  "loc": {
1072// CHECK-NEXT:   "offset": {{[0-9]+}},
1073// CHECK-NEXT:   "file": "{{.*}}",
1074// CHECK-NEXT:   "line": 62,
1075// CHECK-NEXT:   "col": 12,
1076// CHECK-NEXT:   "tokLen": 16
1077// CHECK-NEXT:  },
1078// CHECK-NEXT:  "range": {
1079// CHECK-NEXT:   "begin": {
1080// CHECK-NEXT:    "offset": {{[0-9]+}},
1081// CHECK-NEXT:    "col": 1,
1082// CHECK-NEXT:    "tokLen": 1
1083// CHECK-NEXT:   },
1084// CHECK-NEXT:   "end": {
1085// CHECK-NEXT:    "offset": {{[0-9]+}},
1086// CHECK-NEXT:    "line": 65,
1087// CHECK-NEXT:    "col": 2,
1088// CHECK-NEXT:    "tokLen": 3
1089// CHECK-NEXT:   }
1090// CHECK-NEXT:  },
1091// CHECK-NEXT:  "name": "TestObjCProperty",
1092// CHECK-NEXT:  "mangledName": "_OBJC_CLASS_$_TestObjCProperty",
1093// CHECK-NEXT:  "super": {
1094// CHECK-NEXT:   "id": "0x{{.*}}",
1095// CHECK-NEXT:   "kind": "ObjCInterfaceDecl",
1096// CHECK-NEXT:   "name": "A"
1097// CHECK-NEXT:  },
1098// CHECK-NEXT:  "implementation": {
1099// CHECK-NEXT:   "id": "0x{{.*}}",
1100// CHECK-NEXT:   "kind": "ObjCImplementationDecl",
1101// CHECK-NEXT:   "name": "TestObjCProperty"
1102// CHECK-NEXT:  },
1103// CHECK-NEXT:  "inner": [
1104// CHECK-NEXT:   {
1105// CHECK-NEXT:    "id": "0x{{.*}}",
1106// CHECK-NEXT:    "kind": "ObjCPropertyDecl",
1107// CHECK-NEXT:    "loc": {
1108// CHECK-NEXT:     "offset": {{[0-9]+}},
1109// CHECK-NEXT:     "line": 63,
1110// CHECK-NEXT:     "col": 52,
1111// CHECK-NEXT:     "tokLen": 3
1112// CHECK-NEXT:    },
1113// CHECK-NEXT:    "range": {
1114// CHECK-NEXT:     "begin": {
1115// CHECK-NEXT:      "offset": {{[0-9]+}},
1116// CHECK-NEXT:      "col": 1,
1117// CHECK-NEXT:      "tokLen": 1
1118// CHECK-NEXT:     },
1119// CHECK-NEXT:     "end": {
1120// CHECK-NEXT:      "offset": {{[0-9]+}},
1121// CHECK-NEXT:      "col": 52,
1122// CHECK-NEXT:      "tokLen": 3
1123// CHECK-NEXT:     }
1124// CHECK-NEXT:    },
1125// CHECK-NEXT:    "name": "foo",
1126// CHECK-NEXT:    "type": {
1127// CHECK-NEXT:     "qualType": "int"
1128// CHECK-NEXT:    },
1129// CHECK-NEXT:    "getter": {
1130// CHECK-NEXT:     "id": "0x{{.*}}",
1131// CHECK-NEXT:     "kind": "ObjCMethodDecl",
1132// CHECK-NEXT:     "name": "getterFoo"
1133// CHECK-NEXT:    },
1134// CHECK-NEXT:    "setter": {
1135// CHECK-NEXT:     "id": "0x{{.*}}",
1136// CHECK-NEXT:     "kind": "ObjCMethodDecl",
1137// CHECK-NEXT:     "name": "setterFoo:"
1138// CHECK-NEXT:    },
1139// CHECK-NEXT:    "assign": true,
1140// CHECK-NEXT:    "readwrite": true,
1141// CHECK-NEXT:    "atomic": true,
1142// CHECK-NEXT:    "unsafe_unretained": true
1143// CHECK-NEXT:   },
1144// CHECK-NEXT:   {
1145// CHECK-NEXT:    "id": "0x{{.*}}",
1146// CHECK-NEXT:    "kind": "ObjCPropertyDecl",
1147// CHECK-NEXT:    "loc": {
1148// CHECK-NEXT:     "offset": {{[0-9]+}},
1149// CHECK-NEXT:     "line": 64,
1150// CHECK-NEXT:     "col": 15,
1151// CHECK-NEXT:     "tokLen": 3
1152// CHECK-NEXT:    },
1153// CHECK-NEXT:    "range": {
1154// CHECK-NEXT:     "begin": {
1155// CHECK-NEXT:      "offset": {{[0-9]+}},
1156// CHECK-NEXT:      "col": 1,
1157// CHECK-NEXT:      "tokLen": 1
1158// CHECK-NEXT:     },
1159// CHECK-NEXT:     "end": {
1160// CHECK-NEXT:      "offset": {{[0-9]+}},
1161// CHECK-NEXT:      "col": 15,
1162// CHECK-NEXT:      "tokLen": 3
1163// CHECK-NEXT:     }
1164// CHECK-NEXT:    },
1165// CHECK-NEXT:    "name": "bar",
1166// CHECK-NEXT:    "type": {
1167// CHECK-NEXT:     "qualType": "int"
1168// CHECK-NEXT:    },
1169// CHECK-NEXT:    "assign": true,
1170// CHECK-NEXT:    "readwrite": true,
1171// CHECK-NEXT:    "atomic": true,
1172// CHECK-NEXT:    "unsafe_unretained": true
1173// CHECK-NEXT:   },
1174// CHECK-NEXT:   {
1175// CHECK-NEXT:    "id": "0x{{.*}}",
1176// CHECK-NEXT:    "kind": "ObjCMethodDecl",
1177// CHECK-NEXT:    "loc": {
1178// CHECK-NEXT:     "offset": {{[0-9]+}},
1179// CHECK-NEXT:     "line": 63,
1180// CHECK-NEXT:     "col": 52,
1181// CHECK-NEXT:     "tokLen": 3
1182// CHECK-NEXT:    },
1183// CHECK-NEXT:    "range": {
1184// CHECK-NEXT:     "begin": {
1185// CHECK-NEXT:      "offset": {{[0-9]+}},
1186// CHECK-NEXT:      "col": 52,
1187// CHECK-NEXT:      "tokLen": 3
1188// CHECK-NEXT:     },
1189// CHECK-NEXT:     "end": {
1190// CHECK-NEXT:      "offset": {{[0-9]+}},
1191// CHECK-NEXT:      "col": 52,
1192// CHECK-NEXT:      "tokLen": 3
1193// CHECK-NEXT:     }
1194// CHECK-NEXT:    },
1195// CHECK-NEXT:    "isImplicit": true,
1196// CHECK-NEXT:    "name": "getterFoo",
1197// CHECK-NEXT:    "mangledName": "-[TestObjCProperty getterFoo]",
1198// CHECK-NEXT:    "returnType": {
1199// CHECK-NEXT:     "qualType": "int"
1200// CHECK-NEXT:    },
1201// CHECK-NEXT:    "instance": true
1202// CHECK-NEXT:   },
1203// CHECK-NEXT:   {
1204// CHECK-NEXT:    "id": "0x{{.*}}",
1205// CHECK-NEXT:    "kind": "ObjCMethodDecl",
1206// CHECK-NEXT:    "loc": {
1207// CHECK-NEXT:     "offset": {{[0-9]+}},
1208// CHECK-NEXT:     "col": 52,
1209// CHECK-NEXT:     "tokLen": 3
1210// CHECK-NEXT:    },
1211// CHECK-NEXT:    "range": {
1212// CHECK-NEXT:     "begin": {
1213// CHECK-NEXT:      "offset": {{[0-9]+}},
1214// CHECK-NEXT:      "col": 52,
1215// CHECK-NEXT:      "tokLen": 3
1216// CHECK-NEXT:     },
1217// CHECK-NEXT:     "end": {
1218// CHECK-NEXT:      "offset": {{[0-9]+}},
1219// CHECK-NEXT:      "col": 52,
1220// CHECK-NEXT:      "tokLen": 3
1221// CHECK-NEXT:     }
1222// CHECK-NEXT:    },
1223// CHECK-NEXT:    "isImplicit": true,
1224// CHECK-NEXT:    "name": "setterFoo:",
1225// CHECK-NEXT:    "mangledName": "-[TestObjCProperty setterFoo:]",
1226// CHECK-NEXT:    "returnType": {
1227// CHECK-NEXT:     "qualType": "void"
1228// CHECK-NEXT:    },
1229// CHECK-NEXT:    "instance": true,
1230// CHECK-NEXT:    "inner": [
1231// CHECK-NEXT:     {
1232// CHECK-NEXT:      "id": "0x{{.*}}",
1233// CHECK-NEXT:      "kind": "ParmVarDecl",
1234// CHECK-NEXT:      "loc": {
1235// CHECK-NEXT:       "offset": {{[0-9]+}},
1236// CHECK-NEXT:       "col": 52,
1237// CHECK-NEXT:       "tokLen": 3
1238// CHECK-NEXT:      },
1239// CHECK-NEXT:      "range": {
1240// CHECK-NEXT:       "begin": {
1241// CHECK-NEXT:        "offset": {{[0-9]+}},
1242// CHECK-NEXT:        "col": 52,
1243// CHECK-NEXT:        "tokLen": 3
1244// CHECK-NEXT:       },
1245// CHECK-NEXT:       "end": {
1246// CHECK-NEXT:        "offset": {{[0-9]+}},
1247// CHECK-NEXT:        "col": 52,
1248// CHECK-NEXT:        "tokLen": 3
1249// CHECK-NEXT:       }
1250// CHECK-NEXT:      },
1251// CHECK-NEXT:      "name": "foo",
1252// CHECK-NEXT:      "type": {
1253// CHECK-NEXT:       "qualType": "int"
1254// CHECK-NEXT:      }
1255// CHECK-NEXT:     }
1256// CHECK-NEXT:    ]
1257// CHECK-NEXT:   },
1258// CHECK-NEXT:   {
1259// CHECK-NEXT:    "id": "0x{{.*}}",
1260// CHECK-NEXT:    "kind": "ObjCMethodDecl",
1261// CHECK-NEXT:    "loc": {
1262// CHECK-NEXT:     "offset": {{[0-9]+}},
1263// CHECK-NEXT:     "line": 64,
1264// CHECK-NEXT:     "col": 15,
1265// CHECK-NEXT:     "tokLen": 3
1266// CHECK-NEXT:    },
1267// CHECK-NEXT:    "range": {
1268// CHECK-NEXT:     "begin": {
1269// CHECK-NEXT:      "offset": {{[0-9]+}},
1270// CHECK-NEXT:      "col": 15,
1271// CHECK-NEXT:      "tokLen": 3
1272// CHECK-NEXT:     },
1273// CHECK-NEXT:     "end": {
1274// CHECK-NEXT:      "offset": {{[0-9]+}},
1275// CHECK-NEXT:      "col": 15,
1276// CHECK-NEXT:      "tokLen": 3
1277// CHECK-NEXT:     }
1278// CHECK-NEXT:    },
1279// CHECK-NEXT:    "isImplicit": true,
1280// CHECK-NEXT:    "name": "bar",
1281// CHECK-NEXT:    "mangledName": "-[TestObjCProperty bar]",
1282// CHECK-NEXT:    "returnType": {
1283// CHECK-NEXT:     "qualType": "int"
1284// CHECK-NEXT:    },
1285// CHECK-NEXT:    "instance": true
1286// CHECK-NEXT:   },
1287// CHECK-NEXT:   {
1288// CHECK-NEXT:    "id": "0x{{.*}}",
1289// CHECK-NEXT:    "kind": "ObjCMethodDecl",
1290// CHECK-NEXT:    "loc": {
1291// CHECK-NEXT:     "offset": {{[0-9]+}},
1292// CHECK-NEXT:     "col": 15,
1293// CHECK-NEXT:     "tokLen": 3
1294// CHECK-NEXT:    },
1295// CHECK-NEXT:    "range": {
1296// CHECK-NEXT:     "begin": {
1297// CHECK-NEXT:      "offset": {{[0-9]+}},
1298// CHECK-NEXT:      "col": 15,
1299// CHECK-NEXT:      "tokLen": 3
1300// CHECK-NEXT:     },
1301// CHECK-NEXT:     "end": {
1302// CHECK-NEXT:      "offset": {{[0-9]+}},
1303// CHECK-NEXT:      "col": 15,
1304// CHECK-NEXT:      "tokLen": 3
1305// CHECK-NEXT:     }
1306// CHECK-NEXT:    },
1307// CHECK-NEXT:    "isImplicit": true,
1308// CHECK-NEXT:    "name": "setBar:",
1309// CHECK-NEXT:    "mangledName": "-[TestObjCProperty setBar:]",
1310// CHECK-NEXT:    "returnType": {
1311// CHECK-NEXT:     "qualType": "void"
1312// CHECK-NEXT:    },
1313// CHECK-NEXT:    "instance": true,
1314// CHECK-NEXT:    "inner": [
1315// CHECK-NEXT:     {
1316// CHECK-NEXT:      "id": "0x{{.*}}",
1317// CHECK-NEXT:      "kind": "ParmVarDecl",
1318// CHECK-NEXT:      "loc": {
1319// CHECK-NEXT:       "offset": {{[0-9]+}},
1320// CHECK-NEXT:       "col": 15,
1321// CHECK-NEXT:       "tokLen": 3
1322// CHECK-NEXT:      },
1323// CHECK-NEXT:      "range": {
1324// CHECK-NEXT:       "begin": {
1325// CHECK-NEXT:        "offset": {{[0-9]+}},
1326// CHECK-NEXT:        "col": 15,
1327// CHECK-NEXT:        "tokLen": 3
1328// CHECK-NEXT:       },
1329// CHECK-NEXT:       "end": {
1330// CHECK-NEXT:        "offset": {{[0-9]+}},
1331// CHECK-NEXT:        "col": 15,
1332// CHECK-NEXT:        "tokLen": 3
1333// CHECK-NEXT:       }
1334// CHECK-NEXT:      },
1335// CHECK-NEXT:      "name": "bar",
1336// CHECK-NEXT:      "type": {
1337// CHECK-NEXT:       "qualType": "int"
1338// CHECK-NEXT:      }
1339// CHECK-NEXT:     }
1340// CHECK-NEXT:    ]
1341// CHECK-NEXT:   }
1342// CHECK-NEXT:  ]
1343// CHECK-NEXT: }
1344
1345
1346// CHECK-NOT: {{^}}Dumping
1347// CHECK:  "kind": "ObjCImplementationDecl",
1348// CHECK-NEXT:  "loc": {
1349// CHECK-NEXT:   "offset": {{[0-9]+}},
1350// CHECK-NEXT:   "file": "{{.*}}",
1351// CHECK-NEXT:   "line": 67,
1352// CHECK-NEXT:   "col": 17,
1353// CHECK-NEXT:   "tokLen": 16
1354// CHECK-NEXT:  },
1355// CHECK-NEXT:  "range": {
1356// CHECK-NEXT:   "begin": {
1357// CHECK-NEXT:    "offset": {{[0-9]+}},
1358// CHECK-NEXT:    "col": 1,
1359// CHECK-NEXT:    "tokLen": 1
1360// CHECK-NEXT:   },
1361// CHECK-NEXT:   "end": {
1362// CHECK-NEXT:    "offset": {{[0-9]+}},
1363// CHECK-NEXT:    "line": 72,
1364// CHECK-NEXT:    "col": 1,
1365// CHECK-NEXT:    "tokLen": 1
1366// CHECK-NEXT:   }
1367// CHECK-NEXT:  },
1368// CHECK-NEXT:  "name": "TestObjCProperty",
1369// CHECK-NEXT:  "super": {
1370// CHECK-NEXT:   "id": "0x0"
1371// CHECK-NEXT:  },
1372// CHECK-NEXT:  "interface": {
1373// CHECK-NEXT:   "id": "0x{{.*}}",
1374// CHECK-NEXT:   "kind": "ObjCInterfaceDecl",
1375// CHECK-NEXT:   "name": "TestObjCProperty"
1376// CHECK-NEXT:  },
1377// CHECK-NEXT:  "inner": [
1378// CHECK-NEXT:   {
1379// CHECK-NEXT:    "id": "0x{{.*}}",
1380// CHECK-NEXT:    "kind": "ObjCIvarDecl",
1381// CHECK-NEXT:    "loc": {
1382// CHECK-NEXT:     "offset": {{[0-9]+}},
1383// CHECK-NEXT:     "line": 68,
1384// CHECK-NEXT:     "col": 7,
1385// CHECK-NEXT:     "tokLen": 1
1386// CHECK-NEXT:    },
1387// CHECK-NEXT:    "range": {
1388// CHECK-NEXT:     "begin": {
1389// CHECK-NEXT:      "offset": {{[0-9]+}},
1390// CHECK-NEXT:      "col": 3,
1391// CHECK-NEXT:      "tokLen": 3
1392// CHECK-NEXT:     },
1393// CHECK-NEXT:     "end": {
1394// CHECK-NEXT:      "offset": {{[0-9]+}},
1395// CHECK-NEXT:      "col": 7,
1396// CHECK-NEXT:      "tokLen": 1
1397// CHECK-NEXT:     }
1398// CHECK-NEXT:    },
1399// CHECK-NEXT:    "name": "i",
1400// CHECK-NEXT:    "type": {
1401// CHECK-NEXT:     "qualType": "int"
1402// CHECK-NEXT:    },
1403// CHECK-NEXT:    "access": "private"
1404// CHECK-NEXT:   },
1405// CHECK-NEXT:   {
1406// CHECK-NEXT:    "id": "0x{{.*}}",
1407// CHECK-NEXT:    "kind": "ObjCPropertyImplDecl",
1408// CHECK-NEXT:    "loc": {
1409// CHECK-NEXT:     "offset": {{[0-9]+}},
1410// CHECK-NEXT:     "line": 70,
1411// CHECK-NEXT:     "col": 13,
1412// CHECK-NEXT:     "tokLen": 3
1413// CHECK-NEXT:    },
1414// CHECK-NEXT:    "range": {
1415// CHECK-NEXT:     "begin": {
1416// CHECK-NEXT:      "offset": {{[0-9]+}},
1417// CHECK-NEXT:      "col": 1,
1418// CHECK-NEXT:      "tokLen": 1
1419// CHECK-NEXT:     },
1420// CHECK-NEXT:     "end": {
1421// CHECK-NEXT:      "offset": {{[0-9]+}},
1422// CHECK-NEXT:      "col": 17,
1423// CHECK-NEXT:      "tokLen": 1
1424// CHECK-NEXT:     }
1425// CHECK-NEXT:    },
1426// CHECK-NEXT:    "name": "foo",
1427// CHECK-NEXT:    "implKind": "synthesize",
1428// CHECK-NEXT:    "propertyDecl": {
1429// CHECK-NEXT:     "id": "0x{{.*}}",
1430// CHECK-NEXT:     "kind": "ObjCPropertyDecl",
1431// CHECK-NEXT:     "name": "foo"
1432// CHECK-NEXT:    },
1433// CHECK-NEXT:    "ivarDecl": {
1434// CHECK-NEXT:     "id": "0x{{.*}}",
1435// CHECK-NEXT:     "kind": "ObjCIvarDecl",
1436// CHECK-NEXT:     "name": "i",
1437// CHECK-NEXT:     "type": {
1438// CHECK-NEXT:      "qualType": "int"
1439// CHECK-NEXT:     }
1440// CHECK-NEXT:    }
1441// CHECK-NEXT:   },
1442// CHECK-NEXT:   {
1443// CHECK-NEXT:    "id": "0x{{.*}}",
1444// CHECK-NEXT:    "kind": "ObjCIvarDecl",
1445// CHECK-NEXT:    "loc": {
1446// CHECK-NEXT:     "offset": {{[0-9]+}},
1447// CHECK-NEXT:     "line": 71,
1448// CHECK-NEXT:     "col": 13,
1449// CHECK-NEXT:     "tokLen": 3
1450// CHECK-NEXT:    },
1451// CHECK-NEXT:    "range": {
1452// CHECK-NEXT:     "begin": {
1453// CHECK-NEXT:      "offset": {{[0-9]+}},
1454// CHECK-NEXT:      "col": 13,
1455// CHECK-NEXT:      "tokLen": 3
1456// CHECK-NEXT:     },
1457// CHECK-NEXT:     "end": {
1458// CHECK-NEXT:      "offset": {{[0-9]+}},
1459// CHECK-NEXT:      "col": 13,
1460// CHECK-NEXT:      "tokLen": 3
1461// CHECK-NEXT:     }
1462// CHECK-NEXT:    },
1463// CHECK-NEXT:    "name": "bar",
1464// CHECK-NEXT:    "type": {
1465// CHECK-NEXT:     "qualType": "int"
1466// CHECK-NEXT:    },
1467// CHECK-NEXT:    "synthesized": true,
1468// CHECK-NEXT:    "access": "private"
1469// CHECK-NEXT:   },
1470// CHECK-NEXT:   {
1471// CHECK-NEXT:    "id": "0x{{.*}}",
1472// CHECK-NEXT:    "kind": "ObjCPropertyImplDecl",
1473// CHECK-NEXT:    "loc": {
1474// CHECK-NEXT:     "offset": {{[0-9]+}},
1475// CHECK-NEXT:     "col": 13,
1476// CHECK-NEXT:     "tokLen": 3
1477// CHECK-NEXT:    },
1478// CHECK-NEXT:    "range": {
1479// CHECK-NEXT:     "begin": {
1480// CHECK-NEXT:      "offset": {{[0-9]+}},
1481// CHECK-NEXT:      "col": 1,
1482// CHECK-NEXT:      "tokLen": 1
1483// CHECK-NEXT:     },
1484// CHECK-NEXT:     "end": {
1485// CHECK-NEXT:      "offset": {{[0-9]+}},
1486// CHECK-NEXT:      "col": 13,
1487// CHECK-NEXT:      "tokLen": 3
1488// CHECK-NEXT:     }
1489// CHECK-NEXT:    },
1490// CHECK-NEXT:    "name": "bar",
1491// CHECK-NEXT:    "implKind": "synthesize",
1492// CHECK-NEXT:    "propertyDecl": {
1493// CHECK-NEXT:     "id": "0x{{.*}}",
1494// CHECK-NEXT:     "kind": "ObjCPropertyDecl",
1495// CHECK-NEXT:     "name": "bar"
1496// CHECK-NEXT:    },
1497// CHECK-NEXT:    "ivarDecl": {
1498// CHECK-NEXT:     "id": "0x{{.*}}",
1499// CHECK-NEXT:     "kind": "ObjCIvarDecl",
1500// CHECK-NEXT:     "name": "bar",
1501// CHECK-NEXT:     "type": {
1502// CHECK-NEXT:      "qualType": "int"
1503// CHECK-NEXT:     }
1504// CHECK-NEXT:    }
1505// CHECK-NEXT:   },
1506// CHECK-NEXT:   {
1507// CHECK-NEXT:    "id": "0x{{.*}}",
1508// CHECK-NEXT:    "kind": "ObjCMethodDecl",
1509// CHECK-NEXT:    "loc": {
1510// CHECK-NEXT:     "offset": {{[0-9]+}},
1511// CHECK-NEXT:     "line": 70,
1512// CHECK-NEXT:     "col": 1,
1513// CHECK-NEXT:     "tokLen": 1
1514// CHECK-NEXT:    },
1515// CHECK-NEXT:    "range": {
1516// CHECK-NEXT:     "begin": {
1517// CHECK-NEXT:      "offset": {{[0-9]+}},
1518// CHECK-NEXT:      "col": 1,
1519// CHECK-NEXT:      "tokLen": 1
1520// CHECK-NEXT:     },
1521// CHECK-NEXT:     "end": {
1522// CHECK-NEXT:      "offset": {{[0-9]+}},
1523// CHECK-NEXT:      "col": 13,
1524// CHECK-NEXT:      "tokLen": 3
1525// CHECK-NEXT:     }
1526// CHECK-NEXT:    },
1527// CHECK-NEXT:    "isImplicit": true,
1528// CHECK-NEXT:    "name": "getterFoo",
1529// CHECK-NEXT:    "mangledName": "-[TestObjCProperty getterFoo]",
1530// CHECK-NEXT:    "returnType": {
1531// CHECK-NEXT:     "qualType": "int"
1532// CHECK-NEXT:    },
1533// CHECK-NEXT:    "instance": true
1534// CHECK-NEXT:   },
1535// CHECK-NEXT:   {
1536// CHECK-NEXT:    "id": "0x{{.*}}",
1537// CHECK-NEXT:    "kind": "ObjCMethodDecl",
1538// CHECK-NEXT:    "loc": {
1539// CHECK-NEXT:     "offset": {{[0-9]+}},
1540// CHECK-NEXT:     "col": 1,
1541// CHECK-NEXT:     "tokLen": 1
1542// CHECK-NEXT:    },
1543// CHECK-NEXT:    "range": {
1544// CHECK-NEXT:     "begin": {
1545// CHECK-NEXT:      "offset": {{[0-9]+}},
1546// CHECK-NEXT:      "col": 1,
1547// CHECK-NEXT:      "tokLen": 1
1548// CHECK-NEXT:     },
1549// CHECK-NEXT:     "end": {
1550// CHECK-NEXT:      "offset": {{[0-9]+}},
1551// CHECK-NEXT:      "col": 13,
1552// CHECK-NEXT:      "tokLen": 3
1553// CHECK-NEXT:     }
1554// CHECK-NEXT:    },
1555// CHECK-NEXT:    "isImplicit": true,
1556// CHECK-NEXT:    "name": "setterFoo:",
1557// CHECK-NEXT:    "mangledName": "-[TestObjCProperty setterFoo:]",
1558// CHECK-NEXT:    "returnType": {
1559// CHECK-NEXT:     "qualType": "void"
1560// CHECK-NEXT:    },
1561// CHECK-NEXT:    "instance": true,
1562// CHECK-NEXT:    "inner": [
1563// CHECK-NEXT:     {
1564// CHECK-NEXT:      "id": "0x{{.*}}",
1565// CHECK-NEXT:      "kind": "ParmVarDecl",
1566// CHECK-NEXT:      "loc": {
1567// CHECK-NEXT:       "offset": {{[0-9]+}},
1568// CHECK-NEXT:       "line": 63,
1569// CHECK-NEXT:       "col": 52,
1570// CHECK-NEXT:       "tokLen": 3
1571// CHECK-NEXT:      },
1572// CHECK-NEXT:      "range": {
1573// CHECK-NEXT:       "begin": {
1574// CHECK-NEXT:        "offset": {{[0-9]+}},
1575// CHECK-NEXT:        "col": 52,
1576// CHECK-NEXT:        "tokLen": 3
1577// CHECK-NEXT:       },
1578// CHECK-NEXT:       "end": {
1579// CHECK-NEXT:        "offset": {{[0-9]+}},
1580// CHECK-NEXT:        "col": 52,
1581// CHECK-NEXT:        "tokLen": 3
1582// CHECK-NEXT:       }
1583// CHECK-NEXT:      },
1584// CHECK-NEXT:      "name": "foo",
1585// CHECK-NEXT:      "type": {
1586// CHECK-NEXT:       "qualType": "int"
1587// CHECK-NEXT:      }
1588// CHECK-NEXT:     }
1589// CHECK-NEXT:    ]
1590// CHECK-NEXT:   },
1591// CHECK-NEXT:   {
1592// CHECK-NEXT:    "id": "0x{{.*}}",
1593// CHECK-NEXT:    "kind": "ObjCMethodDecl",
1594// CHECK-NEXT:    "loc": {
1595// CHECK-NEXT:     "offset": {{[0-9]+}},
1596// CHECK-NEXT:     "line": 71,
1597// CHECK-NEXT:     "col": 1,
1598// CHECK-NEXT:     "tokLen": 1
1599// CHECK-NEXT:    },
1600// CHECK-NEXT:    "range": {
1601// CHECK-NEXT:     "begin": {
1602// CHECK-NEXT:      "offset": {{[0-9]+}},
1603// CHECK-NEXT:      "col": 1,
1604// CHECK-NEXT:      "tokLen": 1
1605// CHECK-NEXT:     },
1606// CHECK-NEXT:     "end": {
1607// CHECK-NEXT:      "offset": {{[0-9]+}},
1608// CHECK-NEXT:      "col": 13,
1609// CHECK-NEXT:      "tokLen": 3
1610// CHECK-NEXT:     }
1611// CHECK-NEXT:    },
1612// CHECK-NEXT:    "isImplicit": true,
1613// CHECK-NEXT:    "name": "bar",
1614// CHECK-NEXT:    "mangledName": "-[TestObjCProperty bar]",
1615// CHECK-NEXT:    "returnType": {
1616// CHECK-NEXT:     "qualType": "int"
1617// CHECK-NEXT:    },
1618// CHECK-NEXT:    "instance": true
1619// CHECK-NEXT:   },
1620// CHECK-NEXT:   {
1621// CHECK-NEXT:    "id": "0x{{.*}}",
1622// CHECK-NEXT:    "kind": "ObjCMethodDecl",
1623// CHECK-NEXT:    "loc": {
1624// CHECK-NEXT:     "offset": {{[0-9]+}},
1625// CHECK-NEXT:     "col": 1,
1626// CHECK-NEXT:     "tokLen": 1
1627// CHECK-NEXT:    },
1628// CHECK-NEXT:    "range": {
1629// CHECK-NEXT:     "begin": {
1630// CHECK-NEXT:      "offset": {{[0-9]+}},
1631// CHECK-NEXT:      "col": 1,
1632// CHECK-NEXT:      "tokLen": 1
1633// CHECK-NEXT:     },
1634// CHECK-NEXT:     "end": {
1635// CHECK-NEXT:      "offset": {{[0-9]+}},
1636// CHECK-NEXT:      "col": 13,
1637// CHECK-NEXT:      "tokLen": 3
1638// CHECK-NEXT:     }
1639// CHECK-NEXT:    },
1640// CHECK-NEXT:    "isImplicit": true,
1641// CHECK-NEXT:    "name": "setBar:",
1642// CHECK-NEXT:    "mangledName": "-[TestObjCProperty setBar:]",
1643// CHECK-NEXT:    "returnType": {
1644// CHECK-NEXT:     "qualType": "void"
1645// CHECK-NEXT:    },
1646// CHECK-NEXT:    "instance": true,
1647// CHECK-NEXT:    "inner": [
1648// CHECK-NEXT:     {
1649// CHECK-NEXT:      "id": "0x{{.*}}",
1650// CHECK-NEXT:      "kind": "ParmVarDecl",
1651// CHECK-NEXT:      "loc": {
1652// CHECK-NEXT:       "offset": {{[0-9]+}},
1653// CHECK-NEXT:       "line": 64,
1654// CHECK-NEXT:       "col": 15,
1655// CHECK-NEXT:       "tokLen": 3
1656// CHECK-NEXT:      },
1657// CHECK-NEXT:      "range": {
1658// CHECK-NEXT:       "begin": {
1659// CHECK-NEXT:        "offset": {{[0-9]+}},
1660// CHECK-NEXT:        "col": 15,
1661// CHECK-NEXT:        "tokLen": 3
1662// CHECK-NEXT:       },
1663// CHECK-NEXT:       "end": {
1664// CHECK-NEXT:        "offset": {{[0-9]+}},
1665// CHECK-NEXT:        "col": 15,
1666// CHECK-NEXT:        "tokLen": 3
1667// CHECK-NEXT:       }
1668// CHECK-NEXT:      },
1669// CHECK-NEXT:      "name": "bar",
1670// CHECK-NEXT:      "type": {
1671// CHECK-NEXT:       "qualType": "int"
1672// CHECK-NEXT:      }
1673// CHECK-NEXT:     }
1674// CHECK-NEXT:    ]
1675// CHECK-NEXT:   }
1676// CHECK-NEXT:  ]
1677// CHECK-NEXT: }
1678
1679
1680// CHECK-NOT: {{^}}Dumping
1681// CHECK:  "kind": "FunctionDecl",
1682// CHECK-NEXT:  "loc": {
1683// CHECK-NEXT:   "offset": {{[0-9]+}},
1684// CHECK-NEXT:   "file": "{{.*}}",
1685// CHECK-NEXT:   "line": 74,
1686// CHECK-NEXT:   "col": 6,
1687// CHECK-NEXT:   "tokLen": 13
1688// CHECK-NEXT:  },
1689// CHECK-NEXT:  "range": {
1690// CHECK-NEXT:   "begin": {
1691// CHECK-NEXT:    "offset": {{[0-9]+}},
1692// CHECK-NEXT:    "col": 1,
1693// CHECK-NEXT:    "tokLen": 4
1694// CHECK-NEXT:   },
1695// CHECK-NEXT:   "end": {
1696// CHECK-NEXT:    "offset": {{[0-9]+}},
1697// CHECK-NEXT:    "line": 76,
1698// CHECK-NEXT:    "col": 1,
1699// CHECK-NEXT:    "tokLen": 1
1700// CHECK-NEXT:   }
1701// CHECK-NEXT:  },
1702// CHECK-NEXT:  "name": "TestBlockDecl",
1703// CHECK-NEXT:  "mangledName": "_TestBlockDecl",
1704// CHECK-NEXT:  "type": {
1705// CHECK-NEXT:   "qualType": "void (int)"
1706// CHECK-NEXT:  },
1707// CHECK-NEXT:  "inner": [
1708// CHECK-NEXT:   {
1709// CHECK-NEXT:    "id": "0x{{.*}}",
1710// CHECK-NEXT:    "kind": "ParmVarDecl",
1711// CHECK-NEXT:    "loc": {
1712// CHECK-NEXT:     "offset": {{[0-9]+}},
1713// CHECK-NEXT:     "line": 74,
1714// CHECK-NEXT:     "col": 24,
1715// CHECK-NEXT:     "tokLen": 1
1716// CHECK-NEXT:    },
1717// CHECK-NEXT:    "range": {
1718// CHECK-NEXT:     "begin": {
1719// CHECK-NEXT:      "offset": {{[0-9]+}},
1720// CHECK-NEXT:      "col": 20,
1721// CHECK-NEXT:      "tokLen": 3
1722// CHECK-NEXT:     },
1723// CHECK-NEXT:     "end": {
1724// CHECK-NEXT:      "offset": {{[0-9]+}},
1725// CHECK-NEXT:      "col": 24,
1726// CHECK-NEXT:      "tokLen": 1
1727// CHECK-NEXT:     }
1728// CHECK-NEXT:    },
1729// CHECK-NEXT:    "isUsed": true,
1730// CHECK-NEXT:    "name": "x",
1731// CHECK-NEXT:    "type": {
1732// CHECK-NEXT:     "qualType": "int"
1733// CHECK-NEXT:    }
1734// CHECK-NEXT:   },
1735// CHECK-NEXT:   {
1736// CHECK-NEXT:    "id": "0x{{.*}}",
1737// CHECK-NEXT:    "kind": "CompoundStmt",
1738// CHECK-NEXT:    "range": {
1739// CHECK-NEXT:     "begin": {
1740// CHECK-NEXT:      "offset": {{[0-9]+}},
1741// CHECK-NEXT:      "col": 27,
1742// CHECK-NEXT:      "tokLen": 1
1743// CHECK-NEXT:     },
1744// CHECK-NEXT:     "end": {
1745// CHECK-NEXT:      "offset": {{[0-9]+}},
1746// CHECK-NEXT:      "line": 76,
1747// CHECK-NEXT:      "col": 1,
1748// CHECK-NEXT:      "tokLen": 1
1749// CHECK-NEXT:     }
1750// CHECK-NEXT:    },
1751// CHECK-NEXT:    "inner": [
1752// CHECK-NEXT:     {
1753// CHECK-NEXT:      "id": "0x{{.*}}",
1754// CHECK-NEXT:      "kind": "ExprWithCleanups",
1755// CHECK-NEXT:      "range": {
1756// CHECK-NEXT:       "begin": {
1757// CHECK-NEXT:        "offset": {{[0-9]+}},
1758// CHECK-NEXT:        "line": 75,
1759// CHECK-NEXT:        "col": 3,
1760// CHECK-NEXT:        "tokLen": 1
1761// CHECK-NEXT:       },
1762// CHECK-NEXT:       "end": {
1763// CHECK-NEXT:        "offset": {{[0-9]+}},
1764// CHECK-NEXT:        "col": 21,
1765// CHECK-NEXT:        "tokLen": 1
1766// CHECK-NEXT:       }
1767// CHECK-NEXT:      },
1768// CHECK-NEXT:      "type": {
1769// CHECK-NEXT:       "qualType": "void (^)(int, ...)"
1770// CHECK-NEXT:      },
1771// CHECK-NEXT:      "valueCategory": "prvalue",
1772// CHECK-NEXT:      "cleanupsHaveSideEffects": true,
1773// CHECK-NEXT:      "cleanups": [
1774// CHECK-NEXT:       {
1775// CHECK-NEXT:        "id": "0x{{.*}}",
1776// CHECK-NEXT:        "kind": "BlockDecl"
1777// CHECK-NEXT:       }
1778// CHECK-NEXT:      ],
1779// CHECK-NEXT:      "inner": [
1780// CHECK-NEXT:       {
1781// CHECK-NEXT:        "id": "0x{{.*}}",
1782// CHECK-NEXT:        "kind": "BlockExpr",
1783// CHECK-NEXT:        "range": {
1784// CHECK-NEXT:         "begin": {
1785// CHECK-NEXT:          "offset": {{[0-9]+}},
1786// CHECK-NEXT:          "col": 3,
1787// CHECK-NEXT:          "tokLen": 1
1788// CHECK-NEXT:         },
1789// CHECK-NEXT:         "end": {
1790// CHECK-NEXT:          "offset": {{[0-9]+}},
1791// CHECK-NEXT:          "col": 21,
1792// CHECK-NEXT:          "tokLen": 1
1793// CHECK-NEXT:         }
1794// CHECK-NEXT:        },
1795// CHECK-NEXT:        "type": {
1796// CHECK-NEXT:         "qualType": "void (^)(int, ...)"
1797// CHECK-NEXT:        },
1798// CHECK-NEXT:        "valueCategory": "prvalue",
1799// CHECK-NEXT:        "inner": [
1800// CHECK-NEXT:         {
1801// CHECK-NEXT:          "id": "0x{{.*}}",
1802// CHECK-NEXT:          "kind": "BlockDecl",
1803// CHECK-NEXT:          "loc": {
1804// CHECK-NEXT:           "offset": {{[0-9]+}},
1805// CHECK-NEXT:           "col": 3,
1806// CHECK-NEXT:           "tokLen": 1
1807// CHECK-NEXT:          },
1808// CHECK-NEXT:          "range": {
1809// CHECK-NEXT:           "begin": {
1810// CHECK-NEXT:            "offset": {{[0-9]+}},
1811// CHECK-NEXT:            "col": 3,
1812// CHECK-NEXT:            "tokLen": 1
1813// CHECK-NEXT:           },
1814// CHECK-NEXT:           "end": {
1815// CHECK-NEXT:            "offset": {{[0-9]+}},
1816// CHECK-NEXT:            "col": 21,
1817// CHECK-NEXT:            "tokLen": 1
1818// CHECK-NEXT:           }
1819// CHECK-NEXT:          },
1820// CHECK-NEXT:          "variadic": true,
1821// CHECK-NEXT:          "inner": [
1822// CHECK-NEXT:           {
1823// CHECK-NEXT:            "id": "0x{{.*}}",
1824// CHECK-NEXT:            "kind": "ParmVarDecl",
1825// CHECK-NEXT:            "loc": {
1826// CHECK-NEXT:             "offset": {{[0-9]+}},
1827// CHECK-NEXT:             "col": 9,
1828// CHECK-NEXT:             "tokLen": 1
1829// CHECK-NEXT:            },
1830// CHECK-NEXT:            "range": {
1831// CHECK-NEXT:             "begin": {
1832// CHECK-NEXT:              "offset": {{[0-9]+}},
1833// CHECK-NEXT:              "col": 5,
1834// CHECK-NEXT:              "tokLen": 3
1835// CHECK-NEXT:             },
1836// CHECK-NEXT:             "end": {
1837// CHECK-NEXT:              "offset": {{[0-9]+}},
1838// CHECK-NEXT:              "col": 9,
1839// CHECK-NEXT:              "tokLen": 1
1840// CHECK-NEXT:             }
1841// CHECK-NEXT:            },
1842// CHECK-NEXT:            "name": "y",
1843// CHECK-NEXT:            "type": {
1844// CHECK-NEXT:             "qualType": "int"
1845// CHECK-NEXT:            }
1846// CHECK-NEXT:           },
1847// CHECK-NEXT:           {
1848// CHECK-NEXT:            "kind": "Capture",
1849// CHECK-NEXT:            "var": {
1850// CHECK-NEXT:             "id": "0x{{.*}}",
1851// CHECK-NEXT:             "kind": "ParmVarDecl",
1852// CHECK-NEXT:             "name": "x",
1853// CHECK-NEXT:             "type": {
1854// CHECK-NEXT:              "qualType": "int"
1855// CHECK-NEXT:             }
1856// CHECK-NEXT:            }
1857// CHECK-NEXT:           },
1858// CHECK-NEXT:           {
1859// CHECK-NEXT:            "id": "0x{{.*}}",
1860// CHECK-NEXT:            "kind": "CompoundStmt",
1861// CHECK-NEXT:            "range": {
1862// CHECK-NEXT:             "begin": {
1863// CHECK-NEXT:              "offset": {{[0-9]+}},
1864// CHECK-NEXT:              "col": 16,
1865// CHECK-NEXT:              "tokLen": 1
1866// CHECK-NEXT:             },
1867// CHECK-NEXT:             "end": {
1868// CHECK-NEXT:              "offset": {{[0-9]+}},
1869// CHECK-NEXT:              "col": 21,
1870// CHECK-NEXT:              "tokLen": 1
1871// CHECK-NEXT:             }
1872// CHECK-NEXT:            },
1873// CHECK-NEXT:            "inner": [
1874// CHECK-NEXT:             {
1875// CHECK-NEXT:              "id": "0x{{.*}}",
1876// CHECK-NEXT:              "kind": "ImplicitCastExpr",
1877// CHECK-NEXT:              "range": {
1878// CHECK-NEXT:               "begin": {
1879// CHECK-NEXT:                "offset": {{[0-9]+}},
1880// CHECK-NEXT:                "col": 18,
1881// CHECK-NEXT:                "tokLen": 1
1882// CHECK-NEXT:               },
1883// CHECK-NEXT:               "end": {
1884// CHECK-NEXT:                "offset": {{[0-9]+}},
1885// CHECK-NEXT:                "col": 18,
1886// CHECK-NEXT:                "tokLen": 1
1887// CHECK-NEXT:               }
1888// CHECK-NEXT:              },
1889// CHECK-NEXT:              "type": {
1890// CHECK-NEXT:               "qualType": "int"
1891// CHECK-NEXT:              },
1892// CHECK-NEXT:              "valueCategory": "prvalue",
1893// CHECK-NEXT:              "castKind": "LValueToRValue",
1894// CHECK-NEXT:              "inner": [
1895// CHECK-NEXT:               {
1896// CHECK-NEXT:                "id": "0x{{.*}}",
1897// CHECK-NEXT:                "kind": "DeclRefExpr",
1898// CHECK-NEXT:                "range": {
1899// CHECK-NEXT:                 "begin": {
1900// CHECK-NEXT:                  "offset": {{[0-9]+}},
1901// CHECK-NEXT:                  "col": 18,
1902// CHECK-NEXT:                  "tokLen": 1
1903// CHECK-NEXT:                 },
1904// CHECK-NEXT:                 "end": {
1905// CHECK-NEXT:                  "offset": {{[0-9]+}},
1906// CHECK-NEXT:                  "col": 18,
1907// CHECK-NEXT:                  "tokLen": 1
1908// CHECK-NEXT:                 }
1909// CHECK-NEXT:                },
1910// CHECK-NEXT:                "type": {
1911// CHECK-NEXT:                 "qualType": "const int"
1912// CHECK-NEXT:                },
1913// CHECK-NEXT:                "valueCategory": "lvalue",
1914// CHECK-NEXT:                "referencedDecl": {
1915// CHECK-NEXT:                 "id": "0x{{.*}}",
1916// CHECK-NEXT:                 "kind": "ParmVarDecl",
1917// CHECK-NEXT:                 "name": "x",
1918// CHECK-NEXT:                 "type": {
1919// CHECK-NEXT:                  "qualType": "int"
1920// CHECK-NEXT:                 }
1921// CHECK-NEXT:                }
1922// CHECK-NEXT:               }
1923// CHECK-NEXT:              ]
1924// CHECK-NEXT:             }
1925// CHECK-NEXT:            ]
1926// CHECK-NEXT:           }
1927// CHECK-NEXT:          ]
1928// CHECK-NEXT:         }
1929// CHECK-NEXT:        ]
1930// CHECK-NEXT:       }
1931// CHECK-NEXT:      ]
1932// CHECK-NEXT:     }
1933// CHECK-NEXT:    ]
1934// CHECK-NEXT:   }
1935// CHECK-NEXT:  ]
1936// CHECK-NEXT: }
1937
1938
1939// CHECK-NOT: {{^}}Dumping
1940// CHECK:  "kind": "VarDecl",
1941// CHECK-NEXT:  "loc": {
1942// CHECK-NEXT:   "offset": {{[0-9]+}},
1943// CHECK-NEXT:   "file": "{{.*}}",
1944// CHECK-NEXT:   "line": 83,
1945// CHECK-NEXT:   "col": 21,
1946// CHECK-NEXT:   "tokLen": 4
1947// CHECK-NEXT:  },
1948// CHECK-NEXT:  "range": {
1949// CHECK-NEXT:   "begin": {
1950// CHECK-NEXT:    "offset": {{[0-9]+}},
1951// CHECK-NEXT:    "col": 3,
1952// CHECK-NEXT:    "tokLen": 10
1953// CHECK-NEXT:   },
1954// CHECK-NEXT:   "end": {
1955// CHECK-NEXT:    "offset": {{[0-9]+}},
1956// CHECK-NEXT:    "col": 21,
1957// CHECK-NEXT:    "tokLen": 4
1958// CHECK-NEXT:   }
1959// CHECK-NEXT:  },
1960// CHECK-NEXT:  "name": "Test",
1961// CHECK-NEXT:  "type": {
1962// CHECK-NEXT:   "desugaredQualType": "int",
1963// CHECK-NEXT:   "qualType": "typeof (B.foo)"
1964// CHECK-NEXT:  }
1965// CHECK-NEXT: }
1966