138 lines · cpp
1 2namespace NS {3 extern int gx;4 typedef int MyInt;5}6 7enum {8 EnumVal = 19};10 11NS::MyInt NS::gx = EnumVal;12 13void foo() {14 NS::MyInt x;15}16 17enum {18 SecondVal = EnumVal19};20 21struct S {22 S& operator++();23 int operator*();24 S& operator=(int x);25 S& operator!=(int x);26 S& operator()(int x);27};28 29void foo2(S &s) {30 (void)++s;31 (void)*s;32 s = 3;33 (void)(s != 3);34 s(3);35}36 37namespace NS {38 namespace Inn {}39 typedef int Foo;40}41 42using namespace NS;43using namespace NS::Inn;44using NS::Foo;45 46template <typename T1, typename T2>47struct TS { };48 49template <typename T>50struct TS<T, int> {51 typedef int MyInt;52};53 54void foo3() {55 TS<int, int> s;56}57 58const int array_size = 3;59typedef int some_arr[array_size];60 61const int default_param = 3;62void foo4(int p = default_param);63 64struct S2 {65 int x,y;66};67 68void foo5() {69 struct S2 s = { .y = 1, .x = 4};70 s.y = s.x + 1;71 (void)&foo3;72 foo4(s.y);73}74 75int ginitlist[] = {EnumVal};76 77// RUN: c-index-test -index-file %s | FileCheck %s78// CHECK: [indexDeclaration]: kind: namespace | name: NS79// CHECK-NEXT: [indexDeclaration]: kind: variable | name: gx80// CHECK-NEXT: [indexDeclaration]: kind: typedef | name: MyInt81// CHECK-NEXT: [indexDeclaration]: kind: enum82// CHECK-NEXT: [indexDeclaration]: kind: enumerator | name: EnumVal83// CHECK-NEXT: [indexDeclaration]: kind: variable | name: gx84// CHECK-NEXT: [indexEntityReference]: kind: typedef | name: MyInt85// CHECK-NEXT: [indexEntityReference]: kind: namespace | name: NS86// CHECK-NEXT: [indexEntityReference]: kind: namespace | name: NS87// CHECK-NEXT: [indexEntityReference]: kind: enumerator | name: EnumVal88// CHECK-NEXT: [indexDeclaration]: kind: function | name: foo89// CHECK-NEXT: [indexEntityReference]: kind: typedef | name: MyInt90// CHECK-NEXT: [indexEntityReference]: kind: namespace | name: NS91// CHECK-NEXT: [indexDeclaration]: kind: enum92// CHECK-NEXT: [indexDeclaration]: kind: enumerator | name: SecondVal93// CHECK-NEXT: [indexEntityReference]: kind: enumerator | name: EnumVal94 95// CHECK: [indexDeclaration]: kind: function | name: foo296// CHECK: [indexEntityReference]: kind: c++-instance-method | name: operator++97// CHECK-NEXT: [indexEntityReference]: kind: c++-instance-method | name: operator*98// CHECK-NEXT: [indexEntityReference]: kind: c++-instance-method | name: operator=99// CHECK-NEXT: [indexEntityReference]: kind: c++-instance-method | name: operator!=100// CHECK-NEXT: [indexEntityReference]: kind: c++-instance-method | name: operator()101 102// CHECK: [indexEntityReference]: kind: namespace | name: NS | {{.*}} | loc: 42:17103// CHECK-NEXT: [indexEntityReference]: kind: namespace | name: NS | {{.*}} | loc: 43:17104// CHECK-NEXT: [indexEntityReference]: kind: namespace | name: Inn | {{.*}} | loc: 43:21105// CHECK-NEXT: [indexEntityReference]: kind: namespace | name: NS | {{.*}} | loc: 44:7106// CHECK-NEXT: [indexEntityReference]: kind: typedef | name: Foo | {{.*}} | loc: 44:11107 108// CHECK: [indexDeclaration]: kind: c++-class-template | name: TS | {{.*}} | loc: 47:8109// CHECK-NEXT: [indexDeclaration]: kind: struct-template-partial-spec | name: TS | USR: c:@SP>1#T@TS>#t0.0#I | {{.*}} | loc: 50:8110// CHECK-NEXT: [indexDeclaration]: kind: typedef | name: MyInt | USR: c:index-refs.cpp@SP>1#T@TS>#t0.0#I@T@MyInt | {{.*}} | loc: 51:15 | semantic-container: [TS:50:8] | lexical-container: [TS:50:8]111/* when indexing implicit instantiations112 [indexDeclaration]: kind: struct-template-spec | name: TS | USR: c:@S@TS>#I | {{.*}} | loc: 50:8113 [indexDeclaration]: kind: typedef | name: MyInt | USR: c:index-refs.cpp@593@S@TS>#I@T@MyInt | {{.*}} | loc: 51:15 | semantic-container: [TS:50:8] | lexical-container: [TS:50:8]114 */115// CHECK-NEXT: [indexDeclaration]: kind: function | name: foo3116/* when indexing implicit instantiations117 [indexEntityReference]: kind: struct-template-spec | name: TS | USR: c:@S@TS>#I | {{.*}} | loc: 55:3118*/119// CHECK-NEXT: [indexEntityReference]: kind: struct-template-partial-spec | name: TS | USR: c:@SP>1#T@TS>#t0.0#I | {{.*}} | loc: 55:3120 121// CHECK: [indexEntityReference]: kind: variable | name: array_size | {{.*}} | loc: 59:22122// CHECK: [indexEntityReference]: kind: variable | name: default_param | {{.*}} | loc: 62:19 | {{.*}} | role: ref read123// CHECK-NOT: [indexEntityReference]: kind: variable | name: default_param | {{.*}} | loc: 62:19124 125// CHECK: [indexEntityReference]: kind: field | name: y | {{.*}} | loc: 69:20126// CHECK-NEXT: [indexEntityReference]: kind: field | name: x | {{.*}} | loc: 69:28127// CHECK-NOT: [indexEntityReference]: kind: field | name: y | {{.*}} | loc: 69:20128// CHECK-NOT: [indexEntityReference]: kind: field | name: x | {{.*}} | loc: 69:28129 130// CHECK: [indexEntityReference]: kind: field | name: y | {{.*}} | loc: 70:5 | {{.*}} | role: ref write131// CHECK: [indexEntityReference]: kind: field | name: x | {{.*}} | loc: 70:11 | {{.*}} | role: ref read132// CHECK: [indexEntityReference]: kind: function | name: foo3 | {{.*}} | loc: 71:10 | {{.*}} | role: ref addr133// CHECK: [indexEntityReference]: kind: function | name: foo4 | {{.*}} | loc: 72:3 | {{.*}} | role: ref call134 135// CHECK: [indexDeclaration]: kind: variable | name: ginitlist |136// CHECK: [indexEntityReference]: kind: enumerator | name: EnumVal | {{.*}} | loc: 75:20137// CHECK-NOT: [indexEntityReference]: kind: enumerator | name: EnumVal | {{.*}} | loc: 75:20138