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