clang
10.0.0git
|
Public Attributes | |
bool | TrackObjCAndCFObjects = false |
Track Objective-C and CoreFoundation objects. More... | |
bool | TrackOSObjects = false |
Track sublcasses of OSObject. More... | |
bool | TrackNSCFStartParam = false |
Track initial parameters (for the entry point) for NS/CF objects. More... | |
Additional Inherited Members | |
![]() | |
static void | _register (CHECKER *checker, CheckerManager &mgr) |
![]() | |
template<typename CHECKER > | |
static void | _register (CHECKER *checker, CheckerManager &mgr) |
Definition at line 238 of file RetainCountChecker.h.
|
inline |
Definition at line 278 of file RetainCountChecker.h.
void RetainCountChecker::checkBeginFunction | ( | CheckerContext & | C | ) | const |
Definition at line 1331 of file RetainCountChecker.cpp.
References clang::ento::CheckerContext::addTransition(), clang::ento::CF, clang::ento::DecRef, clang::ento::Generalized, clang::LocationContext::getDecl(), clang::ento::ArgEffect::getKind(), clang::ento::CheckerContext::getLocationContext(), clang::ento::ArgEffect::getObjKind(), clang::ento::CheckerContext::getState(), clang::ValueDecl::getType(), clang::ento::CheckerContext::inTopFrame(), clang::ento::retaincountchecker::RefVal::makeNotOwned(), clang::ento::retaincountchecker::RefVal::makeOwned(), clang::ento::ObjC, clang::ento::OS, setRefBinding(), and clang::CodeGen::state.
void RetainCountChecker::checkBind | ( | SVal | loc, |
SVal | val, | ||
const Stmt * | S, | ||
CheckerContext & | C | ||
) | const |
Definition at line 1137 of file RetainCountChecker.cpp.
References clang::ento::CheckerContext::addTransition(), clang::ento::SVal::getAsRegion(), clang::ento::CheckerContext::getState(), shouldEscapeRegion(), and clang::CodeGen::state.
void RetainCountChecker::checkDeadSymbols | ( | SymbolReaper & | SymReaper, |
CheckerContext & | C | ||
) | const |
Definition at line 1409 of file RetainCountChecker.cpp.
References clang::ento::CheckerContext::addTransition(), clang::ento::CheckerContext::getPredecessor(), clang::ento::retaincountchecker::getRefBinding(), clang::ento::CheckerContext::getState(), clang::ento::SymbolReaper::isDead(), clang::CodeGen::state, and V.
void RetainCountChecker::checkEndFunction | ( | const ReturnStmt * | RS, |
CheckerContext & | C | ||
) | const |
Definition at line 1367 of file RetainCountChecker.cpp.
References clang::ento::ExplodedNode::getLocationContext(), clang::ento::ExplodedNode::getState(), and clang::CodeGen::state.
void RetainCountChecker::checkPostCall | ( | const CallEvent & | Call, |
CheckerContext & | C | ||
) | const |
Definition at line 363 of file RetainCountChecker.cpp.
References clang::ento::SVal::getAsLocSymbol(), clang::ento::retaincountchecker::getRefBinding(), clang::ento::CheckerContext::getState(), getSummary(), and clang::ento::CheckerContext::wasInlined.
void RetainCountChecker::checkPostStmt | ( | const BlockExpr * | BE, |
CheckerContext & | C | ||
) | const |
Definition at line 146 of file RetainCountChecker.cpp.
References clang::ento::CheckerContext::addTransition(), clang::ento::SVal::getAsRegion(), clang::BlockExpr::getBlockDecl(), clang::ento::VarRegion::getDecl(), clang::ento::CheckerContext::getLocationContext(), clang::ento::SValBuilder::getRegionManager(), clang::ento::CheckerContext::getState(), clang::ento::SubRegion::getSuperRegion(), clang::ento::CheckerContext::getSVal(), clang::ento::CheckerContext::getSValBuilder(), clang::ento::MemRegionManager::getVarRegion(), clang::BlockDecl::hasCaptures(), and clang::CodeGen::state.
Referenced by checkPostStmt().
void RetainCountChecker::checkPostStmt | ( | const CastExpr * | CE, |
CheckerContext & | C | ||
) | const |
Definition at line 182 of file RetainCountChecker.cpp.
References clang::ento::CheckerContext::addTransition(), clang::ento::CF, clang::ento::DecRefBridgedTransferred, clang::ento::SVal::getAsLocSymbol(), clang::ObjCBridgedCastExpr::getBridgeKind(), clang::ento::retaincountchecker::getRefBinding(), clang::ento::CheckerContext::getState(), clang::ento::CheckerContext::getSVal(), clang::Expr::getType(), clang::ento::IncRef, clang::Type::isObjCObjectPointerType(), clang::OBC_Bridge, clang::OBC_BridgeRetained, clang::OBC_BridgeTransfer, clang::ento::ObjC, clang::CodeGen::state, and clang::ento::ArgEffect::withKind().
void RetainCountChecker::checkPostStmt | ( | const ObjCArrayLiteral * | AL, |
CheckerContext & | C | ||
) | const |
Definition at line 259 of file RetainCountChecker.cpp.
void RetainCountChecker::checkPostStmt | ( | const ObjCDictionaryLiteral * | DL, |
CheckerContext & | C | ||
) | const |
Definition at line 265 of file RetainCountChecker.cpp.
References clang::ento::CheckerContext::addTransition(), checkPostStmt(), clang::ento::SVal::getAsSymbol(), clang::ento::CheckerContext::getPredecessor(), clang::ento::ExplodedNode::getState(), clang::ento::ExplodedNode::getSVal(), clang::Expr::getType(), clang::ento::retaincountchecker::RefVal::makeNotOwned(), clang::ento::ObjC, setRefBinding(), and State.
void clang::ento::retaincountchecker::RetainCountChecker::checkPostStmt | ( | const ObjCBoxedExpr * | BE, |
CheckerContext & | C | ||
) | const |
void RetainCountChecker::checkPostStmt | ( | const ObjCIvarRefExpr * | IRE, |
CheckerContext & | C | ||
) | const |
Definition at line 285 of file RetainCountChecker.cpp.
References clang::ento::CheckerContext::addTransition(), clang::ento::CF, clang::ento::SVal::getAs(), clang::ento::SymExpr::getOriginRegion(), clang::ento::retaincountchecker::getRefBinding(), clang::ento::CheckerContext::getStackFrame(), clang::ento::CheckerContext::getState(), clang::ento::CheckerContext::getSVal(), clang::ento::SymExpr::getType(), clang::ento::coreFoundation::isCFObjectRef(), clang::ento::ConditionTruthVal::isConstrainedTrue(), clang::ento::ConstraintManager::isNull(), clang::Type::isObjCRetainableType(), clang::ento::retaincountchecker::isSynthesizedAccessor(), clang::ento::retaincountchecker::RefVal::makeNotOwned(), clang::ento::retaincountchecker::RefVal::None, clang::ento::ObjC, setRefBinding(), State, and clang::ento::retaincountchecker::RefVal::withIvarAccess().
ProgramStateRef RetainCountChecker::checkRegionChanges | ( | ProgramStateRef | state, |
const InvalidatedSymbols * | invalidated, | ||
ArrayRef< const MemRegion *> | ExplicitRegions, | ||
ArrayRef< const MemRegion *> | Regions, | ||
const LocationContext * | LCtx, | ||
const CallEvent * | Call | ||
) | const |
Definition at line 1183 of file RetainCountChecker.cpp.
References clang::ento::MemRegion::getAs(), removeRefBinding(), clang::CodeGen::state, and clang::ento::MemRegion::StripCasts().
ExplodedNode * RetainCountChecker::checkReturnWithRetEffect | ( | const ReturnStmt * | S, |
CheckerContext & | C, | ||
ExplodedNode * | Pred, | ||
RetEffect | RE, | ||
RefVal | X, | ||
SymbolRef | Sym, | ||
ProgramStateRef | state | ||
) | const |
Definition at line 1066 of file RetainCountChecker.cpp.
References clang::ento::retaincountchecker::RefVal::AccessedDirectly, clang::ento::CheckerContext::addTransition(), clang::ento::CheckerContext::emitReport(), clang::ento::retaincountchecker::RefVal::ErrorLeakReturned, clang::ento::retaincountchecker::RefVal::ErrorReturnedNotOwned, clang::ento::CheckerContext::getASTContext(), clang::ento::retaincountchecker::RefVal::getCount(), clang::ento::retaincountchecker::RefVal::getIvarAccessHistory(), clang::ento::RetEffect::getKind(), clang::ASTContext::getLangOpts(), clang::ento::RetEffect::isOwned(), clang::ento::retaincountchecker::RefVal::isReturnedNotOwned(), clang::ento::retaincountchecker::RefVal::isReturnedOwned(), clang::ento::retaincountchecker::RefVal::None, clang::ento::RetEffect::NoRet, clang::ento::retaincountchecker::RefVal::releaseViaIvar(), clang::ento::retaincountchecker::RefVal::ReturnedOwned, and setRefBinding().
void RetainCountChecker::checkSummary | ( | const RetainSummary & | Summ, |
const CallEvent & | Call, | ||
CheckerContext & | C | ||
) | const |
Definition at line 605 of file RetainCountChecker.cpp.
References clang::ento::CheckerContext::addTransition(), clang::ento::Dealloc, clang::ento::CallEvent::getArgSourceRange(), clang::ento::CallEvent::getArgSVal(), clang::ento::SVal::getAsLocSymbol(), clang::ento::SVal::getAsSymbol(), clang::ento::CheckerContext::getASTContext(), clang::ento::ArgEffect::getKind(), clang::ento::RetEffect::getKind(), clang::ento::CallEvent::getNumArgs(), clang::ento::CallEvent::getOriginExpr(), clang::ento::CheckerContext::getPredecessor(), clang::ento::retaincountchecker::getRefBinding(), clang::ento::CallEvent::getResultType(), GetReturnType(), clang::ento::CallEvent::getReturnValue(), clang::ento::CheckerContext::getState(), clang::ento::RetEffect::MakeNoRet(), clang::ento::RetEffect::notOwned(), clang::ento::OS, clang::ento::RetEffect::OwnedWhenTrackedReceiver, refValFromRetEffect(), setRefBinding(), shouldEscapeOSArgumentOnCall(), clang::CodeGen::state, clang::ento::StopTrackingHard, updateOutParameters(), and V.
const RefCountBug & RetainCountChecker::errorKindToBugKind | ( | RefVal::Kind | ErrorKind, |
SymbolRef | Sym | ||
) | const |
Definition at line 843 of file RetainCountChecker.cpp.
References clang::ento::retaincountchecker::RefVal::ErrorDeallocNotOwned, clang::ento::retaincountchecker::RefVal::ErrorReleaseNotOwned, clang::ento::retaincountchecker::RefVal::ErrorUseAfterRelease, clang::Type::getPointeeCXXRecordDecl(), and clang::ento::SymExpr::getType().
ProgramStateRef RetainCountChecker::evalAssume | ( | ProgramStateRef | state, |
SVal | Cond, | ||
bool | Assumption | ||
) | const |
Definition at line 1150 of file RetainCountChecker.cpp.
References clang::ento::ConditionTruthVal::isConstrainedTrue(), and clang::CodeGen::state.
bool RetainCountChecker::evalCall | ( | const CallEvent & | Call, |
CheckerContext & | C | ||
) | const |
Definition at line 889 of file RetainCountChecker.cpp.
References clang::ento::CheckerContext::addTransition(), clang::ento::CheckerContext::blockCount(), clang::ento::SValBuilder::conjureSymbolVal(), clang::ento::SVal::getAs(), clang::ento::CallEvent::getDecl(), clang::ento::CheckerContext::getLocationContext(), clang::ento::CallEvent::getOriginExpr(), clang::ento::CallEvent::getResultType(), clang::ento::CheckerContext::getState(), clang::ento::CheckerContext::getSValBuilder(), clang::QualType::isNull(), clang::ento::SVal::isUnknown(), clang::ento::SValBuilder::makeNull(), and clang::CodeGen::state.
|
inline |
Definition at line 367 of file RetainCountChecker.h.
References clang::ento::retaincountchecker::getRefBinding(), and State.
|
inline |
Definition at line 363 of file RetainCountChecker.h.
|
inline |
Definition at line 280 of file RetainCountChecker.h.
|
inline |
Definition at line 287 of file RetainCountChecker.h.
References clang::ento::CheckerContext::getASTContext(), and State.
ProgramStateRef RetainCountChecker::handleAutoreleaseCounts | ( | ProgramStateRef | state, |
ExplodedNode * | Pred, | ||
const ProgramPointTag * | Tag, | ||
CheckerContext & | Ctx, | ||
SymbolRef | Sym, | ||
RefVal | V, | ||
const ReturnStmt * | S = nullptr |
||
) | const |
Definition at line 1207 of file RetainCountChecker.cpp.
References clang::ento::retaincountchecker::RefVal::AccessedDirectly, clang::ento::retaincountchecker::RefVal::clearCounts(), clang::ento::CheckerContext::emitReport(), clang::ento::retaincountchecker::RefVal::ErrorOverAutorelease, clang::ento::CheckerContext::generateSink(), clang::ento::CheckerContext::getASTContext(), clang::ento::retaincountchecker::RefVal::getAutoreleaseCount(), clang::ento::retaincountchecker::RefVal::getCount(), clang::ento::retaincountchecker::RefVal::getIvarAccessHistory(), clang::ento::retaincountchecker::RefVal::getKind(), clang::ASTContext::getLangOpts(), clang::ento::retaincountchecker::RefVal::None, clang::ento::retaincountchecker::RefVal::NotOwned, clang::ento::retaincountchecker::RefVal::releaseViaIvar(), clang::ento::retaincountchecker::RefVal::ReturnedNotOwned, clang::ento::retaincountchecker::RefVal::ReturnedOwned, clang::ento::retaincountchecker::RefVal::setAutoreleaseCount(), clang::ento::retaincountchecker::RefVal::setCount(), setRefBinding(), and clang::CodeGen::state.
ProgramStateRef RetainCountChecker::handleSymbolDeath | ( | ProgramStateRef | state, |
SymbolRef | sid, | ||
RefVal | V, | ||
SmallVectorImpl< SymbolRef > & | Leaked | ||
) | const |
Definition at line 1285 of file RetainCountChecker.cpp.
References clang::ento::retaincountchecker::RefVal::ErrorLeak, clang::ento::retaincountchecker::RefVal::getCount(), clang::ento::retaincountchecker::RefVal::getIvarAccessHistory(), clang::ento::retaincountchecker::RefVal::isNotOwned(), clang::ento::retaincountchecker::RefVal::isOwned(), clang::ento::retaincountchecker::RefVal::isReturnedOwned(), clang::ento::retaincountchecker::RefVal::None, removeRefBinding(), and setRefBinding().
|
overridevirtual |
See CheckerManager::runCheckersForPrintState.
Reimplemented from clang::ento::CheckerBase.
Definition at line 1455 of file RetainCountChecker.cpp.
References clang::ento::CheckerManager::registerChecker().
ExplodedNode * RetainCountChecker::processLeaks | ( | ProgramStateRef | state, |
SmallVectorImpl< SymbolRef > & | Leaked, | ||
CheckerContext & | Ctx, | ||
ExplodedNode * | Pred = nullptr |
||
) | const |
Definition at line 1313 of file RetainCountChecker.cpp.
References clang::ento::CheckerContext::addTransition(), clang::ento::CheckerContext::emitReport(), clang::ento::CheckerContext::getASTContext(), and clang::ASTContext::getLangOpts().
void RetainCountChecker::processNonLeakError | ( | ProgramStateRef | St, |
SourceRange | ErrorRange, | ||
RefVal::Kind | ErrorKind, | ||
SymbolRef | Sym, | ||
CheckerContext & | C | ||
) | const |
Definition at line 859 of file RetainCountChecker.cpp.
References clang::ento::CheckerContext::emitReport(), clang::ento::CheckerContext::generateErrorNode(), clang::ento::CheckerContext::getASTContext(), clang::ASTContext::getLangOpts(), clang::ento::retaincountchecker::getRefBinding(), and clang::ento::retaincountchecker::RefVal::None.
void RetainCountChecker::processObjCLiterals | ( | CheckerContext & | C, |
const Expr * | Ex | ||
) | const |
Definition at line 229 of file RetainCountChecker.cpp.
References clang::ento::CheckerContext::addTransition(), clang::Stmt::children(), clang::ento::SVal::getAsSymbol(), clang::ento::ExplodedNode::getLocationContext(), clang::ento::CheckerContext::getPredecessor(), clang::ento::retaincountchecker::getRefBinding(), clang::ento::CheckerContext::getState(), clang::ento::ExplodedNode::getSVal(), clang::Expr::getType(), clang::ento::retaincountchecker::RefVal::makeNotOwned(), clang::ento::MayEscape, clang::ento::ObjC, setRefBinding(), clang::CodeGen::state, and V.
void RetainCountChecker::processSummaryOfInlined | ( | const RetainSummary & | Summ, |
const CallEvent & | Call, | ||
CheckerContext & | C | ||
) | const |
Definition at line 448 of file RetainCountChecker.cpp.
References clang::ento::CheckerContext::addTransition(), clang::ento::CallEvent::getArgSVal(), clang::ento::SVal::getAsLocSymbol(), clang::ento::SVal::getAsSymbol(), clang::ento::RetEffect::getKind(), clang::ento::CallEvent::getNumArgs(), clang::ento::retaincountchecker::getRefBinding(), clang::ento::CallEvent::getReturnValue(), clang::ento::CheckerContext::getState(), clang::ento::RetEffect::NoRetHard, removeRefBinding(), shouldEscapeOSArgumentOnCall(), clang::CodeGen::state, clang::ento::StopTrackingHard, and V.
ProgramStateRef RetainCountChecker::updateSymbol | ( | ProgramStateRef | state, |
SymbolRef | sym, | ||
RefVal | V, | ||
ArgEffect | E, | ||
RefVal::Kind & | hasErr, | ||
CheckerContext & | C | ||
) | const |
Definition at line 711 of file RetainCountChecker.cpp.
References clang::ento::retaincountchecker::RefVal::AccessedDirectly, clang::ento::Autorelease, clang::ento::retaincountchecker::RefVal::autorelease(), bool, clang::ento::retaincountchecker::RefVal::clearCounts(), clang::ento::Dealloc, clang::ento::DecRef, clang::ento::DecRefAndStopTrackingHard, clang::ento::DecRefBridgedTransferred, clang::ento::DoNothing, clang::ento::retaincountchecker::RefVal::ErrorDeallocNotOwned, clang::ento::retaincountchecker::RefVal::ErrorReleaseNotOwned, clang::ento::retaincountchecker::RefVal::ErrorUseAfterRelease, clang::ento::CheckerContext::getASTContext(), clang::ento::retaincountchecker::RefVal::getCount(), clang::ento::retaincountchecker::RefVal::getIvarAccessHistory(), clang::ento::retaincountchecker::RefVal::getKind(), clang::ento::ArgEffect::getKind(), clang::ASTContext::getLangOpts(), clang::ento::ArgEffect::getObjKind(), clang::ento::IncRef, clang::ento::MayEscape, clang::ento::retaincountchecker::RefVal::NotOwned, clang::ento::ObjC, clang::ento::retaincountchecker::RefVal::Owned, clang::ento::retaincountchecker::RefVal::Released, clang::ento::retaincountchecker::RefVal::releaseViaIvar(), removeRefBinding(), clang::ento::RetainedOutParameter, clang::ento::RetainedOutParameterOnNonZero, clang::ento::RetainedOutParameterOnZero, setRefBinding(), clang::CodeGen::state, clang::ento::StopTracking, clang::ento::StopTrackingHard, clang::ento::UnretainedOutParameter, and clang::ento::ArgEffect::withKind().
Track initial parameters (for the entry point) for NS/CF objects.
Definition at line 276 of file RetainCountChecker.h.
Track Objective-C and CoreFoundation objects.
Definition at line 270 of file RetainCountChecker.h.
Track sublcasses of OSObject.
Definition at line 273 of file RetainCountChecker.h.