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