diff options
| author | Richard Smith <richard-llvm@metafoo.co.uk> | 2014-08-26 03:52:16 +0000 |
|---|---|---|
| committer | Richard Smith <richard-llvm@metafoo.co.uk> | 2014-08-26 03:52:16 +0000 |
| commit | 43ccec8e5314dcd7091e47a98ae08ef86c154697 (patch) | |
| tree | b590c2a2317bb4288fdf08ee239d7018bb5a492d /clang/test | |
| parent | 4af4d2c111e5f8eaf5b49b64fd380dbea5d36f19 (diff) | |
| download | bcm5719-llvm-43ccec8e5314dcd7091e47a98ae08ef86c154697.tar.gz bcm5719-llvm-43ccec8e5314dcd7091e47a98ae08ef86c154697.zip | |
[modules] Track the described template in an alias declaration that is the
pattern of an alias template declaration. Use this to merge alias templates
properly when they're members of class template specializations.
llvm-svn: 216437
Diffstat (limited to 'clang/test')
| -rw-r--r-- | clang/test/Modules/Inputs/cxx-templates-a.h | 2 | ||||
| -rw-r--r-- | clang/test/Modules/Inputs/cxx-templates-b.h | 2 | ||||
| -rw-r--r-- | clang/test/Modules/Inputs/cxx-templates-common.h | 4 | ||||
| -rw-r--r-- | clang/test/Modules/cxx-templates.cpp | 2 |
4 files changed, 10 insertions, 0 deletions
diff --git a/clang/test/Modules/Inputs/cxx-templates-a.h b/clang/test/Modules/Inputs/cxx-templates-a.h index f3150398e7a..928a544fc4d 100644 --- a/clang/test/Modules/Inputs/cxx-templates-a.h +++ b/clang/test/Modules/Inputs/cxx-templates-a.h @@ -85,3 +85,5 @@ template<typename T> struct PartiallyInstantiatePartialSpec<T*> { static T *bar() { return reinterpret_cast<T*>(0); } }; typedef PartiallyInstantiatePartialSpec<int*> PartiallyInstantiatePartialSpecHelper; + +void InstantiateWithAliasTemplate(WithAliasTemplate<int>::X<char>); diff --git a/clang/test/Modules/Inputs/cxx-templates-b.h b/clang/test/Modules/Inputs/cxx-templates-b.h index 8b97d22a370..cfaea282df0 100644 --- a/clang/test/Modules/Inputs/cxx-templates-b.h +++ b/clang/test/Modules/Inputs/cxx-templates-b.h @@ -69,6 +69,8 @@ template<> struct MergeSpecializations<double> { template<typename U> using AliasTemplate = U; +void InstantiateWithAliasTemplate(WithAliasTemplate<int>::X<char>); + @import cxx_templates_a; template<typename T> void UseDefinedInBImplIndirectly(T &v) { PerformDelayedLookup(v); diff --git a/clang/test/Modules/Inputs/cxx-templates-common.h b/clang/test/Modules/Inputs/cxx-templates-common.h index f3c90223091..d729c6edf4c 100644 --- a/clang/test/Modules/Inputs/cxx-templates-common.h +++ b/clang/test/Modules/Inputs/cxx-templates-common.h @@ -41,4 +41,8 @@ typedef WithExplicitSpecialization<int> WithExplicitSpecializationUse; template<typename T> struct WithImplicitSpecialMembers { int n; }; +template<typename T> struct WithAliasTemplate { + template<typename> using X = T; +}; + #include "cxx-templates-textual.h" diff --git a/clang/test/Modules/cxx-templates.cpp b/clang/test/Modules/cxx-templates.cpp index fedaa03ef4f..d0a6c0f9e5d 100644 --- a/clang/test/Modules/cxx-templates.cpp +++ b/clang/test/Modules/cxx-templates.cpp @@ -143,6 +143,8 @@ MergeSpecializations<double>::explicitly_specialized_in_b spec_in_b_2; MergeSpecializations<bool>::explicitly_specialized_in_c spec_in_c_2; #endif +using AliasTemplateMergingTest = WithAliasTemplate<int>::X<char>; + @import cxx_templates_common; typedef SomeTemplate<int*> SomeTemplateIntPtr; |

