[clang] Implement lifetime analysis for lifetime_capture_by(X) (#115921)
[llvm-project.git] / clang / test / ExtractAPI / objc_interface.m
blob4abccddc3b5c8ec9137fca6e7e52194922fb9b29
1 // RUN: rm -rf %t
2 // RUN: %clang_cc1 -extract-api --pretty-sgf --emit-sgf-symbol-labels-for-testing \
3 // RUN:   -x objective-c-header -triple arm64-apple-macosx %s -o %t/output.symbols.json -verify
5 @protocol Protocol
6 @end
8 // RUN: FileCheck %s --input-file %t/output.symbols.json --check-prefix SUPER
9 @interface Super <Protocol>
10 // SUPER: "!testRelLabel": "conformsTo $ c:objc(cs)Super $ c:objc(pl)Protocol"
11 // SUPER-LABEL: "!testLabel": "c:objc(cs)Super"
12 // SUPER: "accessLevel": "public",
13 // SUPER:      "declarationFragments": [
14 // SUPER-NEXT:   {
15 // SUPER-NEXT:     "kind": "keyword",
16 // SUPER-NEXT:     "spelling": "@interface"
17 // SUPER-NEXT:   },
18 // SUPER-NEXT:   {
19 // SUPER-NEXT:     "kind": "text",
20 // SUPER-NEXT:     "spelling": " "
21 // SUPER-NEXT:   },
22 // SUPER-NEXT:   {
23 // SUPER-NEXT:     "kind": "identifier",
24 // SUPER-NEXT:     "spelling": "Super"
25 // SUPER-NEXT:   }
26 // SUPER-NEXT: ],
27 // SUPER:      "kind": {
28 // SUPER-NEXT:   "displayName": "Class",
29 // SUPER-NEXT:   "identifier": "objective-c.class"
30 // SUPER-NEXT: },
31 // SUPER:   "title": "Super"
32 // SUPER:      "pathComponents": [
33 // SUPER-NEXT:   "Super"
34 // SUPER-NEXT: ]
36 // RUN: FileCheck %s --input-file %t/output.symbols.json --check-prefix PROP
37 @property(readonly, getter=getProperty) unsigned Property;
38 // PROP: "!testRelLabel": "memberOf $ c:objc(cs)Super(py)Property $ c:objc(cs)Super"
39 // PROP: "!testLabel": "c:objc(cs)Super(py)Property"
40 // PROP: "accessLevel": "public",
41 // PROP:      "declarationFragments": [
42 // PROP-NEXT:   {
43 // PROP-NEXT:     "kind": "keyword",
44 // PROP-NEXT:     "spelling": "@property"
45 // PROP-NEXT:   },
46 // PROP-NEXT:   {
47 // PROP-NEXT:     "kind": "text",
48 // PROP-NEXT:     "spelling": " ("
49 // PROP-NEXT:   },
50 // PROP-NEXT:   {
51 // PROP-NEXT:     "kind": "keyword",
52 // PROP-NEXT:     "spelling": "readonly"
53 // PROP-NEXT:   },
54 // PROP-NEXT:   {
55 // PROP-NEXT:     "kind": "text",
56 // PROP-NEXT:     "spelling": ", "
57 // PROP-NEXT:   },
58 // PROP-NEXT:   {
59 // PROP-NEXT:     "kind": "keyword",
60 // PROP-NEXT:     "spelling": "getter"
61 // PROP-NEXT:   },
62 // PROP-NEXT:   {
63 // PROP-NEXT:     "kind": "text",
64 // PROP-NEXT:     "spelling": "="
65 // PROP-NEXT:   },
66 // PROP-NEXT:   {
67 // PROP-NEXT:     "kind": "identifier",
68 // PROP-NEXT:     "spelling": "getProperty"
69 // PROP-NEXT:   },
70 // PROP-NEXT:   {
71 // PROP-NEXT:     "kind": "text",
72 // PROP-NEXT:     "spelling": ") "
73 // PROP-NEXT:   },
74 // PROP-NEXT:   {
75 // PROP-NEXT:     "kind": "typeIdentifier",
76 // PROP-NEXT:     "preciseIdentifier": "c:i",
77 // PROP-NEXT:     "spelling": "unsigned int"
78 // PROP-NEXT:   },
79 // PROP-NEXT:   {
80 // PROP-NEXT:     "kind": "text",
81 // PROP-NEXT:     "spelling": " "
82 // PROP-NEXT:   },
83 // PROP-NEXT:   {
84 // PROP-NEXT:     "kind": "identifier",
85 // PROP-NEXT:     "spelling": "Property"
86 // PROP-NEXT:   },
87 // PROP-NEXT:   {
88 // PROP-NEXT:     "kind": "text",
89 // PROP-NEXT:     "spelling": ";"
90 // PROP-NEXT:   }
91 // PROP-NEXT: ],
92 // PROP:      "kind": {
93 // PROP-NEXT:   "displayName": "Instance Property",
94 // PROP-NEXT:   "identifier": "objective-c.property"
95 // PROP-NEXT: },
96 // PROP:   "title": "Property"
97 // PROP:      "pathComponents": [
98 // PROP-NEXT:   "Super",
99 // PROP-NEXT:   "Property"
100 // PROP-NEXT: ]
102 // RUN: FileCheck %s --input-file %t/output.symbols.json --check-prefix GET
103 + (id)getWithProperty:(unsigned) Property;
104 // GET: "!testRelLabel": "memberOf $ c:objc(cs)Super(cm)getWithProperty: $ c:objc(cs)Super"
105 // GET-LABEL: "!testLabel": "c:objc(cs)Super(cm)getWithProperty:"
106 // GET: "accessLevel": "public",
107 // GET:      "declarationFragments": [
108 // GET-NEXT:   {
109 // GET-NEXT:     "kind": "text",
110 // GET-NEXT:     "spelling": "+ ("
111 // GET-NEXT:   },
112 // GET-NEXT:   {
113 // GET-NEXT:     "kind": "keyword",
114 // GET-NEXT:     "spelling": "id"
115 // GET-NEXT:   },
116 // GET-NEXT:   {
117 // GET-NEXT:     "kind": "text",
118 // GET-NEXT:     "spelling": ") "
119 // GET-NEXT:   },
120 // GET-NEXT:   {
121 // GET-NEXT:     "kind": "identifier",
122 // GET-NEXT:     "spelling": "getWithProperty:"
123 // GET-NEXT:   },
124 // GET-NEXT:   {
125 // GET-NEXT:     "kind": "text",
126 // GET-NEXT:     "spelling": "("
127 // GET-NEXT:   },
128 // GET-NEXT:   {
129 // GET-NEXT:     "kind": "typeIdentifier",
130 // GET-NEXT:     "preciseIdentifier": "c:i",
131 // GET-NEXT:     "spelling": "unsigned int"
132 // GET-NEXT:   },
133 // GET-NEXT:   {
134 // GET-NEXT:     "kind": "text",
135 // GET-NEXT:     "spelling": ") "
136 // GET-NEXT:   },
137 // GET-NEXT:   {
138 // GET-NEXT:     "kind": "internalParam",
139 // GET-NEXT:     "spelling": "Property"
140 // GET-NEXT:   },
141 // GET-NEXT:   {
142 // GET-NEXT:     "kind": "text",
143 // GET-NEXT:     "spelling": ";"
144 // GET-NEXT:   }
145 // GET-NEXT: ],
146 // GET:      "functionSignature": {
147 // GET-NEXT:   "parameters": [
148 // GET-NEXT:     {
149 // GET-NEXT:       "declarationFragments": [
150 // GET-NEXT:         {
151 // GET-NEXT:           "kind": "text",
152 // GET-NEXT:           "spelling": "("
153 // GET-NEXT:         },
154 // GET-NEXT:         {
155 // GET-NEXT:           "kind": "typeIdentifier",
156 // GET-NEXT:           "preciseIdentifier": "c:i",
157 // GET-NEXT:           "spelling": "unsigned int"
158 // GET-NEXT:         },
159 // GET-NEXT:         {
160 // GET-NEXT:           "kind": "text",
161 // GET-NEXT:           "spelling": ") "
162 // GET-NEXT:         },
163 // GET-NEXT:         {
164 // GET-NEXT:           "kind": "internalParam",
165 // GET-NEXT:           "spelling": "Property"
166 // GET-NEXT:         }
167 // GET-NEXT:       ],
168 // GET-NEXT:       "name": "Property"
169 // GET-NEXT:     }
170 // GET-NEXT:   ],
171 // GET-NEXT:   "returns": [
172 // GET-NEXT:     {
173 // GET-NEXT:       "kind": "keyword",
174 // GET-NEXT:       "spelling": "id"
175 // GET-NEXT:     }
176 // GET-NEXT:   ]
177 // GET-NEXT: },
178 // GET:      "kind": {
179 // GET-NEXT:   "displayName": "Type Method",
180 // GET-NEXT:   "identifier": "objective-c.type.method"
181 // GET-NEXT: },
182 // GET:   "title": "getWithProperty:"
183 // GET:      "pathComponents": [
184 // GET-NEXT:   "Super",
185 // GET-NEXT:   "getWithProperty:"
186 // GET-NEXT: ]
188 // RUN: FileCheck %s --input-file %t/output.symbols.json --check-prefix SET
189 - (void)setProperty:(unsigned) Property andOtherThing: (unsigned) Thing;
190 // SET: "!testRelLabel": "memberOf $ c:objc(cs)Super(im)setProperty:andOtherThing: $ c:objc(cs)Super"
191 // SET-LABEL: "!testLabel": "c:objc(cs)Super(im)setProperty:andOtherThing:"
192 // SET: "accessLevel": "public",
193 // SET:      "declarationFragments": [
194 // SET-NEXT:   {
195 // SET-NEXT:     "kind": "text",
196 // SET-NEXT:     "spelling": "- ("
197 // SET-NEXT:   },
198 // SET-NEXT:   {
199 // SET-NEXT:     "kind": "typeIdentifier",
200 // SET-NEXT:     "preciseIdentifier": "c:v",
201 // SET-NEXT:     "spelling": "void"
202 // SET-NEXT:   },
203 // SET-NEXT:   {
204 // SET-NEXT:     "kind": "text",
205 // SET-NEXT:     "spelling": ") "
206 // SET-NEXT:   },
207 // SET-NEXT:   {
208 // SET-NEXT:     "kind": "identifier",
209 // SET-NEXT:     "spelling": "setProperty:"
210 // SET-NEXT:   },
211 // SET-NEXT:   {
212 // SET-NEXT:     "kind": "text",
213 // SET-NEXT:     "spelling": "("
214 // SET-NEXT:   },
215 // SET-NEXT:   {
216 // SET-NEXT:     "kind": "typeIdentifier",
217 // SET-NEXT:     "preciseIdentifier": "c:i",
218 // SET-NEXT:     "spelling": "unsigned int"
219 // SET-NEXT:   },
220 // SET-NEXT:   {
221 // SET-NEXT:     "kind": "text",
222 // SET-NEXT:     "spelling": ") "
223 // SET-NEXT:   },
224 // SET-NEXT:   {
225 // SET-NEXT:     "kind": "internalParam",
226 // SET-NEXT:     "spelling": "Property"
227 // SET-NEXT:   },
228 // SET-NEXT:   {
229 // SET-NEXT:     "kind": "text",
230 // SET-NEXT:     "spelling": " "
231 // SET-NEXT:   },
232 // SET-NEXT:   {
233 // SET-NEXT:     "kind": "identifier",
234 // SET-NEXT:     "spelling": "andOtherThing:"
235 // SET-NEXT:   },
236 // SET-NEXT:   {
237 // SET-NEXT:     "kind": "text",
238 // SET-NEXT:     "spelling": "("
239 // SET-NEXT:   },
240 // SET-NEXT:   {
241 // SET-NEXT:     "kind": "typeIdentifier",
242 // SET-NEXT:     "preciseIdentifier": "c:i",
243 // SET-NEXT:     "spelling": "unsigned int"
244 // SET-NEXT:   },
245 // SET-NEXT:   {
246 // SET-NEXT:     "kind": "text",
247 // SET-NEXT:     "spelling": ") "
248 // SET-NEXT:   },
249 // SET-NEXT:   {
250 // SET-NEXT:     "kind": "internalParam",
251 // SET-NEXT:     "spelling": "Thing"
252 // SET-NEXT:   },
253 // SET-NEXT:   {
254 // SET-NEXT:     "kind": "text",
255 // SET-NEXT:     "spelling": ";"
256 // SET-NEXT:   }
257 // SET-NEXT: ],
258 // SET:      "functionSignature": {
259 // SET-NEXT:   "parameters": [
260 // SET-NEXT:     {
261 // SET-NEXT:       "declarationFragments": [
262 // SET-NEXT:         {
263 // SET-NEXT:           "kind": "text",
264 // SET-NEXT:           "spelling": "("
265 // SET-NEXT:         },
266 // SET-NEXT:         {
267 // SET-NEXT:           "kind": "typeIdentifier",
268 // SET-NEXT:           "preciseIdentifier": "c:i",
269 // SET-NEXT:           "spelling": "unsigned int"
270 // SET-NEXT:         },
271 // SET-NEXT:         {
272 // SET-NEXT:           "kind": "text",
273 // SET-NEXT:           "spelling": ") "
274 // SET-NEXT:         },
275 // SET-NEXT:         {
276 // SET-NEXT:           "kind": "internalParam",
277 // SET-NEXT:           "spelling": "Property"
278 // SET-NEXT:         }
279 // SET-NEXT:       ],
280 // SET-NEXT:       "name": "Property"
281 // SET-NEXT:     },
282 // SET-NEXT:     {
283 // SET-NEXT:       "declarationFragments": [
284 // SET-NEXT:         {
285 // SET-NEXT:           "kind": "text",
286 // SET-NEXT:           "spelling": "("
287 // SET-NEXT:         },
288 // SET-NEXT:         {
289 // SET-NEXT:           "kind": "typeIdentifier",
290 // SET-NEXT:           "preciseIdentifier": "c:i",
291 // SET-NEXT:           "spelling": "unsigned int"
292 // SET-NEXT:         },
293 // SET-NEXT:         {
294 // SET-NEXT:           "kind": "text",
295 // SET-NEXT:           "spelling": ") "
296 // SET-NEXT:         },
297 // SET-NEXT:         {
298 // SET-NEXT:           "kind": "internalParam",
299 // SET-NEXT:           "spelling": "Thing"
300 // SET-NEXT:         }
301 // SET-NEXT:       ],
302 // SET-NEXT:       "name": "Thing"
303 // SET-NEXT:     }
304 // SET-NEXT:   ],
305 // SET-NEXT:   "returns": [
306 // SET-NEXT:     {
307 // SET-NEXT:       "kind": "typeIdentifier",
308 // SET-NEXT:       "preciseIdentifier": "c:v",
309 // SET-NEXT:       "spelling": "void"
310 // SET-NEXT:     }
311 // SET-NEXT:   ]
312 // SET-NEXT: },
313 // SET:      "kind": {
314 // SET-NEXT:   "displayName": "Instance Method",
315 // SET-NEXT:   "identifier": "objective-c.method"
316 // SET-NEXT: },
317 // SET:   "title": "setProperty:andOtherThing:"
318 @end
320 // RUN: FileCheck %s --input-file %t/output.symbols.json --check-prefix DERIVED
321 @interface Derived : Super {
322 // DERIVED: "!testRelLabel": "inheritsFrom $ c:objc(cs)Derived $ c:objc(cs)Super"
324 // RUN: FileCheck %s --input-file %t/output.symbols.json --check-prefix IVAR
325   char Ivar;
326 // IVAR: "!testRelLabel": "memberOf $ c:objc(cs)Derived@Ivar $ c:objc(cs)Derived"
327 // IVAR-LABEL: "!testLabel": "c:objc(cs)Derived@Ivar"
328 // IVAR: "accessLevel": "public",
329 // IVAR:      "declarationFragments": [
330 // IVAR-NEXT:   {
331 // IVAR-NEXT:     "kind": "typeIdentifier",
332 // IVAR-NEXT:     "preciseIdentifier": "c:C",
333 // IVAR-NEXT:     "spelling": "char"
334 // IVAR-NEXT:   },
335 // IVAR-NEXT:   {
336 // IVAR-NEXT:     "kind": "text",
337 // IVAR-NEXT:     "spelling": " "
338 // IVAR-NEXT:   },
339 // IVAR-NEXT:   {
340 // IVAR-NEXT:     "kind": "identifier",
341 // IVAR-NEXT:     "spelling": "Ivar"
342 // IVAR-NEXT:   },
343 // IVAR-NEXT:   {
344 // IVAR-NEXT:     "kind": "text",
345 // IVAR-NEXT:     "spelling": ";"
346 // IVAR-NEXT:   }
347 // IVAR-NEXT: ],
348 // IVAR:      "kind": {
349 // IVAR-NEXT:   "displayName": "Instance Variable",
350 // IVAR-NEXT:   "identifier": "objective-c.ivar"
351 // IVAR-NEXT: },
352 // IVAR: "title": "Ivar"
353 // IVAR:      "pathComponents": [
354 // IVAR-NEXT:   "Derived",
355 // IVAR-NEXT:   "Ivar"
356 // IVAR-NEXT: ]
358 @end
360 // expected-no-diagnostics