xref: /llvm-project/clang/test/Index/index-file.cpp (revision 0f1c1be1968076d6f96f8a7bcc4a15cf195ecd97)
1 using MyTypeAlias = int;
2 
3 extern "C" {
Allocate()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>
tfoo()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