forked from OSchip/llvm-project
[ODRHash] Hash Template and TemplateExpansion in TemplateArgument.
llvm-svn: 305361
This commit is contained in:
parent
1dcb405ca1
commit
ee132d6eb2
|
@ -150,13 +150,16 @@ void ODRHash::AddTemplateArgument(TemplateArgument TA) {
|
|||
case TemplateArgument::Declaration:
|
||||
case TemplateArgument::NullPtr:
|
||||
case TemplateArgument::Integral:
|
||||
break;
|
||||
case TemplateArgument::Template:
|
||||
case TemplateArgument::TemplateExpansion:
|
||||
AddTemplateName(TA.getAsTemplateOrTemplatePattern());
|
||||
break;
|
||||
case TemplateArgument::Expression:
|
||||
AddStmt(TA.getAsExpr());
|
||||
break;
|
||||
case TemplateArgument::Pack:
|
||||
llvm_unreachable("Pack");
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -1051,6 +1051,24 @@ S3 s3;
|
|||
// expected-note@first.h:* {{but in 'FirstModule' found type alias 'T' with different underlying type 'U3<2>'}}
|
||||
#endif
|
||||
|
||||
#if defined(FIRST)
|
||||
template<class> struct T4a {};
|
||||
template <template <class> class T> struct U4 {};
|
||||
struct S4 {
|
||||
U4<T4a> x;
|
||||
};
|
||||
#elif defined(SECOND)
|
||||
template<class> struct T4b {};
|
||||
template <template <class> class T> struct U4 {};
|
||||
struct S4 {
|
||||
U4<T4b> x;
|
||||
};
|
||||
#else
|
||||
S4 s4;
|
||||
// expected-error@first.h:* {{'TemplateArgument::S4::x' from module 'FirstModule' is not present in definition of 'TemplateArgument::S4' in module 'SecondModule'}}
|
||||
// expected-note@second.h:* {{declaration of 'x' does not match}}
|
||||
#endif
|
||||
|
||||
}
|
||||
|
||||
// Interesting cases that should not cause errors. struct S should not error
|
||||
|
|
Loading…
Reference in New Issue