1*67e74705SXin Li 2*67e74705SXin Li namespace NS { 3*67e74705SXin Li extern int gx; 4*67e74705SXin Li typedef int MyInt; 5*67e74705SXin Li } 6*67e74705SXin Li 7*67e74705SXin Li enum { 8*67e74705SXin Li EnumVal = 1 9*67e74705SXin Li }; 10*67e74705SXin Li 11*67e74705SXin Li NS::MyInt NS::gx = EnumVal; 12*67e74705SXin Li foo()13*67e74705SXin Livoid foo() { 14*67e74705SXin Li NS::MyInt x; 15*67e74705SXin Li } 16*67e74705SXin Li 17*67e74705SXin Li enum { 18*67e74705SXin Li SecondVal = EnumVal 19*67e74705SXin Li }; 20*67e74705SXin Li 21*67e74705SXin Li struct S { 22*67e74705SXin Li S& operator++(); 23*67e74705SXin Li int operator*(); 24*67e74705SXin Li S& operator=(int x); 25*67e74705SXin Li S& operator!=(int x); 26*67e74705SXin Li S& operator()(int x); 27*67e74705SXin Li }; 28*67e74705SXin Li foo2(S & s)29*67e74705SXin Livoid foo2(S &s) { 30*67e74705SXin Li (void)++s; 31*67e74705SXin Li (void)*s; 32*67e74705SXin Li s = 3; 33*67e74705SXin Li (void)(s != 3); 34*67e74705SXin Li s(3); 35*67e74705SXin Li } 36*67e74705SXin Li 37*67e74705SXin Li namespace NS { 38*67e74705SXin Li namespace Inn {} 39*67e74705SXin Li typedef int Foo; 40*67e74705SXin Li } 41*67e74705SXin Li 42*67e74705SXin Li using namespace NS; 43*67e74705SXin Li using namespace NS::Inn; 44*67e74705SXin Li using NS::Foo; 45*67e74705SXin Li 46*67e74705SXin Li template <typename T1, typename T2> 47*67e74705SXin Li struct TS { }; 48*67e74705SXin Li 49*67e74705SXin Li template <typename T> 50*67e74705SXin Li struct TS<T, int> { 51*67e74705SXin Li typedef int MyInt; 52*67e74705SXin Li }; 53*67e74705SXin Li foo3()54*67e74705SXin Livoid foo3() { 55*67e74705SXin Li TS<int, int> s; 56*67e74705SXin Li } 57*67e74705SXin Li 58*67e74705SXin Li const int array_size = 3; 59*67e74705SXin Li typedef int some_arr[array_size]; 60*67e74705SXin Li 61*67e74705SXin Li const int default_param = 3; 62*67e74705SXin Li void foo4(int p = default_param); 63*67e74705SXin Li 64*67e74705SXin Li struct S2 { 65*67e74705SXin Li int x,y; 66*67e74705SXin Li }; 67*67e74705SXin Li foo5()68*67e74705SXin Livoid foo5() { 69*67e74705SXin Li struct S2 s = { .y = 1, .x = 4}; 70*67e74705SXin Li } 71*67e74705SXin Li 72*67e74705SXin Li int ginitlist[] = {EnumVal}; 73*67e74705SXin Li 74*67e74705SXin Li // RUN: c-index-test -index-file %s | FileCheck %s 75*67e74705SXin Li // CHECK: [indexDeclaration]: kind: namespace | name: NS 76*67e74705SXin Li // CHECK-NEXT: [indexDeclaration]: kind: variable | name: gx 77*67e74705SXin Li // CHECK-NEXT: [indexDeclaration]: kind: typedef | name: MyInt 78*67e74705SXin Li // CHECK-NEXT: [indexDeclaration]: kind: enum 79*67e74705SXin Li // CHECK-NEXT: [indexDeclaration]: kind: enumerator | name: EnumVal 80*67e74705SXin Li // CHECK-NEXT: [indexDeclaration]: kind: variable | name: gx 81*67e74705SXin Li // CHECK-NEXT: [indexEntityReference]: kind: namespace | name: NS 82*67e74705SXin Li // CHECK-NEXT: [indexEntityReference]: kind: typedef | name: MyInt 83*67e74705SXin Li // CHECK-NEXT: [indexEntityReference]: kind: namespace | name: NS 84*67e74705SXin Li // CHECK-NEXT: [indexEntityReference]: kind: enumerator | name: EnumVal 85*67e74705SXin Li // CHECK-NEXT: [indexDeclaration]: kind: function | name: foo 86*67e74705SXin Li // CHECK-NEXT: [indexEntityReference]: kind: namespace | name: NS 87*67e74705SXin Li // CHECK-NEXT: [indexEntityReference]: kind: typedef | name: MyInt 88*67e74705SXin Li // CHECK-NEXT: [indexDeclaration]: kind: enum 89*67e74705SXin Li // CHECK-NEXT: [indexDeclaration]: kind: enumerator | name: SecondVal 90*67e74705SXin Li // CHECK-NEXT: [indexEntityReference]: kind: enumerator | name: EnumVal 91*67e74705SXin Li 92*67e74705SXin Li // CHECK: [indexDeclaration]: kind: function | name: foo2 93*67e74705SXin Li // CHECK: [indexEntityReference]: kind: c++-instance-method | name: operator++ 94*67e74705SXin Li // CHECK-NEXT: [indexEntityReference]: kind: c++-instance-method | name: operator* 95*67e74705SXin Li // CHECK-NEXT: [indexEntityReference]: kind: c++-instance-method | name: operator= 96*67e74705SXin Li // CHECK-NEXT: [indexEntityReference]: kind: c++-instance-method | name: operator!= 97*67e74705SXin Li // CHECK-NEXT: [indexEntityReference]: kind: c++-instance-method | name: operator() 98*67e74705SXin Li 99*67e74705SXin Li // CHECK: [indexEntityReference]: kind: namespace | name: NS | {{.*}} | loc: 42:17 100*67e74705SXin Li // CHECK-NEXT: [indexEntityReference]: kind: namespace | name: NS | {{.*}} | loc: 43:17 101*67e74705SXin Li // CHECK-NEXT: [indexEntityReference]: kind: namespace | name: Inn | {{.*}} | loc: 43:21 102*67e74705SXin Li // CHECK-NEXT: [indexEntityReference]: kind: namespace | name: NS | {{.*}} | loc: 44:7 103*67e74705SXin Li // CHECK-NEXT: [indexEntityReference]: kind: typedef | name: Foo | {{.*}} | loc: 44:11 104*67e74705SXin Li 105*67e74705SXin Li // CHECK: [indexDeclaration]: kind: c++-class-template | name: TS | {{.*}} | loc: 47:8 106*67e74705SXin Li // CHECK-NEXT: [indexDeclaration]: kind: struct-template-partial-spec | name: TS | USR: c:@SP>1#T@TS>#t0.0#I | {{.*}} | loc: 50:8 107*67e74705SXin Li // 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] 108*67e74705SXin Li /* when indexing implicit instantiations 109*67e74705SXin Li [indexDeclaration]: kind: struct-template-spec | name: TS | USR: c:@S@TS>#I | {{.*}} | loc: 50:8 110*67e74705SXin Li [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] 111*67e74705SXin Li */ 112*67e74705SXin Li // CHECK-NEXT: [indexDeclaration]: kind: function | name: foo3 113*67e74705SXin Li /* when indexing implicit instantiations 114*67e74705SXin Li [indexEntityReference]: kind: struct-template-spec | name: TS | USR: c:@S@TS>#I | {{.*}} | loc: 55:3 115*67e74705SXin Li */ 116*67e74705SXin Li // CHECK-NEXT: [indexEntityReference]: kind: c++-class-template | name: TS | USR: c:@ST>2#T#T@TS | {{.*}} | loc: 55:3 117*67e74705SXin Li 118*67e74705SXin Li // CHECK: [indexEntityReference]: kind: variable | name: array_size | {{.*}} | loc: 59:22 119*67e74705SXin Li // CHECK: [indexEntityReference]: kind: variable | name: default_param | {{.*}} | loc: 62:19 120*67e74705SXin Li // CHECK-NOT: [indexEntityReference]: kind: variable | name: default_param | {{.*}} | loc: 62:19 121*67e74705SXin Li 122*67e74705SXin Li // CHECK: [indexEntityReference]: kind: field | name: y | {{.*}} | loc: 69:20 123*67e74705SXin Li // CHECK-NEXT: [indexEntityReference]: kind: field | name: x | {{.*}} | loc: 69:28 124*67e74705SXin Li // CHECK-NOT: [indexEntityReference]: kind: field | name: y | {{.*}} | loc: 69:20 125*67e74705SXin Li // CHECK-NOT: [indexEntityReference]: kind: field | name: x | {{.*}} | loc: 69:28 126*67e74705SXin Li 127*67e74705SXin Li // CHECK: [indexDeclaration]: kind: variable | name: ginitlist | 128*67e74705SXin Li // CHECK: [indexEntityReference]: kind: enumerator | name: EnumVal | {{.*}} | loc: 72:20 129*67e74705SXin Li // CHECK-NOT: [indexEntityReference]: kind: enumerator | name: EnumVal | {{.*}} | loc: 72:20 130