diff options
author | Richard Smith <richard-llvm@metafoo.co.uk> | 2014-07-29 00:58:01 +0000 |
---|---|---|
committer | Richard Smith <richard-llvm@metafoo.co.uk> | 2014-07-29 00:58:01 +0000 |
commit | 049fcd8c64eab276ead88ee4245bb4266ddabc0f (patch) | |
tree | 9f0972e6855cb21358ac3436d1b85a5a711b729a | |
parent | 08b9515f45d5fcacdd376da98b6f05e12b152338 (diff) | |
download | bcm5719-llvm-049fcd8c64eab276ead88ee4245bb4266ddabc0f.tar.gz bcm5719-llvm-049fcd8c64eab276ead88ee4245bb4266ddabc0f.zip |
[modules] Add testcase for a bug reduced from a selfhost issue. This bug was
never present in Clang trunk, but was present in some of my development work,
and it seems like a useful test to have.
llvm-svn: 214154
-rw-r--r-- | clang/test/Modules/Inputs/cxx-templates-a.h | 7 | ||||
-rw-r--r-- | clang/test/Modules/Inputs/cxx-templates-b.h | 1 | ||||
-rw-r--r-- | clang/test/Modules/cxx-templates.cpp | 1 |
3 files changed, 9 insertions, 0 deletions
diff --git a/clang/test/Modules/Inputs/cxx-templates-a.h b/clang/test/Modules/Inputs/cxx-templates-a.h index cfb8902db1e..0289c8ada82 100644 --- a/clang/test/Modules/Inputs/cxx-templates-a.h +++ b/clang/test/Modules/Inputs/cxx-templates-a.h @@ -75,3 +75,10 @@ template<typename T> struct MergeTemplateDefinitions { template<typename T> constexpr int MergeTemplateDefinitions<T>::f() { return 1; } template<typename T> using AliasTemplate = T; + +template<typename T> struct PartiallyInstantiatePartialSpec {}; +template<typename T> struct PartiallyInstantiatePartialSpec<T*> { + static T *foo() { return reinterpret_cast<T*>(0); } + static T *bar() { return reinterpret_cast<T*>(0); } +}; +typedef PartiallyInstantiatePartialSpec<int*> PartiallyInstantiatePartialSpecHelper; diff --git a/clang/test/Modules/Inputs/cxx-templates-b.h b/clang/test/Modules/Inputs/cxx-templates-b.h index 802b9262d8d..5dbf1a11216 100644 --- a/clang/test/Modules/Inputs/cxx-templates-b.h +++ b/clang/test/Modules/Inputs/cxx-templates-b.h @@ -73,4 +73,5 @@ template<typename T> void UseDefinedInBImplIndirectly(T &v) { void TriggerInstantiation() { UseDefinedInBImpl<void>(); Std::f<int>(); + PartiallyInstantiatePartialSpec<int*>::foo(); } diff --git a/clang/test/Modules/cxx-templates.cpp b/clang/test/Modules/cxx-templates.cpp index cbe9f350895..b5036ff956f 100644 --- a/clang/test/Modules/cxx-templates.cpp +++ b/clang/test/Modules/cxx-templates.cpp @@ -105,6 +105,7 @@ void g() { int &p = WithPartialSpecializationUse().f(); int &q = WithExplicitSpecializationUse().inner_template<int>(); + int *r = PartiallyInstantiatePartialSpec<int*>::bar(); } static_assert(Outer<int>::Inner<int>::f() == 1, ""); |