summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--clang/test/Modules/Inputs/stress1/common.h24
-rw-r--r--clang/test/Modules/Inputs/stress1/merge00.h2
2 files changed, 24 insertions, 2 deletions
diff --git a/clang/test/Modules/Inputs/stress1/common.h b/clang/test/Modules/Inputs/stress1/common.h
index b158a8e6c1e..b52520ee8f5 100644
--- a/clang/test/Modules/Inputs/stress1/common.h
+++ b/clang/test/Modules/Inputs/stress1/common.h
@@ -5,6 +5,8 @@ inline char function00(char x) { return x + x; }
inline short function00(short x) { return x + x; }
inline int function00(int x) { return x + x; }
+namespace N01 { struct S00; }
+
namespace N00 {
struct S00 {
char c;
@@ -24,7 +26,19 @@ struct S00 {
operator int() { return i; }
};
struct S01 {};
-struct S03 {};
+struct S02 {};
+template <typename T> struct S03 {
+ struct S00 : N00::S00 {};
+};
+template <int I, template <typename> class U> struct S03<U<int>[I]>
+ : U<int>::S00 {
+ S03();
+ S03(int);
+ S03(short);
+ S03(char);
+ template <typename V = decltype(I)> S03(V);
+};
+template <> struct S03<S03<int>[42]> : S00 {};
}
namespace N01 {
@@ -35,6 +49,14 @@ struct S01 {};
struct S02 {};
}
+using namespace N00;
+
+template <int I, template <typename> class U> template <typename V> S03<U<int>[I]>::S03(V x) : S00(x) {}
+template <int I, template <typename> class U> S03<U<int>[I]>::S03() : S00(I) {}
+template <int I, template <typename> class U> S03<U<int>[I]>::S03(char x) : S00(x) {}
+template <int I, template <typename> class U> S03<U<int>[I]>::S03(short x) : S00(x) {}
+template <int I, template <typename> class U> S03<U<int>[I]>::S03(int x) : S00(x) {}
+
#pragma weak pragma_weak00
#pragma weak pragma_weak01
#pragma weak pragma_weak02
diff --git a/clang/test/Modules/Inputs/stress1/merge00.h b/clang/test/Modules/Inputs/stress1/merge00.h
index b769b0877dd..fc1b4f81188 100644
--- a/clang/test/Modules/Inputs/stress1/merge00.h
+++ b/clang/test/Modules/Inputs/stress1/merge00.h
@@ -14,7 +14,7 @@
#include "m02.h"
#include "m03.h"
-inline int g() { return N00::S00('a').method00('b') + (int)N00::S00(42) + function00(42); }
+inline int g() { return N00::S00('a').method00('b') + (int)S00(42) + function00(42); }
#pragma weak pragma_weak02
#pragma weak pragma_weak05
OpenPOWER on IntegriCloud