[clang] 61528a7 - [NFC] Add tests for ODR checking of default template argument

Chuanqi Xu via cfe-commits cfe-commits at lists.llvm.org
Thu Jan 27 23:32:59 PST 2022


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 at 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 at 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 at 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 at 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 at 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)


        


More information about the cfe-commits mailing list