1 // RUN: %clang_cc1 -triple x86_64-pc-linux -Wdocumentation -ast-dump=json %s | FileCheck %s
2
3 int global_decl;
4 extern __attribute__((alias("global_decl"))) int global_alias;
5
6 void cleanup_function(int*);
some()7 void some() {
8 __attribute__((cleanup(cleanup_function))) int var;
9 }
10
11 __attribute__((deprecated)) int deprecated_var0;
12 __attribute__((deprecated("reason"))) int deprecated_var1;
13 __attribute__((deprecated("reason", "replacement"))) int deprecated_var2;
14
15 __attribute__((unavailable)) int unavailable_var0;
16 __attribute__((unavailable("reason"))) int unavailable_var1;
17
18 __attribute__ ((section ("SECTION_NAME"))) int section_var;
19
20 __attribute__ ((visibility ("hidden"))) int visibility_var;
21
22 __thread __attribute__ ((tls_model ("local-exec"))) int tls_model_var;
23
24 // NOTE: CHECK lines have been autogenerated by gen_ast_dump_json_test.py
25 // using --filters=VarDecl
26
27
28 // CHECK-NOT: {{^}}Dumping
29 // CHECK: "kind": "VarDecl",
30 // CHECK-NEXT: "loc": {
31 // CHECK-NEXT: "offset": 97,
32 // CHECK-NEXT: "file": "{{.*}}",
33 // CHECK-NEXT: "line": 3,
34 // CHECK-NEXT: "col": 5,
35 // CHECK-NEXT: "tokLen": 11
36 // CHECK-NEXT: },
37 // CHECK-NEXT: "range": {
38 // CHECK-NEXT: "begin": {
39 // CHECK-NEXT: "offset": 93,
40 // CHECK-NEXT: "col": 1,
41 // CHECK-NEXT: "tokLen": 3
42 // CHECK-NEXT: },
43 // CHECK-NEXT: "end": {
44 // CHECK-NEXT: "offset": 97,
45 // CHECK-NEXT: "col": 5,
46 // CHECK-NEXT: "tokLen": 11
47 // CHECK-NEXT: }
48 // CHECK-NEXT: },
49 // CHECK-NEXT: "isUsed": true,
50 // CHECK-NEXT: "name": "global_decl",
51 // CHECK-NEXT: "mangledName": "global_decl",
52 // CHECK-NEXT: "type": {
53 // CHECK-NEXT: "qualType": "int"
54 // CHECK-NEXT: }
55 // CHECK-NEXT: }
56
57
58 // CHECK-NOT: {{^}}Dumping
59 // CHECK: "kind": "VarDecl",
60 // CHECK-NEXT: "loc": {
61 // CHECK-NEXT: "offset": 159,
62 // CHECK-NEXT: "line": 4,
63 // CHECK-NEXT: "col": 50,
64 // CHECK-NEXT: "tokLen": 12
65 // CHECK-NEXT: },
66 // CHECK-NEXT: "range": {
67 // CHECK-NEXT: "begin": {
68 // CHECK-NEXT: "offset": 110,
69 // CHECK-NEXT: "col": 1,
70 // CHECK-NEXT: "tokLen": 6
71 // CHECK-NEXT: },
72 // CHECK-NEXT: "end": {
73 // CHECK-NEXT: "offset": 159,
74 // CHECK-NEXT: "col": 50,
75 // CHECK-NEXT: "tokLen": 12
76 // CHECK-NEXT: }
77 // CHECK-NEXT: },
78 // CHECK-NEXT: "name": "global_alias",
79 // CHECK-NEXT: "mangledName": "global_alias",
80 // CHECK-NEXT: "type": {
81 // CHECK-NEXT: "qualType": "int"
82 // CHECK-NEXT: },
83 // CHECK-NEXT: "storageClass": "extern",
84 // CHECK-NEXT: "inner": [
85 // CHECK-NEXT: {
86 // CHECK-NEXT: "id": "0x{{.*}}",
87 // CHECK-NEXT: "kind": "AliasAttr",
88 // CHECK-NEXT: "range": {
89 // CHECK-NEXT: "begin": {
90 // CHECK-NEXT: "offset": 132,
91 // CHECK-NEXT: "col": 23,
92 // CHECK-NEXT: "tokLen": 5
93 // CHECK-NEXT: },
94 // CHECK-NEXT: "end": {
95 // CHECK-NEXT: "offset": 151,
96 // CHECK-NEXT: "col": 42,
97 // CHECK-NEXT: "tokLen": 1
98 // CHECK-NEXT: }
99 // CHECK-NEXT: },
100 // CHECK-NEXT: "aliasee": "global_decl"
101 // CHECK-NEXT: }
102 // CHECK-NEXT: ]
103 // CHECK-NEXT: }
104
105
106 // CHECK-NOT: {{^}}Dumping
107 // CHECK: "kind": "VarDecl",
108 // CHECK-NEXT: "loc": {
109 // CHECK-NEXT: "offset": 266,
110 // CHECK-NEXT: "col": 50,
111 // CHECK-NEXT: "tokLen": 3
112 // CHECK-NEXT: },
113 // CHECK-NEXT: "range": {
114 // CHECK-NEXT: "begin": {
115 // CHECK-NEXT: "offset": 219,
116 // CHECK-NEXT: "col": 3,
117 // CHECK-NEXT: "tokLen": 13
118 // CHECK-NEXT: },
119 // CHECK-NEXT: "end": {
120 // CHECK-NEXT: "offset": 266,
121 // CHECK-NEXT: "col": 50,
122 // CHECK-NEXT: "tokLen": 3
123 // CHECK-NEXT: }
124 // CHECK-NEXT: },
125 // CHECK-NEXT: "name": "var",
126 // CHECK-NEXT: "type": {
127 // CHECK-NEXT: "qualType": "int"
128 // CHECK-NEXT: },
129 // CHECK-NEXT: "inner": [
130 // CHECK-NEXT: {
131 // CHECK-NEXT: "id": "0x{{.*}}",
132 // CHECK-NEXT: "kind": "CleanupAttr",
133 // CHECK-NEXT: "range": {
134 // CHECK-NEXT: "begin": {
135 // CHECK-NEXT: "offset": 234,
136 // CHECK-NEXT: "col": 18,
137 // CHECK-NEXT: "tokLen": 7
138 // CHECK-NEXT: },
139 // CHECK-NEXT: "end": {
140 // CHECK-NEXT: "offset": 258,
141 // CHECK-NEXT: "col": 42,
142 // CHECK-NEXT: "tokLen": 1
143 // CHECK-NEXT: }
144 // CHECK-NEXT: },
145 // CHECK-NEXT: "cleanup_function": {
146 // CHECK-NEXT: "id": "0x{{.*}}",
147 // CHECK-NEXT: "kind": "FunctionDecl",
148 // CHECK-NEXT: "name": "cleanup_function",
149 // CHECK-NEXT: "type": {
150 // CHECK-NEXT: "qualType": "void (int *)"
151 // CHECK-NEXT: }
152 // CHECK-NEXT: }
153 // CHECK-NEXT: }
154 // CHECK-NEXT: ]
155 // CHECK-NEXT: }
156
157
158 // CHECK-NOT: {{^}}Dumping
159 // CHECK: "kind": "VarDecl",
160 // CHECK-NEXT: "loc": {
161 // CHECK-NEXT: "offset": 306,
162 // CHECK-NEXT: "line": 11,
163 // CHECK-NEXT: "col": 33,
164 // CHECK-NEXT: "tokLen": 15
165 // CHECK-NEXT: },
166 // CHECK-NEXT: "range": {
167 // CHECK-NEXT: "begin": {
168 // CHECK-NEXT: "offset": 274,
169 // CHECK-NEXT: "col": 1,
170 // CHECK-NEXT: "tokLen": 13
171 // CHECK-NEXT: },
172 // CHECK-NEXT: "end": {
173 // CHECK-NEXT: "offset": 306,
174 // CHECK-NEXT: "col": 33,
175 // CHECK-NEXT: "tokLen": 15
176 // CHECK-NEXT: }
177 // CHECK-NEXT: },
178 // CHECK-NEXT: "name": "deprecated_var0",
179 // CHECK-NEXT: "mangledName": "deprecated_var0",
180 // CHECK-NEXT: "type": {
181 // CHECK-NEXT: "qualType": "int"
182 // CHECK-NEXT: },
183 // CHECK-NEXT: "inner": [
184 // CHECK-NEXT: {
185 // CHECK-NEXT: "id": "0x{{.*}}",
186 // CHECK-NEXT: "kind": "DeprecatedAttr",
187 // CHECK-NEXT: "range": {
188 // CHECK-NEXT: "begin": {
189 // CHECK-NEXT: "offset": 289,
190 // CHECK-NEXT: "col": 16,
191 // CHECK-NEXT: "tokLen": 10
192 // CHECK-NEXT: },
193 // CHECK-NEXT: "end": {
194 // CHECK-NEXT: "offset": 289,
195 // CHECK-NEXT: "col": 16,
196 // CHECK-NEXT: "tokLen": 10
197 // CHECK-NEXT: }
198 // CHECK-NEXT: }
199 // CHECK-NEXT: }
200 // CHECK-NEXT: ]
201 // CHECK-NEXT: }
202
203
204 // CHECK-NOT: {{^}}Dumping
205 // CHECK: "kind": "VarDecl",
206 // CHECK-NEXT: "loc": {
207 // CHECK-NEXT: "offset": 365,
208 // CHECK-NEXT: "line": 12,
209 // CHECK-NEXT: "col": 43,
210 // CHECK-NEXT: "tokLen": 15
211 // CHECK-NEXT: },
212 // CHECK-NEXT: "range": {
213 // CHECK-NEXT: "begin": {
214 // CHECK-NEXT: "offset": 323,
215 // CHECK-NEXT: "col": 1,
216 // CHECK-NEXT: "tokLen": 13
217 // CHECK-NEXT: },
218 // CHECK-NEXT: "end": {
219 // CHECK-NEXT: "offset": 365,
220 // CHECK-NEXT: "col": 43,
221 // CHECK-NEXT: "tokLen": 15
222 // CHECK-NEXT: }
223 // CHECK-NEXT: },
224 // CHECK-NEXT: "name": "deprecated_var1",
225 // CHECK-NEXT: "mangledName": "deprecated_var1",
226 // CHECK-NEXT: "type": {
227 // CHECK-NEXT: "qualType": "int"
228 // CHECK-NEXT: },
229 // CHECK-NEXT: "inner": [
230 // CHECK-NEXT: {
231 // CHECK-NEXT: "id": "0x{{.*}}",
232 // CHECK-NEXT: "kind": "DeprecatedAttr",
233 // CHECK-NEXT: "range": {
234 // CHECK-NEXT: "begin": {
235 // CHECK-NEXT: "offset": 338,
236 // CHECK-NEXT: "col": 16,
237 // CHECK-NEXT: "tokLen": 10
238 // CHECK-NEXT: },
239 // CHECK-NEXT: "end": {
240 // CHECK-NEXT: "offset": 357,
241 // CHECK-NEXT: "col": 35,
242 // CHECK-NEXT: "tokLen": 1
243 // CHECK-NEXT: }
244 // CHECK-NEXT: },
245 // CHECK-NEXT: "message": "reason"
246 // CHECK-NEXT: }
247 // CHECK-NEXT: ]
248 // CHECK-NEXT: }
249
250
251 // CHECK-NOT: {{^}}Dumping
252 // CHECK: "kind": "VarDecl",
253 // CHECK-NEXT: "loc": {
254 // CHECK-NEXT: "offset": 439,
255 // CHECK-NEXT: "line": 13,
256 // CHECK-NEXT: "col": 58,
257 // CHECK-NEXT: "tokLen": 15
258 // CHECK-NEXT: },
259 // CHECK-NEXT: "range": {
260 // CHECK-NEXT: "begin": {
261 // CHECK-NEXT: "offset": 382,
262 // CHECK-NEXT: "col": 1,
263 // CHECK-NEXT: "tokLen": 13
264 // CHECK-NEXT: },
265 // CHECK-NEXT: "end": {
266 // CHECK-NEXT: "offset": 439,
267 // CHECK-NEXT: "col": 58,
268 // CHECK-NEXT: "tokLen": 15
269 // CHECK-NEXT: }
270 // CHECK-NEXT: },
271 // CHECK-NEXT: "name": "deprecated_var2",
272 // CHECK-NEXT: "mangledName": "deprecated_var2",
273 // CHECK-NEXT: "type": {
274 // CHECK-NEXT: "qualType": "int"
275 // CHECK-NEXT: },
276 // CHECK-NEXT: "inner": [
277 // CHECK-NEXT: {
278 // CHECK-NEXT: "id": "0x{{.*}}",
279 // CHECK-NEXT: "kind": "DeprecatedAttr",
280 // CHECK-NEXT: "range": {
281 // CHECK-NEXT: "begin": {
282 // CHECK-NEXT: "offset": 397,
283 // CHECK-NEXT: "col": 16,
284 // CHECK-NEXT: "tokLen": 10
285 // CHECK-NEXT: },
286 // CHECK-NEXT: "end": {
287 // CHECK-NEXT: "offset": 431,
288 // CHECK-NEXT: "col": 50,
289 // CHECK-NEXT: "tokLen": 1
290 // CHECK-NEXT: }
291 // CHECK-NEXT: },
292 // CHECK-NEXT: "message": "reason",
293 // CHECK-NEXT: "replacement": "replacement"
294 // CHECK-NEXT: }
295 // CHECK-NEXT: ]
296 // CHECK-NEXT: }
297
298
299 // CHECK-NOT: {{^}}Dumping
300 // CHECK: "kind": "VarDecl",
301 // CHECK-NEXT: "loc": {
302 // CHECK-NEXT: "offset": 490,
303 // CHECK-NEXT: "line": 15,
304 // CHECK-NEXT: "col": 34,
305 // CHECK-NEXT: "tokLen": 16
306 // CHECK-NEXT: },
307 // CHECK-NEXT: "range": {
308 // CHECK-NEXT: "begin": {
309 // CHECK-NEXT: "offset": 457,
310 // CHECK-NEXT: "col": 1,
311 // CHECK-NEXT: "tokLen": 13
312 // CHECK-NEXT: },
313 // CHECK-NEXT: "end": {
314 // CHECK-NEXT: "offset": 490,
315 // CHECK-NEXT: "col": 34,
316 // CHECK-NEXT: "tokLen": 16
317 // CHECK-NEXT: }
318 // CHECK-NEXT: },
319 // CHECK-NEXT: "name": "unavailable_var0",
320 // CHECK-NEXT: "mangledName": "unavailable_var0",
321 // CHECK-NEXT: "type": {
322 // CHECK-NEXT: "qualType": "int"
323 // CHECK-NEXT: },
324 // CHECK-NEXT: "inner": [
325 // CHECK-NEXT: {
326 // CHECK-NEXT: "id": "0x{{.*}}",
327 // CHECK-NEXT: "kind": "UnavailableAttr",
328 // CHECK-NEXT: "range": {
329 // CHECK-NEXT: "begin": {
330 // CHECK-NEXT: "offset": 472,
331 // CHECK-NEXT: "col": 16,
332 // CHECK-NEXT: "tokLen": 11
333 // CHECK-NEXT: },
334 // CHECK-NEXT: "end": {
335 // CHECK-NEXT: "offset": 472,
336 // CHECK-NEXT: "col": 16,
337 // CHECK-NEXT: "tokLen": 11
338 // CHECK-NEXT: }
339 // CHECK-NEXT: }
340 // CHECK-NEXT: }
341 // CHECK-NEXT: ]
342 // CHECK-NEXT: }
343
344
345 // CHECK-NOT: {{^}}Dumping
346 // CHECK: "kind": "VarDecl",
347 // CHECK-NEXT: "loc": {
348 // CHECK-NEXT: "offset": 551,
349 // CHECK-NEXT: "line": 16,
350 // CHECK-NEXT: "col": 44,
351 // CHECK-NEXT: "tokLen": 16
352 // CHECK-NEXT: },
353 // CHECK-NEXT: "range": {
354 // CHECK-NEXT: "begin": {
355 // CHECK-NEXT: "offset": 508,
356 // CHECK-NEXT: "col": 1,
357 // CHECK-NEXT: "tokLen": 13
358 // CHECK-NEXT: },
359 // CHECK-NEXT: "end": {
360 // CHECK-NEXT: "offset": 551,
361 // CHECK-NEXT: "col": 44,
362 // CHECK-NEXT: "tokLen": 16
363 // CHECK-NEXT: }
364 // CHECK-NEXT: },
365 // CHECK-NEXT: "name": "unavailable_var1",
366 // CHECK-NEXT: "mangledName": "unavailable_var1",
367 // CHECK-NEXT: "type": {
368 // CHECK-NEXT: "qualType": "int"
369 // CHECK-NEXT: },
370 // CHECK-NEXT: "inner": [
371 // CHECK-NEXT: {
372 // CHECK-NEXT: "id": "0x{{.*}}",
373 // CHECK-NEXT: "kind": "UnavailableAttr",
374 // CHECK-NEXT: "range": {
375 // CHECK-NEXT: "begin": {
376 // CHECK-NEXT: "offset": 523,
377 // CHECK-NEXT: "col": 16,
378 // CHECK-NEXT: "tokLen": 11
379 // CHECK-NEXT: },
380 // CHECK-NEXT: "end": {
381 // CHECK-NEXT: "offset": 543,
382 // CHECK-NEXT: "col": 36,
383 // CHECK-NEXT: "tokLen": 1
384 // CHECK-NEXT: }
385 // CHECK-NEXT: },
386 // CHECK-NEXT: "message": "reason"
387 // CHECK-NEXT: }
388 // CHECK-NEXT: ]
389 // CHECK-NEXT: }
390
391
392 // CHECK-NOT: {{^}}Dumping
393 // CHECK: "kind": "VarDecl",
394 // CHECK-NEXT: "loc": {
395 // CHECK-NEXT: "offset": 617,
396 // CHECK-NEXT: "line": 18,
397 // CHECK-NEXT: "col": 48,
398 // CHECK-NEXT: "tokLen": 11
399 // CHECK-NEXT: },
400 // CHECK-NEXT: "range": {
401 // CHECK-NEXT: "begin": {
402 // CHECK-NEXT: "offset": 570,
403 // CHECK-NEXT: "col": 1,
404 // CHECK-NEXT: "tokLen": 13
405 // CHECK-NEXT: },
406 // CHECK-NEXT: "end": {
407 // CHECK-NEXT: "offset": 617,
408 // CHECK-NEXT: "col": 48,
409 // CHECK-NEXT: "tokLen": 11
410 // CHECK-NEXT: }
411 // CHECK-NEXT: },
412 // CHECK-NEXT: "name": "section_var",
413 // CHECK-NEXT: "mangledName": "section_var",
414 // CHECK-NEXT: "type": {
415 // CHECK-NEXT: "qualType": "int"
416 // CHECK-NEXT: },
417 // CHECK-NEXT: "inner": [
418 // CHECK-NEXT: {
419 // CHECK-NEXT: "id": "0x{{.*}}",
420 // CHECK-NEXT: "kind": "SectionAttr",
421 // CHECK-NEXT: "range": {
422 // CHECK-NEXT: "begin": {
423 // CHECK-NEXT: "offset": 586,
424 // CHECK-NEXT: "col": 17,
425 // CHECK-NEXT: "tokLen": 7
426 // CHECK-NEXT: },
427 // CHECK-NEXT: "end": {
428 // CHECK-NEXT: "offset": 609,
429 // CHECK-NEXT: "col": 40,
430 // CHECK-NEXT: "tokLen": 1
431 // CHECK-NEXT: }
432 // CHECK-NEXT: },
433 // CHECK-NEXT: "section_name": "SECTION_NAME"
434 // CHECK-NEXT: }
435 // CHECK-NEXT: ]
436 // CHECK-NEXT: }
437
438
439 // CHECK-NOT: {{^}}Dumping
440 // CHECK: "kind": "VarDecl",
441 // CHECK-NEXT: "loc": {
442 // CHECK-NEXT: "offset": 675,
443 // CHECK-NEXT: "line": 20,
444 // CHECK-NEXT: "col": 45,
445 // CHECK-NEXT: "tokLen": 14
446 // CHECK-NEXT: },
447 // CHECK-NEXT: "range": {
448 // CHECK-NEXT: "begin": {
449 // CHECK-NEXT: "offset": 631,
450 // CHECK-NEXT: "col": 1,
451 // CHECK-NEXT: "tokLen": 13
452 // CHECK-NEXT: },
453 // CHECK-NEXT: "end": {
454 // CHECK-NEXT: "offset": 675,
455 // CHECK-NEXT: "col": 45,
456 // CHECK-NEXT: "tokLen": 14
457 // CHECK-NEXT: }
458 // CHECK-NEXT: },
459 // CHECK-NEXT: "name": "visibility_var",
460 // CHECK-NEXT: "mangledName": "visibility_var",
461 // CHECK-NEXT: "type": {
462 // CHECK-NEXT: "qualType": "int"
463 // CHECK-NEXT: },
464 // CHECK-NEXT: "inner": [
465 // CHECK-NEXT: {
466 // CHECK-NEXT: "id": "0x{{.*}}",
467 // CHECK-NEXT: "kind": "VisibilityAttr",
468 // CHECK-NEXT: "range": {
469 // CHECK-NEXT: "begin": {
470 // CHECK-NEXT: "offset": 647,
471 // CHECK-NEXT: "col": 17,
472 // CHECK-NEXT: "tokLen": 10
473 // CHECK-NEXT: },
474 // CHECK-NEXT: "end": {
475 // CHECK-NEXT: "offset": 667,
476 // CHECK-NEXT: "col": 37,
477 // CHECK-NEXT: "tokLen": 1
478 // CHECK-NEXT: }
479 // CHECK-NEXT: },
480 // CHECK-NEXT: "visibility": "hidden"
481 // CHECK-NEXT: }
482 // CHECK-NEXT: ]
483 // CHECK-NEXT: }
484
485
486 // CHECK-NOT: {{^}}Dumping
487 // CHECK: "kind": "VarDecl",
488 // CHECK-NEXT: "loc": {
489 // CHECK-NEXT: "offset": 748,
490 // CHECK-NEXT: "line": 22,
491 // CHECK-NEXT: "col": 57,
492 // CHECK-NEXT: "tokLen": 13
493 // CHECK-NEXT: },
494 // CHECK-NEXT: "range": {
495 // CHECK-NEXT: "begin": {
496 // CHECK-NEXT: "offset": 692,
497 // CHECK-NEXT: "col": 1,
498 // CHECK-NEXT: "tokLen": 8
499 // CHECK-NEXT: },
500 // CHECK-NEXT: "end": {
501 // CHECK-NEXT: "offset": 748,
502 // CHECK-NEXT: "col": 57,
503 // CHECK-NEXT: "tokLen": 13
504 // CHECK-NEXT: }
505 // CHECK-NEXT: },
506 // CHECK-NEXT: "name": "tls_model_var",
507 // CHECK-NEXT: "mangledName": "tls_model_var",
508 // CHECK-NEXT: "type": {
509 // CHECK-NEXT: "qualType": "int"
510 // CHECK-NEXT: },
511 // CHECK-NEXT: "tls": "static",
512 // CHECK-NEXT: "inner": [
513 // CHECK-NEXT: {
514 // CHECK-NEXT: "id": "0x{{.*}}",
515 // CHECK-NEXT: "kind": "TLSModelAttr",
516 // CHECK-NEXT: "range": {
517 // CHECK-NEXT: "begin": {
518 // CHECK-NEXT: "offset": 717,
519 // CHECK-NEXT: "col": 26,
520 // CHECK-NEXT: "tokLen": 9
521 // CHECK-NEXT: },
522 // CHECK-NEXT: "end": {
523 // CHECK-NEXT: "offset": 740,
524 // CHECK-NEXT: "col": 49,
525 // CHECK-NEXT: "tokLen": 1
526 // CHECK-NEXT: }
527 // CHECK-NEXT: },
528 // CHECK-NEXT: "tls_model": "local-exec"
529 // CHECK-NEXT: }
530 // CHECK-NEXT: ]
531 // CHECK-NEXT: }
532