From e8669326ae0b187de5b0a91252ca90a176471d6c Mon Sep 17 00:00:00 2001 From: Richard Smith Date: Wed, 19 Apr 2017 02:19:21 +0000 Subject: [PATCH] Fix member function call with null 'this' pointer. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@300653 91177308-0d34-0410-b5e6-96231b3b80d8 --- lib/AST/Decl.cpp | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/lib/AST/Decl.cpp b/lib/AST/Decl.cpp index 9b5ba813db..5fe0706521 100644 --- a/lib/AST/Decl.cpp +++ b/lib/AST/Decl.cpp @@ -2253,6 +2253,7 @@ bool VarDecl::checkInitIsICE() const { template static DeclT *getDefinitionOrSelf(DeclT *D) { + assert(D); if (auto *Def = D->getDefinition()) return Def; return D; @@ -3202,9 +3203,12 @@ bool FunctionDecl::isTemplateInstantiation() const { FunctionDecl *FunctionDecl::getTemplateInstantiationPattern() const { // Handle class scope explicit specialization special case. - if (getTemplateSpecializationKind() == TSK_ExplicitSpecialization) - return getDefinitionOrSelf(getClassScopeSpecializationPattern()); - + if (getTemplateSpecializationKind() == TSK_ExplicitSpecialization) { + if (auto *Spec = getClassScopeSpecializationPattern()) + return getDefinitionOrSelf(Spec); + return nullptr; + } + // If this is a generic lambda call operator specialization, its // instantiation pattern is always its primary template's pattern // even if its primary template was instantiated from another -- 2.40.0