summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorRichard Smith <richard-llvm@metafoo.co.uk>2014-07-29 00:58:01 +0000
committerRichard Smith <richard-llvm@metafoo.co.uk>2014-07-29 00:58:01 +0000
commit049fcd8c64eab276ead88ee4245bb4266ddabc0f (patch)
tree9f0972e6855cb21358ac3436d1b85a5a711b729a
parent08b9515f45d5fcacdd376da98b6f05e12b152338 (diff)
downloadbcm5719-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.h7
-rw-r--r--clang/test/Modules/Inputs/cxx-templates-b.h1
-rw-r--r--clang/test/Modules/cxx-templates.cpp1
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, "");
OpenPOWER on IntegriCloud