r300653 - Fix member function call with null 'this' pointer.

Richard Smith via cfe-commits cfe-commits at lists.llvm.org
Tue Apr 18 19:19:21 PDT 2017


Author: rsmith
Date: Tue Apr 18 21:19:21 2017
New Revision: 300653

URL: http://llvm.org/viewvc/llvm-project?rev=300653&view=rev
Log:
Fix member function call with null 'this' pointer.

Modified:
    cfe/trunk/lib/AST/Decl.cpp

Modified: cfe/trunk/lib/AST/Decl.cpp
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/AST/Decl.cpp?rev=300653&r1=300652&r2=300653&view=diff
==============================================================================
--- cfe/trunk/lib/AST/Decl.cpp (original)
+++ cfe/trunk/lib/AST/Decl.cpp Tue Apr 18 21:19:21 2017
@@ -2253,6 +2253,7 @@ bool VarDecl::checkInitIsICE() const {
 
 template<typename DeclT>
 static DeclT *getDefinitionOrSelf(DeclT *D) {
+  assert(D);
   if (auto *Def = D->getDefinition())
     return Def;
   return D;
@@ -3202,9 +3203,12 @@ bool FunctionDecl::isTemplateInstantiati
    
 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 




More information about the cfe-commits mailing list