| |
| namespace NS { |
| extern int gx; |
| typedef int MyInt; |
| } |
| |
| enum { |
| EnumVal = 1 |
| }; |
| |
| NS::MyInt NS::gx = EnumVal; |
| |
| void foo() { |
| NS::MyInt x; |
| } |
| |
| enum { |
| SecondVal = EnumVal |
| }; |
| |
| struct S { |
| S& operator++(); |
| int operator*(); |
| S& operator=(int x); |
| S& operator!=(int x); |
| S& operator()(int x); |
| }; |
| |
| void foo2(S &s) { |
| (void)++s; |
| (void)*s; |
| s = 3; |
| (void)(s != 3); |
| s(3); |
| } |
| |
| namespace NS { |
| namespace Inn {} |
| typedef int Foo; |
| } |
| |
| using namespace NS; |
| using namespace NS::Inn; |
| using NS::Foo; |
| |
| template <typename T1, typename T2> |
| struct TS { }; |
| |
| template <typename T> |
| struct TS<T, int> { |
| typedef int MyInt; |
| }; |
| |
| void foo3() { |
| TS<int, int> s; |
| } |
| |
| const int array_size = 3; |
| typedef int some_arr[array_size]; |
| |
| const int default_param = 3; |
| void foo4(int p = default_param); |
| |
| struct S2 { |
| int x,y; |
| }; |
| |
| void foo5() { |
| struct S2 s = { .y = 1, .x = 4}; |
| s.y = s.x + 1; |
| (void)&foo3; |
| foo4(s.y); |
| } |
| |
| int ginitlist[] = {EnumVal}; |
| |
| // RUN: c-index-test -index-file %s | FileCheck %s |
| // CHECK: [indexDeclaration]: kind: namespace | name: NS |
| // CHECK-NEXT: [indexDeclaration]: kind: variable | name: gx |
| // CHECK-NEXT: [indexDeclaration]: kind: typedef | name: MyInt |
| // CHECK-NEXT: [indexDeclaration]: kind: enum |
| // CHECK-NEXT: [indexDeclaration]: kind: enumerator | name: EnumVal |
| // CHECK-NEXT: [indexDeclaration]: kind: variable | name: gx |
| // CHECK-NEXT: [indexEntityReference]: kind: namespace | name: NS |
| // CHECK-NEXT: [indexEntityReference]: kind: typedef | name: MyInt |
| // CHECK-NEXT: [indexEntityReference]: kind: namespace | name: NS |
| // CHECK-NEXT: [indexEntityReference]: kind: enumerator | name: EnumVal |
| // CHECK-NEXT: [indexDeclaration]: kind: function | name: foo |
| // CHECK-NEXT: [indexEntityReference]: kind: namespace | name: NS |
| // CHECK-NEXT: [indexEntityReference]: kind: typedef | name: MyInt |
| // CHECK-NEXT: [indexDeclaration]: kind: enum |
| // CHECK-NEXT: [indexDeclaration]: kind: enumerator | name: SecondVal |
| // CHECK-NEXT: [indexEntityReference]: kind: enumerator | name: EnumVal |
| |
| // CHECK: [indexDeclaration]: kind: function | name: foo2 |
| // CHECK: [indexEntityReference]: kind: c++-instance-method | name: operator++ |
| // CHECK-NEXT: [indexEntityReference]: kind: c++-instance-method | name: operator* |
| // CHECK-NEXT: [indexEntityReference]: kind: c++-instance-method | name: operator= |
| // CHECK-NEXT: [indexEntityReference]: kind: c++-instance-method | name: operator!= |
| // CHECK-NEXT: [indexEntityReference]: kind: c++-instance-method | name: operator() |
| |
| // CHECK: [indexEntityReference]: kind: namespace | name: NS | {{.*}} | loc: 42:17 |
| // CHECK-NEXT: [indexEntityReference]: kind: namespace | name: NS | {{.*}} | loc: 43:17 |
| // CHECK-NEXT: [indexEntityReference]: kind: namespace | name: Inn | {{.*}} | loc: 43:21 |
| // CHECK-NEXT: [indexEntityReference]: kind: namespace | name: NS | {{.*}} | loc: 44:7 |
| // CHECK-NEXT: [indexEntityReference]: kind: typedef | name: Foo | {{.*}} | loc: 44:11 |
| |
| // CHECK: [indexDeclaration]: kind: c++-class-template | name: TS | {{.*}} | loc: 47:8 |
| // CHECK-NEXT: [indexDeclaration]: kind: struct-template-partial-spec | name: TS | USR: c:@SP>1#T@TS>#t0.0#I | {{.*}} | loc: 50:8 |
| // 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] |
| // CHECK-NEXT: [indexEntityReference]: kind: c++-class-template | name: TS | USR: c:@ST>2#T#T@TS | lang: C++ | cursor: TemplateRef=TS:47:8 | loc: 50:8 | <parent>:: <<NULL>> | container: [TU] | refkind: direct | role: ref |
| /* when indexing implicit instantiations |
| [indexDeclaration]: kind: struct-template-spec | name: TS | USR: c:@S@TS>#I | {{.*}} | loc: 50:8 |
| [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] |
| */ |
| // CHECK-NEXT: [indexDeclaration]: kind: function | name: foo3 |
| /* when indexing implicit instantiations |
| [indexEntityReference]: kind: struct-template-spec | name: TS | USR: c:@S@TS>#I | {{.*}} | loc: 55:3 |
| */ |
| // CHECK-NEXT: [indexEntityReference]: kind: c++-class-template | name: TS | USR: c:@ST>2#T#T@TS | {{.*}} | loc: 55:3 |
| |
| // CHECK: [indexEntityReference]: kind: variable | name: array_size | {{.*}} | loc: 59:22 |
| // CHECK: [indexEntityReference]: kind: variable | name: default_param | {{.*}} | loc: 62:19 | {{.*}} | role: ref read |
| // CHECK-NOT: [indexEntityReference]: kind: variable | name: default_param | {{.*}} | loc: 62:19 |
| |
| // CHECK: [indexEntityReference]: kind: field | name: y | {{.*}} | loc: 69:20 |
| // CHECK-NEXT: [indexEntityReference]: kind: field | name: x | {{.*}} | loc: 69:28 |
| // CHECK-NOT: [indexEntityReference]: kind: field | name: y | {{.*}} | loc: 69:20 |
| // CHECK-NOT: [indexEntityReference]: kind: field | name: x | {{.*}} | loc: 69:28 |
| |
| // CHECK: [indexEntityReference]: kind: field | name: y | {{.*}} | loc: 70:5 | {{.*}} | role: ref write |
| // CHECK: [indexEntityReference]: kind: field | name: x | {{.*}} | loc: 70:11 | {{.*}} | role: ref read |
| // CHECK: [indexEntityReference]: kind: function | name: foo3 | {{.*}} | loc: 71:10 | {{.*}} | role: ref addr |
| // CHECK: [indexEntityReference]: kind: function | name: foo4 | {{.*}} | loc: 72:3 | {{.*}} | role: ref call |
| |
| // CHECK: [indexDeclaration]: kind: variable | name: ginitlist | |
| // CHECK: [indexEntityReference]: kind: enumerator | name: EnumVal | {{.*}} | loc: 75:20 |
| // CHECK-NOT: [indexEntityReference]: kind: enumerator | name: EnumVal | {{.*}} | loc: 75:20 |