diff options
Diffstat (limited to 'clang/lib/StaticAnalyzer/Checkers')
3 files changed, 18 insertions, 15 deletions
diff --git a/clang/lib/StaticAnalyzer/Checkers/RetainCountChecker/RetainCountChecker.cpp b/clang/lib/StaticAnalyzer/Checkers/RetainCountChecker/RetainCountChecker.cpp index a9b6d6839d9..4e5fac815e9 100644 --- a/clang/lib/StaticAnalyzer/Checkers/RetainCountChecker/RetainCountChecker.cpp +++ b/clang/lib/StaticAnalyzer/Checkers/RetainCountChecker/RetainCountChecker.cpp @@ -248,7 +248,7 @@ void RetainCountChecker::checkPostStmt(const CastExpr *CE, if (!BE) return; - ArgEffect AE = IncRef; + ArgEffectKind AE = IncRef; switch (BE->getBridgeKind()) { case OBC_Bridge: @@ -534,7 +534,7 @@ void RetainCountChecker::processSummaryOfInlined(const RetainSummary &Summ, SVal V = CallOrMsg.getArgSVal(idx); if (SymbolRef Sym = V.getAsLocSymbol()) { - bool ShouldRemoveBinding = Summ.getArg(idx) == StopTrackingHard; + bool ShouldRemoveBinding = Summ.getArg(idx).getKind() == StopTrackingHard; if (const RefVal *T = getRefBinding(state, Sym)) if (shouldEscapeArgumentOnCall(CallOrMsg, idx, T)) ShouldRemoveBinding = true; @@ -547,7 +547,7 @@ void RetainCountChecker::processSummaryOfInlined(const RetainSummary &Summ, // Evaluate the effect on the message receiver. if (const auto *MsgInvocation = dyn_cast<ObjCMethodCall>(&CallOrMsg)) { if (SymbolRef Sym = MsgInvocation->getReceiverSVal().getAsLocSymbol()) { - if (Summ.getReceiverEffect() == StopTrackingHard) { + if (Summ.getReceiverEffect().getKind() == StopTrackingHard) { state = removeRefBinding(state, Sym); } } @@ -566,7 +566,7 @@ void RetainCountChecker::processSummaryOfInlined(const RetainSummary &Summ, static ProgramStateRef updateOutParameter(ProgramStateRef State, SVal ArgVal, - ArgEffect Effect) { + ArgEffectKind Effect) { auto *ArgRegion = dyn_cast_or_null<TypedValueRegion>(ArgVal.getAsRegion()); if (!ArgRegion) return State; @@ -611,7 +611,7 @@ void RetainCountChecker::checkSummary(const RetainSummary &Summ, for (unsigned idx = 0, e = CallOrMsg.getNumArgs(); idx != e; ++idx) { SVal V = CallOrMsg.getArgSVal(idx); - ArgEffect Effect = Summ.getArg(idx); + ArgEffectKind Effect = Summ.getArg(idx).getKind(); if (Effect == RetainedOutParameter || Effect == UnretainedOutParameter) { state = updateOutParameter(state, V, Effect); } else if (SymbolRef Sym = V.getAsLocSymbol()) { @@ -637,8 +637,8 @@ void RetainCountChecker::checkSummary(const RetainSummary &Summ, if (SymbolRef Sym = MsgInvocation->getReceiverSVal().getAsLocSymbol()) { if (const RefVal *T = getRefBinding(state, Sym)) { ReceiverIsTracked = true; - state = updateSymbol(state, Sym, *T, Summ.getReceiverEffect(), - hasErr, C); + state = updateSymbol(state, Sym, *T, + Summ.getReceiverEffect().getKind(), hasErr, C); if (hasErr) { ErrorRange = MsgInvocation->getOriginExpr()->getReceiverRange(); ErrorSym = Sym; @@ -648,7 +648,7 @@ void RetainCountChecker::checkSummary(const RetainSummary &Summ, } else if (const auto *MCall = dyn_cast<CXXMemberCall>(&CallOrMsg)) { if (SymbolRef Sym = MCall->getCXXThisVal().getAsLocSymbol()) { if (const RefVal *T = getRefBinding(state, Sym)) { - state = updateSymbol(state, Sym, *T, Summ.getThisEffect(), + state = updateSymbol(state, Sym, *T, Summ.getThisEffect().getKind(), hasErr, C); if (hasErr) { ErrorRange = MCall->getOriginExpr()->getSourceRange(); @@ -707,10 +707,11 @@ void RetainCountChecker::checkSummary(const RetainSummary &Summ, } } -ProgramStateRef -RetainCountChecker::updateSymbol(ProgramStateRef state, SymbolRef sym, - RefVal V, ArgEffect E, RefVal::Kind &hasErr, - CheckerContext &C) const { +ProgramStateRef RetainCountChecker::updateSymbol(ProgramStateRef state, + SymbolRef sym, RefVal V, + ArgEffectKind E, + RefVal::Kind &hasErr, + CheckerContext &C) const { bool IgnoreRetainMsg = (bool)C.getASTContext().getLangOpts().ObjCAutoRefCount; switch (E) { default: @@ -1405,7 +1406,7 @@ void RetainCountChecker::checkBeginFunction(CheckerContext &Ctx) const { QualType Ty = Param->getType(); const ArgEffect *AE = CalleeSideArgEffects.lookup(idx); - if (AE && *AE == DecRef && isISLObjectRef(Ty)) { + if (AE && AE->getKind() == DecRef && isISLObjectRef(Ty)) { state = setRefBinding( state, Sym, RefVal::makeOwned(ObjKind::Generalized, Ty)); } else if (isISLObjectRef(Ty)) { diff --git a/clang/lib/StaticAnalyzer/Checkers/RetainCountChecker/RetainCountChecker.h b/clang/lib/StaticAnalyzer/Checkers/RetainCountChecker/RetainCountChecker.h index d8bbe6fcdd4..80d1b0573c7 100644 --- a/clang/lib/StaticAnalyzer/Checkers/RetainCountChecker/RetainCountChecker.h +++ b/clang/lib/StaticAnalyzer/Checkers/RetainCountChecker/RetainCountChecker.h @@ -347,7 +347,7 @@ public: void checkEndFunction(const ReturnStmt *RS, CheckerContext &C) const; ProgramStateRef updateSymbol(ProgramStateRef state, SymbolRef sym, - RefVal V, ArgEffect E, RefVal::Kind &hasErr, + RefVal V, ArgEffectKind E, RefVal::Kind &hasErr, CheckerContext &C) const; void processNonLeakError(ProgramStateRef St, SourceRange ErrorRange, diff --git a/clang/lib/StaticAnalyzer/Checkers/RetainCountChecker/RetainCountDiagnostics.cpp b/clang/lib/StaticAnalyzer/Checkers/RetainCountChecker/RetainCountDiagnostics.cpp index 44cb7553c0d..5a687ef8d17 100644 --- a/clang/lib/StaticAnalyzer/Checkers/RetainCountChecker/RetainCountDiagnostics.cpp +++ b/clang/lib/StaticAnalyzer/Checkers/RetainCountChecker/RetainCountDiagnostics.cpp @@ -48,7 +48,9 @@ static bool shouldGenerateNote(llvm::raw_string_ostream &os, RefVal PrevV = *PrevT; // Specially handle -dealloc. - if (std::find(AEffects.begin(), AEffects.end(), Dealloc) != AEffects.end()) { + if (std::find_if(AEffects.begin(), AEffects.end(), [](ArgEffect &E) { + return E.getKind() == Dealloc; + }) != AEffects.end()) { // Determine if the object's reference count was pushed to zero. assert(!PrevV.hasSameState(CurrV) && "The state should have changed."); // We may not have transitioned to 'release' if we hit an error. |

