Update StmtProfile.cpp to handle zero template arguments.
Treat having no templates arguments differently than having zero template arguments when profiling. llvm-svn: 325040
This commit is contained in:
parent
2e2958497f
commit
4d06bef38d
|
@ -966,8 +966,11 @@ void StmtProfiler::VisitDeclRefExpr(const DeclRefExpr *S) {
|
|||
if (!Canonical)
|
||||
VisitNestedNameSpecifier(S->getQualifier());
|
||||
VisitDecl(S->getDecl());
|
||||
if (!Canonical)
|
||||
VisitTemplateArguments(S->getTemplateArgs(), S->getNumTemplateArgs());
|
||||
if (!Canonical) {
|
||||
ID.AddBoolean(S->hasExplicitTemplateArgs());
|
||||
if (S->hasExplicitTemplateArgs())
|
||||
VisitTemplateArguments(S->getTemplateArgs(), S->getNumTemplateArgs());
|
||||
}
|
||||
}
|
||||
|
||||
void StmtProfiler::VisitPredefinedExpr(const PredefinedExpr *S) {
|
||||
|
|
|
@ -2924,6 +2924,21 @@ int I10 = F10();
|
|||
// expected-note@first.h:* {{but in 'FirstModule' found a different body}}
|
||||
} // namespace FunctionDecl
|
||||
|
||||
namespace DeclTemplateArguments {
|
||||
#if defined(FIRST)
|
||||
int foo() { return 1; }
|
||||
int bar() { return foo(); }
|
||||
#elif defined(SECOND)
|
||||
template <class T = int>
|
||||
int foo() { return 2; }
|
||||
int bar() { return foo<>(); }
|
||||
#else
|
||||
int num = bar();
|
||||
// expected-error@second.h:* {{'DeclTemplateArguments::bar' has different definitions in different modules; definition in module 'SecondModule' first difference is function body}}
|
||||
// expected-note@first.h:* {{but in 'FirstModule' found a different body}}
|
||||
#endif
|
||||
}
|
||||
|
||||
// Keep macros contained to one file.
|
||||
#ifdef FIRST
|
||||
#undef FIRST
|
||||
|
|
Loading…
Reference in New Issue