]> granicus.if.org Git - clang/commitdiff
[Modules] Add some more fun code to my modules stress test, this time
authorChandler Carruth <chandlerc@gmail.com>
Thu, 26 Mar 2015 08:49:55 +0000 (08:49 +0000)
committerChandler Carruth <chandlerc@gmail.com>
Thu, 26 Mar 2015 08:49:55 +0000 (08:49 +0000)
templates. Turns out all of this works correctly (so far). But it should
cover more code paths and will let me test some things that don't
actually work next.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@233263 91177308-0d34-0410-b5e6-96231b3b80d8

test/Modules/Inputs/stress1/common.h
test/Modules/Inputs/stress1/merge00.h

index b158a8e6c1e116aa2eaac31159206339b8b736ab..b52520ee8f559797badee4d5fe88a82b61630d1d 100644 (file)
@@ -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
index b769b0877dd22feee17cf7ae2d0dd4396671dbcc..fc1b4f8118804dfebc56016cdfcefbda261ada9b 100644 (file)
@@ -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