clang
8.0.0
|
Public Attributes | |
bool | TrackObjCAndCFObjects = false |
Track Objective-C and CoreFoundation objects. More... | |
bool | TrackOSObjects = false |
Track sublcasses of OSObject. More... | |
Static Public Attributes | |
static constexpr const char * | DeallocTagDescription = "DeallocSent" |
Additional Inherited Members | |
![]() | |
static void | _register (CHECKER *checker, CheckerManager &mgr) |
![]() | |
template<typename CHECKER > | |
static void | _register (CHECKER *checker, CheckerManager &mgr) |
![]() | |
const void * | getTagKind () |
Used to implement 'isKind' in subclasses. More... | |
Definition at line 239 of file RetainCountChecker.h.
|
inline |
Definition at line 269 of file RetainCountChecker.h.
void RetainCountChecker::checkBeginFunction | ( | CheckerContext & | C | ) | const |
Definition at line 1381 of file RetainCountChecker.cpp.
References clang::ento::CheckerContext::addTransition(), clang::ento::DecRef, clang::ento::Generalized, clang::LocationContext::getDecl(), clang::ento::ArgEffect::getKind(), clang::ento::CheckerContext::getLocationContext(), clang::FunctionDecl::getNumParams(), clang::FunctionDecl::getParamDecl(), clang::ento::CheckerContext::getState(), clang::ValueDecl::getType(), clang::ento::CheckerContext::inTopFrame(), isISLObjectRef(), clang::ento::retaincountchecker::RefVal::makeNotOwned(), clang::ento::retaincountchecker::RefVal::makeOwned(), clang::ento::retaincountchecker::setRefBinding(), and clang::CodeGen::state.
void RetainCountChecker::checkBind | ( | SVal | loc, |
SVal | val, | ||
const Stmt * | S, | ||
CheckerContext & | C | ||
) | const |
Definition at line 1146 of file RetainCountChecker.cpp.
References clang::ento::CheckerContext::addTransition(), clang::ento::SVal::getAs(), clang::ento::SVal::getAsRegion(), clang::ento::CheckerContext::getState(), clang::Decl::hasAttr(), shouldEscapeRegion(), and clang::CodeGen::state.
void RetainCountChecker::checkDeadSymbols | ( | SymbolReaper & | SymReaper, |
CheckerContext & | C | ||
) | const |
Definition at line 1457 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(), and clang::CodeGen::state.
void RetainCountChecker::checkEndFunction | ( | const ReturnStmt * | RS, |
CheckerContext & | C | ||
) | const |
Definition at line 1415 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 393 of file RetainCountChecker.cpp.
References clang::ento::SVal::getAsLocSymbol(), clang::ento::retaincountchecker::getRefBinding(), clang::ento::CheckerContext::getState(), and clang::ento::CheckerContext::wasInlined.
void RetainCountChecker::checkPostStmt | ( | const BlockExpr * | BE, |
CheckerContext & | C | ||
) | const |
Definition at line 209 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 245 of file RetainCountChecker.cpp.
References clang::ento::CheckerContext::addTransition(), clang::ento::DecRefBridgedTransferred, clang::ento::SVal::getAsLocSymbol(), clang::ObjCBridgedCastExpr::getBridgeKind(), clang::ento::retaincountchecker::getRefBinding(), clang::ento::CheckerContext::getState(), clang::ento::CheckerContext::getSVal(), clang::ento::IncRef, 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 314 of file RetainCountChecker.cpp.
void RetainCountChecker::checkPostStmt | ( | const ObjCDictionaryLiteral * | DL, |
CheckerContext & | C | ||
) | const |
Definition at line 320 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, clang::ento::retaincountchecker::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 340 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, clang::ento::retaincountchecker::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 1217 of file RetainCountChecker.cpp.
References clang::ento::MemRegion::getAs(), clang::ento::retaincountchecker::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 1072 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 clang::ento::retaincountchecker::setRefBinding().
void RetainCountChecker::checkSummary | ( | const RetainSummary & | Summ, |
const CallEvent & | Call, | ||
CheckerContext & | C | ||
) | const |
Definition at line 620 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(), clang::ento::retaincountchecker::setRefBinding(), shouldEscapeOSArgumentOnCall(), clang::CodeGen::state, clang::ento::StopTrackingHard, and updateOutParameters().
ProgramStateRef RetainCountChecker::evalAssume | ( | ProgramStateRef | state, |
SVal | Cond, | ||
bool | Assumption | ||
) | const |
Definition at line 1183 of file RetainCountChecker.cpp.
References clang::ento::ConditionTruthVal::isConstrainedTrue(), clang::ento::ConstraintManager::isNull(), and clang::CodeGen::state.
bool RetainCountChecker::evalCall | ( | const CallExpr * | CE, |
CheckerContext & | C | ||
) | const |
Definition at line 909 of file RetainCountChecker.cpp.
References clang::ento::CheckerContext::addTransition(), clang::ento::CheckerContext::blockCount(), clang::ento::SValBuilder::conjureSymbolVal(), clang::CallExpr::getArg(), clang::ento::SVal::getAs(), clang::ento::CheckerContext::getASTContext(), clang::ento::CheckerContext::getCalleeDecl(), clang::CallExpr::getCallReturnType(), clang::ento::CheckerContext::getLocationContext(), clang::ento::CheckerContext::getState(), clang::ento::CheckerContext::getSValBuilder(), clang::QualType::isNull(), clang::ento::SVal::isUnknown(), clang::ento::SValBuilder::makeNull(), and clang::CodeGen::state.
RefCountBug * RetainCountChecker::getLeakAtReturnBug | ( | const LangOptions & | LOpts | ) | const |
Definition at line 425 of file RetainCountChecker.cpp.
RefCountBug * RetainCountChecker::getLeakWithinFunctionBug | ( | const LangOptions & | LOpts | ) | const |
Definition at line 418 of file RetainCountChecker.cpp.
|
inline |
Definition at line 275 of file RetainCountChecker.h.
References bool, and clang::ASTContext::getLangOpts().
|
inline |
Definition at line 288 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 1244 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(), clang::ento::retaincountchecker::setRefBinding(), and clang::CodeGen::state.
ProgramStateRef RetainCountChecker::handleSymbolDeath | ( | ProgramStateRef | state, |
SymbolRef | sid, | ||
RefVal | V, | ||
SmallVectorImpl< SymbolRef > & | Leaked | ||
) | const |
Definition at line 1325 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, clang::ento::retaincountchecker::removeRefBinding(), and clang::ento::retaincountchecker::setRefBinding().
|
overridevirtual |
See CheckerManager::runCheckersForPrintState.
Reimplemented from clang::ento::CheckerBase.
Definition at line 1506 of file RetainCountChecker.cpp.
References clang::ento::CheckerManager::registerChecker(), and TrackObjCAndCFObjects.
ExplodedNode * RetainCountChecker::processLeaks | ( | ProgramStateRef | state, |
SmallVectorImpl< SymbolRef > & | Leaked, | ||
CheckerContext & | Ctx, | ||
ExplodedNode * | Pred = nullptr |
||
) | const |
Definition at line 1353 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 858 of file RetainCountChecker.cpp.
References clang::ento::CheckerContext::emitReport(), clang::ento::retaincountchecker::RefVal::ErrorDeallocNotOwned, clang::ento::retaincountchecker::RefVal::ErrorReleaseNotOwned, clang::ento::retaincountchecker::RefVal::ErrorUseAfterRelease, 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 284 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, clang::ento::retaincountchecker::setRefBinding(), and clang::CodeGen::state.
void RetainCountChecker::processSummaryOfInlined | ( | const RetainSummary & | Summ, |
const CallEvent & | Call, | ||
CheckerContext & | C | ||
) | const |
Definition at line 492 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, clang::ento::retaincountchecker::removeRefBinding(), shouldEscapeOSArgumentOnCall(), clang::CodeGen::state, and clang::ento::StopTrackingHard.
ProgramStateRef RetainCountChecker::updateSymbol | ( | ProgramStateRef | state, |
SymbolRef | sym, | ||
RefVal | V, | ||
ArgEffect | E, | ||
RefVal::Kind & | hasErr, | ||
CheckerContext & | C | ||
) | const |
Definition at line 727 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(), clang::ento::retaincountchecker::removeRefBinding(), clang::ento::RetainedOutParameter, clang::ento::RetainedOutParameterOnNonZero, clang::ento::RetainedOutParameterOnZero, clang::ento::retaincountchecker::setRefBinding(), clang::CodeGen::state, clang::ento::StopTracking, clang::ento::StopTrackingHard, clang::ento::UnretainedOutParameter, and clang::ento::ArgEffect::withKind().
|
static |
Definition at line 261 of file RetainCountChecker.h.
Track Objective-C and CoreFoundation objects.
Definition at line 264 of file RetainCountChecker.h.
Referenced by printState().
Track sublcasses of OSObject.
Definition at line 267 of file RetainCountChecker.h.