diff --git a/clang/lib/Sema/SemaObjC.cpp b/clang/lib/Sema/SemaObjC.cpp index d396258cfc7d18..4b951ea5360342 100644 --- a/clang/lib/Sema/SemaObjC.cpp +++ b/clang/lib/Sema/SemaObjC.cpp @@ -848,12 +848,16 @@ static bool findRetainCycleOwner(Sema &S, Expr *e, RetainCycleOwner &owner) { owner.Indirect = true; if (pre->isSuperReceiver()) { - owner.Variable = S.getCurMethodDecl()->getSelfDecl(); - if (!owner.Variable) + if (const auto *CurMethodDecl = S.getCurMethodDecl()) { + owner.Variable = CurMethodDecl->getSelfDecl(); + if (!owner.Variable) + return false; + owner.Loc = pre->getLocation(); + owner.Range = pre->getSourceRange(); + return true; + } else { return false; - owner.Loc = pre->getLocation(); - owner.Range = pre->getSourceRange(); - return true; + } } e = const_cast( cast(pre->getBase())->getSourceExpr()); @@ -1169,9 +1173,13 @@ void SemaObjC::checkRetainCycles(ObjCMessageExpr *msg) { return; } else { assert(msg->getReceiverKind() == ObjCMessageExpr::SuperInstance); - owner.Variable = SemaRef.getCurMethodDecl()->getSelfDecl(); - owner.Loc = msg->getSuperLoc(); - owner.Range = msg->getSuperLoc(); + if (const auto *CurMethodDecl = SemaRef.getCurMethodDecl()) { + owner.Variable = CurMethodDecl->getSelfDecl(); + owner.Loc = msg->getSuperLoc(); + owner.Range = msg->getSuperLoc(); + } else { + return; + } } // Check whether the receiver is captured by any of the arguments.