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:
Richard Trieu 2018-02-13 19:53:40 +00:00
parent 2e2958497f
commit 4d06bef38d
2 changed files with 20 additions and 2 deletions

View File

@ -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) {

View File

@ -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