Clang Project

clang_source_code/test/Index/ctor-init-source-loc.cpp
1// RUN: c-index-test -test-load-source all %s -fno-delayed-template-parsing | FileCheck %s
2template<typename MyBase>
3struct Derived:  MyBase::InnerIterator
4{
5    Derived() : MyBase::InnerIterator() {}
6// CHECK:  TypeRef=MyBase:2:19 Extent=[5:17 - 5:23]
7};
8
9template<typename MyBase>
10struct Derived2:  MyBase::Deeper::InnerIterator
11{
12    Derived2() : MyBase::Deeper::InnerIterator() {}
13// CHECK:  TypeRef=MyBase:9:19 Extent=[12:18 - 12:24]
14};
15
16template<typename Q>
17struct Templ;
18
19template<typename MyBase>
20struct Derived3:  Templ<MyBase>::InnerIterator
21{
22    Derived3() : Templ<MyBase>::InnerIterator() {}
23// CHECK: TemplateRef=Templ:17:8 Extent=[22:18 - 22:23]
24// CHECK: TypeRef=MyBase:19:19 Extent=[22:24 - 22:30]
25};
26
27
28struct Outer {
29    template <typename Q>
30    struct Inner {
31        typedef Q Parm;
32    };
33};
34
35template<typename Q>
36struct Derived4:  Outer::Inner<Q>::Parm
37{
38    Derived4() : Outer::Inner<Q>::Parm() {}
39// CHECK: TypeRef=struct Outer:28:8 Extent=[38:18 - 38:23]
40// CHECK: TemplateRef=Inner:30:12 Extent=[38:25 - 38:30]
41// CHECK: TypeRef=Q:35:19 Extent=[38:31 - 38:32]
42};
43
44template<typename Q>
45struct Derived5:  Outer::Inner<Q>::Parm::InnerIterator
46{
47    Derived5() : Outer::Inner<Q>::Parm::InnerIterator() {}
48// CHECK: TypeRef=struct Outer:28:8 Extent=[47:18 - 47:23]
49// CHECK: TemplateRef=Inner:30:12 Extent=[47:25 - 47:30]
50// CHECK: TypeRef=Q:44:19 Extent=[47:31 - 47:32]
51};
52
53template<typename Q>
54struct Derived6:  Outer::Inner<Q>
55{
56    Derived6() : Outer::Inner<Q>() {}
57// CHECK: TypeRef=struct Outer:28:8 Extent=[56:18 - 56:23]
58// CHECK: TemplateRef=Inner:30:12 Extent=[56:25 - 56:30]
59// CHECK: TypeRef=Q:53:19 Extent=[56:31 - 56:32]
60};
61
62struct Base {};
63
64struct Derived7:  Outer::Inner<Base>::Parm
65{
66    Derived7() : Outer::Inner<Base>::Parm() {}
67// CHECK: TypeRef=struct Outer:28:8 Extent=[66:18 - 66:23]
68// CHECK: TemplateRef=Inner:30:12 Extent=[66:25 - 66:30]
69// CHECK: TypeRef=struct Base:62:8 Extent=[66:31 - 66:35]
70};
71
72struct Derived8:  Outer::Inner<Base>
73{
74    Derived8() : Outer::Inner<Base>() {}
75// CHECK: TypeRef=struct Outer:28:8 Extent=[74:18 - 74:23]
76// CHECK: TemplateRef=Inner:30:12 Extent=[74:25 - 74:30]
77// CHECK: TypeRef=struct Base:62:8 Extent=[74:31 - 74:35]
78};
79
80namespace Namespace {
81    template<typename Q> struct Templ;
82
83    struct Outer {
84        template <typename Q>
85        struct Inner {
86            typedef Q Parm;
87        };
88    };
89}
90
91template<typename MyBase>
92struct Derived9:  Namespace::Templ<MyBase>::InnerIterator
93{
94    Derived9() : Namespace::Templ<MyBase>::InnerIterator() {}
95// CHECK: NamespaceRef=Namespace:80:11 Extent=[94:18 - 94:27]
96// CHECK: TemplateRef=Templ:81:33 Extent=[94:29 - 94:34]
97// CHECK: TypeRef=MyBase:91:19 Extent=[94:35 - 94:41]
98};
99
100template<typename MyBase>
101struct Derived10:  Namespace::Templ<MyBase>
102{
103    Derived10() : Namespace::Templ<MyBase>() {}
104// CHECK: NamespaceRef=Namespace:80:11 Extent=[103:19 - 103:28]
105// CHECK: TemplateRef=Templ:81:33 Extent=[103:30 - 103:35]
106// CHECK: TypeRef=MyBase:100:19 Extent=[103:36 - 103:42]
107};
108
109template<typename MyBase>
110struct Derived11:  Namespace::Outer::Inner<MyBase>::Parm
111{
112    Derived11() : Namespace::Outer::Inner<MyBase>::Parm() {}
113// CHECK: NamespaceRef=Namespace:80:11 Extent=[112:19 - 112:28]
114// CHECK: TypeRef=struct Namespace::Outer:83:12 Extent=[112:30 - 112:35]
115// CHECK: TemplateRef=Inner:85:16 Extent=[112:37 - 112:42]
116// CHECK: TypeRef=MyBase:109:19 Extent=[112:43 - 112:49]
117};
118