1*67e74705SXin Li using MyTypeAlias = int; 2*67e74705SXin Li 3*67e74705SXin Li extern "C" { Allocate()4*67e74705SXin Li template < typename T > *Allocate() { } 5*67e74705SXin Li } 6*67e74705SXin Li 7*67e74705SXin Li // rdar://14063074 8*67e74705SXin Li namespace rdar14063074 { 9*67e74705SXin Li template <typename T> 10*67e74705SXin Li struct TS {}; 11*67e74705SXin Li struct TS<int> {}; 12*67e74705SXin Li 13*67e74705SXin Li template <typename T> tfoo()14*67e74705SXin Livoid tfoo() {} 15*67e74705SXin Li void tfoo<int>() {} 16*67e74705SXin Li } 17*67e74705SXin Li 18*67e74705SXin Li namespace crash1 { 19*67e74705SXin Li template<typename T> class A { 20*67e74705SXin Li A(A &) = delete; 21*67e74705SXin Li void meth(); 22*67e74705SXin Li }; 23*67e74705SXin Li template <> void A<int>::meth(); 24*67e74705SXin Li template class A<int>; 25*67e74705SXin Li } 26*67e74705SXin Li 27*67e74705SXin Li class B { 28*67e74705SXin Li mutable int x_; 29*67e74705SXin Li int y_; 30*67e74705SXin Li 31*67e74705SXin Li B() = default; 32*67e74705SXin Li B(int); 33*67e74705SXin Li explicit B(double); 34*67e74705SXin Li B(const B&); 35*67e74705SXin Li B(B&&); 36*67e74705SXin Li }; 37*67e74705SXin Li 38*67e74705SXin Li class C { 39*67e74705SXin Li explicit C(const C&); 40*67e74705SXin Li }; 41*67e74705SXin Li 42*67e74705SXin Li // RUN: c-index-test -index-file %s > %t 43*67e74705SXin Li // RUN: FileCheck %s -input-file=%t 44*67e74705SXin Li 45*67e74705SXin Li // CHECK: [indexDeclaration]: kind: type-alias | name: MyTypeAlias | {{.*}} | loc: 1:7 46*67e74705SXin Li // CHECK: [indexDeclaration]: kind: struct-template-spec | name: TS | {{.*}} | loc: 11:8 47*67e74705SXin Li // CHECK: [indexDeclaration]: kind: function-template-spec | name: tfoo | {{.*}} | loc: 15:6 48*67e74705SXin Li // CHECK: [indexDeclaration]: kind: c++-instance-method | name: meth | {{.*}} | loc: 23:26 49*67e74705SXin Li // CHECK: [indexDeclaration]: kind: field | name: x_ | USR: c:@S@B@FI@x_ | lang: C++ | cursor: FieldDecl=x_:28:15 (Definition) (mutable) | loc: 28:15 | semantic-container: [B:27:7] | lexical-container: [B:27:7] | isRedecl: 0 | isDef: 1 | isContainer: 0 | isImplicit: 0 50*67e74705SXin Li // CHECK: [indexDeclaration]: kind: field | name: y_ | USR: c:@S@B@FI@y_ | lang: C++ | cursor: FieldDecl=y_:29:7 (Definition) | loc: 29:7 | semantic-container: [B:27:7] | lexical-container: [B:27:7] | isRedecl: 0 | isDef: 1 | isContainer: 0 | isImplicit: 0 51*67e74705SXin Li // CHECK: [indexDeclaration]: kind: constructor | name: B | {{.*}} (default constructor) (defaulted) | loc: 31:3 52*67e74705SXin Li // CHECK: [indexDeclaration]: kind: constructor | name: B | {{.*}} (converting constructor) | loc: 32:3 53*67e74705SXin Li // CHECK: [indexDeclaration]: kind: constructor | name: B | {{.*}} | loc: 33:12 54*67e74705SXin Li // CHECK: [indexDeclaration]: kind: constructor | name: B | {{.*}} (copy constructor) (converting constructor) | loc: 34:3 55*67e74705SXin Li // CHECK: [indexDeclaration]: kind: constructor | name: B | {{.*}} (move constructor) (converting constructor) | loc: 35:3 56*67e74705SXin Li // CHECK: [indexDeclaration]: kind: constructor | name: C | {{.*}} (copy constructor) | loc: 39:12 57