Author: Chuanqi Xu
Date: 2022-01-28T15:32:28+08:00
New Revision: 61528a77780e696a657b1a55de6bb48db7026245

URL: 
https://github.com/llvm/llvm-project/commit/61528a77780e696a657b1a55de6bb48db7026245
DIFF: 
https://github.com/llvm/llvm-project/commit/61528a77780e696a657b1a55de6bb48db7026245.diff

LOG: [NFC] Add tests for ODR checking of default template argument

Added: 
    

Modified: 
    clang/test/Modules/odr_hash.cpp

Removed: 
    


################################################################################
diff  --git a/clang/test/Modules/odr_hash.cpp b/clang/test/Modules/odr_hash.cpp
index e2ff4348f04bb..fe51915074239 100644
--- a/clang/test/Modules/odr_hash.cpp
+++ b/clang/test/Modules/odr_hash.cpp
@@ -2398,6 +2398,93 @@ using TemplateParameters::S6;
 // expected-note@first.h:* {{but in 'FirstModule' found template parameter 
'A'}}
 #endif
 
+#if defined(FIRST)
+template <int A = 7>
+struct S7 {};
+#elif defined(SECOND)
+template <int A = 8>
+struct S7 {};
+#else
+using TemplateParameters::S7;
+// expected-error@second.h:* {{'TemplateParameters::S7' has 
diff erent definitions in 
diff erent modules; first 
diff erence is definition in module 'SecondModule' found template parameter 
with default argument}}
+// expected-note@first.h:* {{but in 'FirstModule' found template parameter 
with 
diff erent default argument}}
+#endif
+
+#if defined(FIRST)
+template <int* A = nullptr>
+struct S8 {};
+#elif defined(SECOND)
+inline int S8_default_arg = 0x12345;
+template <int* A = &S8_default_arg>
+struct S8 {};
+#else
+using TemplateParameters::S8;
+// expected-error@second.h:* {{'TemplateParameters::S8' has 
diff erent definitions in 
diff erent modules; first 
diff erence is definition in module 'SecondModule' found template parameter 
with default argument}}
+// expected-note@first.h:* {{but in 'FirstModule' found template parameter 
with 
diff erent default argument}}
+#endif
+
+#if defined(FIRST)
+template <int A = 43>
+struct S9 {};
+#elif defined(SECOND)
+template <int A = 43>
+struct S9 {};
+#else
+using TemplateParameters::S9;
+#endif
+
+#if defined(FIRST)
+template <class A = double>
+struct S10 {};
+#elif defined(SECOND)
+template <class A = double>
+struct S10 {};
+#else
+using TemplateParameters::S10;
+#endif
+
+#if defined(FIRST)
+template <template<int> class A = S9>
+struct S11 {};
+#elif defined(SECOND)
+template <template<int> class A = S9>
+struct S11 {};
+#else
+using TemplateParameters::S11;
+#endif
+
+// FIXME: It looks like we didn't implement ODR check for template variables.
+// S12, S13 and S14 show this.
+#if defined(FIRST)
+template <int A = 43>
+int S12 {};
+#elif defined(SECOND)
+template <int A = 44>
+int S12 {};
+#else
+using TemplateParameters::S12;
+#endif
+
+#if defined(FIRST)
+template <class A = double>
+int S13 {};
+#elif defined(SECOND)
+template <class A = int>
+int S13 {};
+#else
+using TemplateParameters::S13;
+#endif
+
+#if defined(FIRST)
+template <class A>
+int S14 {};
+#elif defined(SECOND)
+template <class B>
+int S14 {};
+#else
+using TemplateParameters::S14;
+#endif
+
 #define DECLS
 
 #if defined(FIRST) || defined(SECOND)


        
_______________________________________________
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits

Reply via email to