summaryrefslogtreecommitdiffstats
path: root/clang/test/ASTMerge/class-template-partial-spec/Inputs/class-template-partial-spec1.cpp
diff options
context:
space:
mode:
authorReid Kleckner <rnk@google.com>2019-05-14 18:51:07 +0000
committerReid Kleckner <rnk@google.com>2019-05-14 18:51:07 +0000
commit0333dd95636da52229ca14b4e5525c1cd8ba62d2 (patch)
tree87ae14b4d0660169ac71541697a9b7338e105185 /clang/test/ASTMerge/class-template-partial-spec/Inputs/class-template-partial-spec1.cpp
parent094584cd522b119444a05019189f2065ad1d215c (diff)
downloadbcm5719-llvm-0333dd95636da52229ca14b4e5525c1cd8ba62d2.tar.gz
bcm5719-llvm-0333dd95636da52229ca14b4e5525c1cd8ba62d2.zip
Restore test files accidentally deleted in r354839
I think there must be a bug in git-llvm causing parent directories to be deleted when the diff deletes files in a subdirectory. Perhaps it is Windows-only. There has been a behavior change, so some of these tests now fail. I have marked them XFAIL and will fix them in a follow-up to separate the changes. llvm-svn: 360699
Diffstat (limited to 'clang/test/ASTMerge/class-template-partial-spec/Inputs/class-template-partial-spec1.cpp')
-rw-r--r--clang/test/ASTMerge/class-template-partial-spec/Inputs/class-template-partial-spec1.cpp118
1 files changed, 118 insertions, 0 deletions
diff --git a/clang/test/ASTMerge/class-template-partial-spec/Inputs/class-template-partial-spec1.cpp b/clang/test/ASTMerge/class-template-partial-spec/Inputs/class-template-partial-spec1.cpp
new file mode 100644
index 00000000000..43606d4d220
--- /dev/null
+++ b/clang/test/ASTMerge/class-template-partial-spec/Inputs/class-template-partial-spec1.cpp
@@ -0,0 +1,118 @@
+template<typename T, class P>
+struct TwoOptionTemplate {};
+
+template<typename T>
+struct TwoOptionTemplate<T, char> {
+ int member;
+};
+
+
+template<typename T>
+struct TwoOptionTemplate<T, double> {
+ float member;
+};
+
+template<typename T>
+struct TwoOptionTemplate<T, T> {
+ T** member;
+};
+
+TwoOptionTemplate<int, char> X0;
+TwoOptionTemplate<int, float> X1;
+TwoOptionTemplate<void *, wchar_t> X2;
+TwoOptionTemplate<long, long> X3;
+TwoOptionTemplate<float, float> X4;
+TwoOptionTemplate<long, long> SingleSource;
+TwoOptionTemplate<char, double> SecondDoubleSource;
+
+
+template<int I, class C>
+struct IntTemplateSpec {};
+
+template<class C>
+struct IntTemplateSpec<4, C> {
+ C member;
+};
+
+template<int I>
+struct IntTemplateSpec<I, void *> {
+ int member;
+ static constexpr int val = I;
+};
+
+template<int I>
+struct IntTemplateSpec<I, double> {
+ char member;
+ static constexpr int val = I;
+};
+
+IntTemplateSpec<4, wchar_t> Y0;
+IntTemplateSpec<5, void *> Y1;
+IntTemplateSpec<1, long> Y2;
+IntTemplateSpec<3, int> Y3;
+//template<int I> constexpr int IntTemplateSpec<I, double>::val;
+IntTemplateSpec<42, double> NumberSource;
+static_assert(NumberSource.val == 42);
+
+namespace One {
+namespace Two {
+ // Just an empty namespace to ensure we can deal with multiple namespace decls.
+}
+}
+
+
+namespace One {
+namespace Two {
+namespace Three {
+
+template<class T>
+class Parent {};
+
+} // namespace Three
+
+} // namespace Two
+
+template<typename T, typename X>
+struct Child1: public Two::Three::Parent<unsigned> {
+ char member;
+};
+
+template<class T>
+struct Child1<T, One::Two::Three::Parent<T>> {
+ T member;
+};
+
+} // namespace One
+
+One::Child1<int, double> Z0Source;
+
+// Test import of nested namespace specifiers
+template<typename T>
+struct Outer {
+ template<typename U> class Inner0;
+};
+
+template<typename X>
+template<typename Y>
+class Outer<X>::Inner0 {
+public:
+ void f(X, Y);
+ template<typename Z> struct Inner1;
+};
+
+template<typename X>
+template<typename Y>
+void Outer<X>::Inner0<Y>::f(X, Y) {}
+
+template<typename X>
+template<typename Y>
+template<typename Z>
+class Outer<X>::Inner0<Y>::Inner1 {
+public:
+ void f(Y, Z);
+};
+
+template<typename X>
+template<typename Y>
+template<typename Z>
+void Outer<X>::Inner0<Y>::Inner1<Z>::f(Y, Z) {}
OpenPOWER on IntegriCloud