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