532 lines · cpp
1// RUN: %clang_cc1 -triple x86_64-pc-linux -Wdocumentation -ast-dump=json %s | FileCheck %s2 3int global_decl;4extern __attribute__((alias("global_decl"))) int global_alias;5 6void cleanup_function(int*);7void 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.py25// using --filters=VarDecl26 27 28// CHECK-NOT: {{^}}Dumping29// 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": 1136// CHECK-NEXT: },37// CHECK-NEXT: "range": {38// CHECK-NEXT: "begin": {39// CHECK-NEXT: "offset": 93,40// CHECK-NEXT: "col": 1,41// CHECK-NEXT: "tokLen": 342// CHECK-NEXT: },43// CHECK-NEXT: "end": {44// CHECK-NEXT: "offset": 97,45// CHECK-NEXT: "col": 5,46// CHECK-NEXT: "tokLen": 1147// 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: {{^}}Dumping59// 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": 1265// CHECK-NEXT: },66// CHECK-NEXT: "range": {67// CHECK-NEXT: "begin": {68// CHECK-NEXT: "offset": 110,69// CHECK-NEXT: "col": 1,70// CHECK-NEXT: "tokLen": 671// CHECK-NEXT: },72// CHECK-NEXT: "end": {73// CHECK-NEXT: "offset": 159,74// CHECK-NEXT: "col": 50,75// CHECK-NEXT: "tokLen": 1276// 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": 593// CHECK-NEXT: },94// CHECK-NEXT: "end": {95// CHECK-NEXT: "offset": 151,96// CHECK-NEXT: "col": 42,97// CHECK-NEXT: "tokLen": 198// 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: {{^}}Dumping107// CHECK: "kind": "VarDecl",108// CHECK-NEXT: "loc": {109// CHECK-NEXT: "offset": 266,110// CHECK-NEXT: "col": 50,111// CHECK-NEXT: "tokLen": 3112// CHECK-NEXT: },113// CHECK-NEXT: "range": {114// CHECK-NEXT: "begin": {115// CHECK-NEXT: "offset": 219,116// CHECK-NEXT: "col": 3,117// CHECK-NEXT: "tokLen": 13118// CHECK-NEXT: },119// CHECK-NEXT: "end": {120// CHECK-NEXT: "offset": 266,121// CHECK-NEXT: "col": 50,122// CHECK-NEXT: "tokLen": 3123// 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": 7138// CHECK-NEXT: },139// CHECK-NEXT: "end": {140// CHECK-NEXT: "offset": 258,141// CHECK-NEXT: "col": 42,142// CHECK-NEXT: "tokLen": 1143// 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: {{^}}Dumping159// 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": 15165// CHECK-NEXT: },166// CHECK-NEXT: "range": {167// CHECK-NEXT: "begin": {168// CHECK-NEXT: "offset": 274,169// CHECK-NEXT: "col": 1,170// CHECK-NEXT: "tokLen": 13171// CHECK-NEXT: },172// CHECK-NEXT: "end": {173// CHECK-NEXT: "offset": 306,174// CHECK-NEXT: "col": 33,175// CHECK-NEXT: "tokLen": 15176// 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": 10192// CHECK-NEXT: },193// CHECK-NEXT: "end": {194// CHECK-NEXT: "offset": 289,195// CHECK-NEXT: "col": 16,196// CHECK-NEXT: "tokLen": 10197// CHECK-NEXT: }198// CHECK-NEXT: }199// CHECK-NEXT: }200// CHECK-NEXT: ]201// CHECK-NEXT: }202 203 204// CHECK-NOT: {{^}}Dumping205// 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": 15211// CHECK-NEXT: },212// CHECK-NEXT: "range": {213// CHECK-NEXT: "begin": {214// CHECK-NEXT: "offset": 323,215// CHECK-NEXT: "col": 1,216// CHECK-NEXT: "tokLen": 13217// CHECK-NEXT: },218// CHECK-NEXT: "end": {219// CHECK-NEXT: "offset": 365,220// CHECK-NEXT: "col": 43,221// CHECK-NEXT: "tokLen": 15222// 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": 10238// CHECK-NEXT: },239// CHECK-NEXT: "end": {240// CHECK-NEXT: "offset": 357,241// CHECK-NEXT: "col": 35,242// CHECK-NEXT: "tokLen": 1243// CHECK-NEXT: }244// CHECK-NEXT: },245// CHECK-NEXT: "message": "reason"246// CHECK-NEXT: }247// CHECK-NEXT: ]248// CHECK-NEXT: }249 250 251// CHECK-NOT: {{^}}Dumping252// 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": 15258// CHECK-NEXT: },259// CHECK-NEXT: "range": {260// CHECK-NEXT: "begin": {261// CHECK-NEXT: "offset": 382,262// CHECK-NEXT: "col": 1,263// CHECK-NEXT: "tokLen": 13264// CHECK-NEXT: },265// CHECK-NEXT: "end": {266// CHECK-NEXT: "offset": 439,267// CHECK-NEXT: "col": 58,268// CHECK-NEXT: "tokLen": 15269// 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": 10285// CHECK-NEXT: },286// CHECK-NEXT: "end": {287// CHECK-NEXT: "offset": 431,288// CHECK-NEXT: "col": 50,289// CHECK-NEXT: "tokLen": 1290// 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: {{^}}Dumping300// 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": 16306// CHECK-NEXT: },307// CHECK-NEXT: "range": {308// CHECK-NEXT: "begin": {309// CHECK-NEXT: "offset": 457,310// CHECK-NEXT: "col": 1,311// CHECK-NEXT: "tokLen": 13312// CHECK-NEXT: },313// CHECK-NEXT: "end": {314// CHECK-NEXT: "offset": 490,315// CHECK-NEXT: "col": 34,316// CHECK-NEXT: "tokLen": 16317// 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": 11333// CHECK-NEXT: },334// CHECK-NEXT: "end": {335// CHECK-NEXT: "offset": 472,336// CHECK-NEXT: "col": 16,337// CHECK-NEXT: "tokLen": 11338// CHECK-NEXT: }339// CHECK-NEXT: }340// CHECK-NEXT: }341// CHECK-NEXT: ]342// CHECK-NEXT: }343 344 345// CHECK-NOT: {{^}}Dumping346// 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": 16352// CHECK-NEXT: },353// CHECK-NEXT: "range": {354// CHECK-NEXT: "begin": {355// CHECK-NEXT: "offset": 508,356// CHECK-NEXT: "col": 1,357// CHECK-NEXT: "tokLen": 13358// CHECK-NEXT: },359// CHECK-NEXT: "end": {360// CHECK-NEXT: "offset": 551,361// CHECK-NEXT: "col": 44,362// CHECK-NEXT: "tokLen": 16363// 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": 11379// CHECK-NEXT: },380// CHECK-NEXT: "end": {381// CHECK-NEXT: "offset": 543,382// CHECK-NEXT: "col": 36,383// CHECK-NEXT: "tokLen": 1384// CHECK-NEXT: }385// CHECK-NEXT: },386// CHECK-NEXT: "message": "reason"387// CHECK-NEXT: }388// CHECK-NEXT: ]389// CHECK-NEXT: }390 391 392// CHECK-NOT: {{^}}Dumping393// 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": 11399// CHECK-NEXT: },400// CHECK-NEXT: "range": {401// CHECK-NEXT: "begin": {402// CHECK-NEXT: "offset": 570,403// CHECK-NEXT: "col": 1,404// CHECK-NEXT: "tokLen": 13405// CHECK-NEXT: },406// CHECK-NEXT: "end": {407// CHECK-NEXT: "offset": 617,408// CHECK-NEXT: "col": 48,409// CHECK-NEXT: "tokLen": 11410// 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": 7426// CHECK-NEXT: },427// CHECK-NEXT: "end": {428// CHECK-NEXT: "offset": 609,429// CHECK-NEXT: "col": 40,430// CHECK-NEXT: "tokLen": 1431// 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: {{^}}Dumping440// 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": 14446// CHECK-NEXT: },447// CHECK-NEXT: "range": {448// CHECK-NEXT: "begin": {449// CHECK-NEXT: "offset": 631,450// CHECK-NEXT: "col": 1,451// CHECK-NEXT: "tokLen": 13452// CHECK-NEXT: },453// CHECK-NEXT: "end": {454// CHECK-NEXT: "offset": 675,455// CHECK-NEXT: "col": 45,456// CHECK-NEXT: "tokLen": 14457// 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": 10473// CHECK-NEXT: },474// CHECK-NEXT: "end": {475// CHECK-NEXT: "offset": 667,476// CHECK-NEXT: "col": 37,477// CHECK-NEXT: "tokLen": 1478// CHECK-NEXT: }479// CHECK-NEXT: },480// CHECK-NEXT: "visibility": "hidden"481// CHECK-NEXT: }482// CHECK-NEXT: ]483// CHECK-NEXT: }484 485 486// CHECK-NOT: {{^}}Dumping487// 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": 13493// CHECK-NEXT: },494// CHECK-NEXT: "range": {495// CHECK-NEXT: "begin": {496// CHECK-NEXT: "offset": 692,497// CHECK-NEXT: "col": 1,498// CHECK-NEXT: "tokLen": 8499// CHECK-NEXT: },500// CHECK-NEXT: "end": {501// CHECK-NEXT: "offset": 748,502// CHECK-NEXT: "col": 57,503// CHECK-NEXT: "tokLen": 13504// 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": 9521// CHECK-NEXT: },522// CHECK-NEXT: "end": {523// CHECK-NEXT: "offset": 740,524// CHECK-NEXT: "col": 49,525// CHECK-NEXT: "tokLen": 1526// CHECK-NEXT: }527// CHECK-NEXT: },528// CHECK-NEXT: "tls_model": "local-exec"529// CHECK-NEXT: }530// CHECK-NEXT: ]531// CHECK-NEXT: }532