forked from OSchip/llvm-project
[NFC] Add tests for ODR checking of default template argument
This commit is contained in:
parent
c962b3fdf8
commit
61528a7778
|
@ -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 different definitions in different modules; first difference is definition in module 'SecondModule' found template parameter with default argument}}
|
||||
// expected-note@first.h:* {{but in 'FirstModule' found template parameter with different 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 different definitions in different modules; first difference is definition in module 'SecondModule' found template parameter with default argument}}
|
||||
// expected-note@first.h:* {{but in 'FirstModule' found template parameter with different 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)
|
||||
|
|
Loading…
Reference in New Issue