Alex Lorenz | 99bee7f | 2017-06-27 10:35:30 +0000 | [diff] [blame] | 1 | // RUN: c-index-test -test-load-source all %s -fno-delayed-template-parsing | FileCheck %s |
| 2 | template<typename MyBase> |
| 3 | struct Derived: MyBase::InnerIterator |
| 4 | { |
| 5 | Derived() : MyBase::InnerIterator() {} |
| 6 | // CHECK: TypeRef=MyBase:2:19 Extent=[5:17 - 5:23] |
| 7 | }; |
| 8 | |
| 9 | template<typename MyBase> |
| 10 | struct Derived2: MyBase::Deeper::InnerIterator |
| 11 | { |
| 12 | Derived2() : MyBase::Deeper::InnerIterator() {} |
| 13 | // CHECK: TypeRef=MyBase:9:19 Extent=[12:18 - 12:24] |
| 14 | }; |
| 15 | |
| 16 | template<typename Q> |
| 17 | struct Templ; |
| 18 | |
| 19 | template<typename MyBase> |
| 20 | struct 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 | |
| 28 | struct Outer { |
| 29 | template <typename Q> |
| 30 | struct Inner { |
| 31 | typedef Q Parm; |
| 32 | }; |
| 33 | }; |
| 34 | |
| 35 | template<typename Q> |
| 36 | struct 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 | |
| 44 | template<typename Q> |
| 45 | struct 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 | |
| 53 | template<typename Q> |
| 54 | struct 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 | |
| 62 | struct Base {}; |
| 63 | |
| 64 | struct 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 | |
| 72 | struct 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 | |
| 80 | namespace 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 | |
| 91 | template<typename MyBase> |
| 92 | struct 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 | |
| 100 | template<typename MyBase> |
| 101 | struct 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 | |
| 109 | template<typename MyBase> |
| 110 | struct 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 | }; |