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