diff options
author | Chandler Carruth <chandlerc@gmail.com> | 2016-08-23 02:00:51 +0000 |
---|---|---|
committer | Chandler Carruth <chandlerc@gmail.com> | 2016-08-23 02:00:51 +0000 |
commit | c6c937f2a6f559aecfa5a03d7312186fcf837266 (patch) | |
tree | c9cc3e435da389603f0666d7bbf612f1be3673d0 /clang/lib/Sema/SemaTemplate.cpp | |
parent | 567631bdd407a556afb0ed8b0dc57f963f7e366e (diff) | |
download | bcm5719-llvm-c6c937f2a6f559aecfa5a03d7312186fcf837266.tar.gz bcm5719-llvm-c6c937f2a6f559aecfa5a03d7312186fcf837266.zip |
Revert r279486 "Fix regression introduced by r279164"
Build bots seem unhappy and as Richard was leaving he asked me to revert
this for him. Doing so.
llvm-svn: 279500
Diffstat (limited to 'clang/lib/Sema/SemaTemplate.cpp')
-rw-r--r-- | clang/lib/Sema/SemaTemplate.cpp | 33 |
1 files changed, 10 insertions, 23 deletions
diff --git a/clang/lib/Sema/SemaTemplate.cpp b/clang/lib/Sema/SemaTemplate.cpp index 6241f524af2..ede1c5bcc64 100644 --- a/clang/lib/Sema/SemaTemplate.cpp +++ b/clang/lib/Sema/SemaTemplate.cpp @@ -487,6 +487,8 @@ bool Sema::DiagnoseUninstantiableTemplate(SourceLocation PointOfInstantiation, QualType InstantiationTy; if (TagDecl *TD = dyn_cast<TagDecl>(Instantiation)) InstantiationTy = Context.getTypeDeclType(TD); + else + InstantiationTy = cast<FunctionDecl>(Instantiation)->getType(); if (!Complain || (PatternDef && PatternDef->isInvalidDecl())) { // Say nothing } else if (PatternDef) { @@ -498,30 +500,15 @@ bool Sema::DiagnoseUninstantiableTemplate(SourceLocation PointOfInstantiation, // we're lexically inside it. Instantiation->setInvalidDecl(); } else if (InstantiatedFromMember) { - if (isa<FunctionDecl>(Instantiation)) { - Diag(PointOfInstantiation, - diag::err_explicit_instantiation_undefined_member) - << 1 << Instantiation->getDeclName() << Instantiation->getDeclContext(); - } else { - Diag(PointOfInstantiation, - diag::err_implicit_instantiate_member_undefined) - << InstantiationTy; - } - Diag(Pattern->getLocation(), isa<FunctionDecl>(Instantiation) - ? diag::note_explicit_instantiation_here - : diag::note_member_declared_at); + Diag(PointOfInstantiation, + diag::err_implicit_instantiate_member_undefined) + << InstantiationTy; + Diag(Pattern->getLocation(), diag::note_member_declared_at); } else { - if (isa<FunctionDecl>(Instantiation)) - Diag(PointOfInstantiation, - diag::err_explicit_instantiation_undefined_func_template) - << Pattern; - else - Diag(PointOfInstantiation, diag::err_template_instantiate_undefined) - << (TSK != TSK_ImplicitInstantiation) - << InstantiationTy; - Diag(Pattern->getLocation(), isa<FunctionDecl>(Instantiation) - ? diag::note_explicit_instantiation_here - : diag::note_template_decl_here); + Diag(PointOfInstantiation, diag::err_template_instantiate_undefined) + << (TSK != TSK_ImplicitInstantiation) + << InstantiationTy; + Diag(Pattern->getLocation(), diag::note_template_decl_here); } // In general, Instantiation isn't marked invalid to get more than one |