xref: /aosp_15_r20/external/clang/test/Index/index-file.cpp (revision 67e74705e28f6214e480b399dd47ea732279e315)
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 Li void 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