index-refs.cpp revision 58d2dbea680a75de266c5eff77cc15c323cfd48a
1 2namespace NS { 3 extern int gx; 4 typedef int MyInt; 5} 6 7enum { 8 EnumVal = 1 9}; 10 11NS::MyInt NS::gx = EnumVal; 12 13void foo() { 14 NS::MyInt x; 15} 16 17enum { 18 SecondVal = EnumVal 19}; 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 58// RUN: c-index-test -index-file %s | FileCheck %s 59// CHECK: [indexDeclaration]: kind: namespace | name: NS 60// CHECK-NEXT: [indexDeclaration]: kind: variable | name: gx 61// CHECK-NEXT: [indexDeclaration]: kind: typedef | name: MyInt 62// CHECK-NEXT: [indexDeclaration]: kind: enum 63// CHECK-NEXT: [indexDeclaration]: kind: enumerator | name: EnumVal 64// CHECK-NEXT: [indexDeclaration]: kind: variable | name: gx 65// CHECK-NEXT: [indexEntityReference]: kind: namespace | name: NS 66// CHECK-NEXT: [indexEntityReference]: kind: typedef | name: MyInt 67// CHECK-NEXT: [indexEntityReference]: kind: namespace | name: NS 68// CHECK-NEXT: [indexEntityReference]: kind: enumerator | name: EnumVal 69// CHECK-NEXT: [indexDeclaration]: kind: function | name: foo 70// CHECK-NEXT: [indexEntityReference]: kind: namespace | name: NS 71// CHECK-NEXT: [indexEntityReference]: kind: typedef | name: MyInt 72// CHECK-NEXT: [indexDeclaration]: kind: enum 73// CHECK-NEXT: [indexDeclaration]: kind: enumerator | name: SecondVal 74// CHECK-NEXT: [indexEntityReference]: kind: enumerator | name: EnumVal 75 76// CHECK: [indexDeclaration]: kind: function | name: foo2 77// CHECK: [indexEntityReference]: kind: c++-instance-method | name: operator++ 78// CHECK-NEXT: [indexEntityReference]: kind: c++-instance-method | name: operator* 79// CHECK-NEXT: [indexEntityReference]: kind: c++-instance-method | name: operator= 80// CHECK-NEXT: [indexEntityReference]: kind: c++-instance-method | name: operator!= 81// CHECK-NEXT: [indexEntityReference]: kind: c++-instance-method | name: operator() 82 83// CHECK: [indexEntityReference]: kind: namespace | name: NS | {{.*}} | loc: 42:17 84// CHECK-NEXT: [indexEntityReference]: kind: namespace | name: NS | {{.*}} | loc: 43:17 85// CHECK-NEXT: [indexEntityReference]: kind: namespace | name: Inn | {{.*}} | loc: 43:21 86// CHECK-NEXT: [indexEntityReference]: kind: namespace | name: NS | {{.*}} | loc: 44:7 87// CHECK-NEXT: [indexEntityReference]: kind: typedef | name: Foo | {{.*}} | loc: 44:11 88 89// CHECK: [indexDeclaration]: kind: c++-class-template | name: TS | {{.*}} | loc: 47:8 90// CHECK-NEXT: [indexDeclaration]: kind: struct-template-partial-spec | name: TS | USR: c:@SP>1#T@TS>#t0.0#I | {{.*}} | loc: 50:8 91// CHECK-NEXT: [indexDeclaration]: kind: typedef | name: MyInt | USR: c:index-refs.cpp@593@SP>1#T@TS>#t0.0#I@T@MyInt | {{.*}} | loc: 51:15 | semantic-container: [TS:50:8] | lexical-container: [TS:50:8] 92/* when indexing implicit instantiations 93 [indexDeclaration]: kind: struct-template-spec | name: TS | USR: c:@S@TS>#I | {{.*}} | loc: 50:8 94 [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] 95 */ 96// CHECK-NEXT: [indexDeclaration]: kind: function | name: foo3 97/* when indexing implicit instantiations 98 [indexEntityReference]: kind: struct-template-spec | name: TS | USR: c:@S@TS>#I | {{.*}} | loc: 55:3 99*/ 100// CHECK-NEXT: [indexEntityReference]: kind: c++-class-template | name: TS | USR: c:@ST>2#T#T@TS | {{.*}} | loc: 55:3 101