class RetainCountChecker
Declaration
class RetainCountChecker : public Checker { /* full declaration omitted */ };
Declared at: clang/lib/StaticAnalyzer/Checkers/RetainCountChecker/RetainCountChecker.h:238
Inherits from: Checker
Member Variables
- public std::unique_ptr<RefCountBug> UseAfterRelease
- public std::unique_ptr<RefCountBug> ReleaseNotOwned
- public std::unique_ptr<RefCountBug> DeallocNotOwned
- public std::unique_ptr<RefCountBug> FreeNotOwned
- public std::unique_ptr<RefCountBug> OverAutorelease
- public std::unique_ptr<RefCountBug> ReturnNotOwnedForOwned
- public std::unique_ptr<RefCountBug> LeakWithinFunction
- public std::unique_ptr<RefCountBug> LeakAtReturn
- public std::unique_ptr<RetainSummaryManager> Summaries
- public bool TrackObjCAndCFObjects = false
- Track Objective-C and CoreFoundation objects.
- public bool TrackOSObjects = false
- Track sublcasses of OSObject.
- public bool TrackNSCFStartParam = false
- Track initial parameters (for the entry point) for NS/CF objects.
- public static std::unique_ptr<CheckerProgramPointTag> DeallocSentTag
- public static std::unique_ptr<CheckerProgramPointTag> CastFailTag
Method Overview
- public RetainCountChecker()
- public void checkBeginFunction(clang::ento::CheckerContext & C) const
- public void checkBind(clang::ento::SVal loc, clang::ento::SVal val, const clang::Stmt * S, clang::ento::CheckerContext & C) const
- public void checkDeadSymbols(clang::ento::SymbolReaper & SymReaper, clang::ento::CheckerContext & C) const
- public void checkEndFunction(const clang::ReturnStmt * RS, clang::ento::CheckerContext & C) const
- public void checkPostCall(const clang::ento::CallEvent & Call, clang::ento::CheckerContext & C) const
- public void checkPostStmt(const clang::BlockExpr * BE, clang::ento::CheckerContext & C) const
- public void checkPostStmt(const clang::CastExpr * CE, clang::ento::CheckerContext & C) const
- public void checkPostStmt(const clang::ObjCArrayLiteral * AL, clang::ento::CheckerContext & C) const
- public void checkPostStmt(const clang::ObjCDictionaryLiteral * DL, clang::ento::CheckerContext & C) const
- public void checkPostStmt(const clang::ObjCBoxedExpr * BE, clang::ento::CheckerContext & C) const
- public void checkPostStmt(const clang::ObjCIvarRefExpr * IRE, clang::ento::CheckerContext & C) const
- public clang::ento::ProgramStateRef checkRegionChanges(clang::ento::ProgramStateRef state, const clang::ento::InvalidatedSymbols * invalidated, ArrayRef<const clang::ento::MemRegion *> ExplicitRegions, ArrayRef<const clang::ento::MemRegion *> Regions, const clang::LocationContext * LCtx, const clang::ento::CallEvent * Call) const
- public clang::ento::ExplodedNode * checkReturnWithRetEffect(const clang::ReturnStmt * S, clang::ento::CheckerContext & C, clang::ento::ExplodedNode * Pred, clang::ento::RetEffect RE, clang::ento::retaincountchecker::RefVal X, clang::ento::SymbolRef Sym, clang::ento::ProgramStateRef state) const
- public void checkSummary(const clang::ento::RetainSummary & Summ, const clang::ento::CallEvent & Call, clang::ento::CheckerContext & C) const
- public const clang::ento::retaincountchecker::RefCountBug & errorKindToBugKind(RefVal::Kind ErrorKind, clang::ento::SymbolRef Sym) const
- public clang::ento::ProgramStateRef evalAssume(clang::ento::ProgramStateRef state, clang::ento::SVal Cond, bool Assumption) const
- public bool evalCall(const clang::ento::CallEvent & Call, clang::ento::CheckerContext & C) const
- public static const clang::ento::CheckerProgramPointTag & getCastFailTag()
- public static const clang::ento::CheckerProgramPointTag & getDeallocSentTag()
- public clang::ento::RetainSummaryManager & getSummaryManager(clang::ASTContext & Ctx) const
- public clang::ento::RetainSummaryManager & getSummaryManager(clang::ento::CheckerContext & C) const
- public clang::ento::ProgramStateRef handleAutoreleaseCounts(clang::ento::ProgramStateRef state, clang::ento::ExplodedNode * Pred, const clang::ProgramPointTag * Tag, clang::ento::CheckerContext & Ctx, clang::ento::SymbolRef Sym, clang::ento::retaincountchecker::RefVal V, const clang::ReturnStmt * S = nullptr) const
- public clang::ento::ProgramStateRef handleSymbolDeath(clang::ento::ProgramStateRef state, clang::ento::SymbolRef sid, clang::ento::retaincountchecker::RefVal V, SmallVectorImpl<clang::ento::SymbolRef> & Leaked) const
- public void printState(llvm::raw_ostream & Out, clang::ento::ProgramStateRef State, const char * NL, const char * Sep) const
- public clang::ento::ExplodedNode * processLeaks(clang::ento::ProgramStateRef state, SmallVectorImpl<clang::ento::SymbolRef> & Leaked, clang::ento::CheckerContext & Ctx, clang::ento::ExplodedNode * Pred = nullptr) const
- public void processNonLeakError(clang::ento::ProgramStateRef St, clang::SourceRange ErrorRange, RefVal::Kind ErrorKind, clang::ento::SymbolRef Sym, clang::ento::CheckerContext & C) const
- public void processObjCLiterals(clang::ento::CheckerContext & C, const clang::Expr * Ex) const
- private clang::ento::ExplodedNode * processReturn(const clang::ReturnStmt * S, clang::ento::CheckerContext & C) const
- public void processSummaryOfInlined(const clang::ento::RetainSummary & Summ, const clang::ento::CallEvent & Call, clang::ento::CheckerContext & C) const
- public clang::ento::ProgramStateRef updateSymbol(clang::ento::ProgramStateRef state, clang::ento::SymbolRef sym, clang::ento::retaincountchecker::RefVal V, clang::ento::ArgEffect E, RefVal::Kind & hasErr, clang::ento::CheckerContext & C) const
Methods
¶RetainCountChecker()
RetainCountChecker()
Declared at: clang/lib/StaticAnalyzer/Checkers/RetainCountChecker/RetainCountChecker.h:278
¶void checkBeginFunction(
clang::ento::CheckerContext& C) const
void checkBeginFunction(
clang::ento::CheckerContext& C) const
Declared at: clang/lib/StaticAnalyzer/Checkers/RetainCountChecker/RetainCountChecker.h:331
Parameters
¶void checkBind(
clang::ento::SVal loc,
clang::ento::SVal val,
const clang::Stmt* S,
clang::ento::CheckerContext& C) const
void checkBind(
clang::ento::SVal loc,
clang::ento::SVal val,
const clang::Stmt* S,
clang::ento::CheckerContext& C) const
Declared at: clang/lib/StaticAnalyzer/Checkers/RetainCountChecker/RetainCountChecker.h:294
Parameters
- clang::ento::SVal loc
- clang::ento::SVal val
- const clang::Stmt* S
- clang::ento::CheckerContext& C
¶void checkDeadSymbols(
clang::ento::SymbolReaper& SymReaper,
clang::ento::CheckerContext& C) const
void checkDeadSymbols(
clang::ento::SymbolReaper& SymReaper,
clang::ento::CheckerContext& C) const
Declared at: clang/lib/StaticAnalyzer/Checkers/RetainCountChecker/RetainCountChecker.h:330
Parameters
- clang::ento::SymbolReaper& SymReaper
- clang::ento::CheckerContext& C
¶void checkEndFunction(
const clang::ReturnStmt* RS,
clang::ento::CheckerContext& C) const
void checkEndFunction(
const clang::ReturnStmt* RS,
clang::ento::CheckerContext& C) const
Declared at: clang/lib/StaticAnalyzer/Checkers/RetainCountChecker/RetainCountChecker.h:332
Parameters
- const clang::ReturnStmt* RS
- clang::ento::CheckerContext& C
¶void checkPostCall(
const clang::ento::CallEvent& Call,
clang::ento::CheckerContext& C) const
void checkPostCall(
const clang::ento::CallEvent& Call,
clang::ento::CheckerContext& C) const
Declared at: clang/lib/StaticAnalyzer/Checkers/RetainCountChecker/RetainCountChecker.h:304
Parameters
- const clang::ento::CallEvent& Call
- clang::ento::CheckerContext& C
¶void checkPostStmt(
const clang::BlockExpr* BE,
clang::ento::CheckerContext& C) const
void checkPostStmt(
const clang::BlockExpr* BE,
clang::ento::CheckerContext& C) const
Declared at: clang/lib/StaticAnalyzer/Checkers/RetainCountChecker/RetainCountChecker.h:295
Parameters
- const clang::BlockExpr* BE
- clang::ento::CheckerContext& C
¶void checkPostStmt(
const clang::CastExpr* CE,
clang::ento::CheckerContext& C) const
void checkPostStmt(
const clang::CastExpr* CE,
clang::ento::CheckerContext& C) const
Declared at: clang/lib/StaticAnalyzer/Checkers/RetainCountChecker/RetainCountChecker.h:296
Parameters
- const clang::CastExpr* CE
- clang::ento::CheckerContext& C
¶void checkPostStmt(
const clang::ObjCArrayLiteral* AL,
clang::ento::CheckerContext& C) const
void checkPostStmt(
const clang::ObjCArrayLiteral* AL,
clang::ento::CheckerContext& C) const
Declared at: clang/lib/StaticAnalyzer/Checkers/RetainCountChecker/RetainCountChecker.h:298
Parameters
- const clang::ObjCArrayLiteral* AL
- clang::ento::CheckerContext& C
¶void checkPostStmt(
const clang::ObjCDictionaryLiteral* DL,
clang::ento::CheckerContext& C) const
void checkPostStmt(
const clang::ObjCDictionaryLiteral* DL,
clang::ento::CheckerContext& C) const
Declared at: clang/lib/StaticAnalyzer/Checkers/RetainCountChecker/RetainCountChecker.h:299
Parameters
¶void checkPostStmt(
const clang::ObjCBoxedExpr* BE,
clang::ento::CheckerContext& C) const
void checkPostStmt(
const clang::ObjCBoxedExpr* BE,
clang::ento::CheckerContext& C) const
Declared at: clang/lib/StaticAnalyzer/Checkers/RetainCountChecker/RetainCountChecker.h:300
Parameters
- const clang::ObjCBoxedExpr* BE
- clang::ento::CheckerContext& C
¶void checkPostStmt(
const clang::ObjCIvarRefExpr* IRE,
clang::ento::CheckerContext& C) const
void checkPostStmt(
const clang::ObjCIvarRefExpr* IRE,
clang::ento::CheckerContext& C) const
Declared at: clang/lib/StaticAnalyzer/Checkers/RetainCountChecker/RetainCountChecker.h:302
Parameters
- const clang::ObjCIvarRefExpr* IRE
- clang::ento::CheckerContext& C
¶clang::ento::ProgramStateRef checkRegionChanges(
clang::ento::ProgramStateRef state,
const clang::ento::InvalidatedSymbols*
invalidated,
ArrayRef<const clang::ento::MemRegion*>
ExplicitRegions,
ArrayRef<const clang::ento::MemRegion*>
Regions,
const clang::LocationContext* LCtx,
const clang::ento::CallEvent* Call) const
clang::ento::ProgramStateRef checkRegionChanges(
clang::ento::ProgramStateRef state,
const clang::ento::InvalidatedSymbols*
invalidated,
ArrayRef<const clang::ento::MemRegion*>
ExplicitRegions,
ArrayRef<const clang::ento::MemRegion*>
Regions,
const clang::LocationContext* LCtx,
const clang::ento::CallEvent* Call) const
Declared at: clang/lib/StaticAnalyzer/Checkers/RetainCountChecker/RetainCountChecker.h:319
Parameters
- clang::ento::ProgramStateRef state
- const clang::ento::InvalidatedSymbols* invalidated
- ArrayRef<const clang::ento::MemRegion*> ExplicitRegions
- ArrayRef<const clang::ento::MemRegion*> Regions
- const clang::LocationContext* LCtx
- const clang::ento::CallEvent* Call
¶clang::ento::ExplodedNode*
checkReturnWithRetEffect(
const clang::ReturnStmt* S,
clang::ento::CheckerContext& C,
clang::ento::ExplodedNode* Pred,
clang::ento::RetEffect RE,
clang::ento::retaincountchecker::RefVal X,
clang::ento::SymbolRef Sym,
clang::ento::ProgramStateRef state) const
clang::ento::ExplodedNode*
checkReturnWithRetEffect(
const clang::ReturnStmt* S,
clang::ento::CheckerContext& C,
clang::ento::ExplodedNode* Pred,
clang::ento::RetEffect RE,
clang::ento::retaincountchecker::RefVal X,
clang::ento::SymbolRef Sym,
clang::ento::ProgramStateRef state) const
Declared at: clang/lib/StaticAnalyzer/Checkers/RetainCountChecker/RetainCountChecker.h:326
Parameters
- const clang::ReturnStmt* S
- clang::ento::CheckerContext& C
- clang::ento::ExplodedNode* Pred
- clang::ento::RetEffect RE
- clang::ento::retaincountchecker::RefVal X
- clang::ento::SymbolRef Sym
- clang::ento::ProgramStateRef state
¶void checkSummary(
const clang::ento::RetainSummary& Summ,
const clang::ento::CallEvent& Call,
clang::ento::CheckerContext& C) const
void checkSummary(
const clang::ento::RetainSummary& Summ,
const clang::ento::CallEvent& Call,
clang::ento::CheckerContext& C) const
Declared at: clang/lib/StaticAnalyzer/Checkers/RetainCountChecker/RetainCountChecker.h:306
Parameters
- const clang::ento::RetainSummary& Summ
- const clang::ento::CallEvent& Call
- clang::ento::CheckerContext& C
¶const clang::ento::retaincountchecker::
RefCountBug&
errorKindToBugKind(
RefVal::Kind ErrorKind,
clang::ento::SymbolRef Sym) const
const clang::ento::retaincountchecker::
RefCountBug&
errorKindToBugKind(
RefVal::Kind ErrorKind,
clang::ento::SymbolRef Sym) const
Declared at: clang/lib/StaticAnalyzer/Checkers/RetainCountChecker/RetainCountChecker.h:338
Parameters
- RefVal::Kind ErrorKind
- clang::ento::SymbolRef Sym
¶clang::ento::ProgramStateRef evalAssume(
clang::ento::ProgramStateRef state,
clang::ento::SVal Cond,
bool Assumption) const
clang::ento::ProgramStateRef evalAssume(
clang::ento::ProgramStateRef state,
clang::ento::SVal Cond,
bool Assumption) const
Declared at: clang/lib/StaticAnalyzer/Checkers/RetainCountChecker/RetainCountChecker.h:315
Parameters
- clang::ento::ProgramStateRef state
- clang::ento::SVal Cond
- bool Assumption
¶bool evalCall(
const clang::ento::CallEvent& Call,
clang::ento::CheckerContext& C) const
bool evalCall(
const clang::ento::CallEvent& Call,
clang::ento::CheckerContext& C) const
Declared at: clang/lib/StaticAnalyzer/Checkers/RetainCountChecker/RetainCountChecker.h:313
Parameters
- const clang::ento::CallEvent& Call
- clang::ento::CheckerContext& C
¶static const clang::ento::CheckerProgramPointTag&
getCastFailTag()
static const clang::ento::CheckerProgramPointTag&
getCastFailTag()
Declared at: clang/lib/StaticAnalyzer/Checkers/RetainCountChecker/RetainCountChecker.h:367
¶static const clang::ento::CheckerProgramPointTag&
getDeallocSentTag()
static const clang::ento::CheckerProgramPointTag&
getDeallocSentTag()
Declared at: clang/lib/StaticAnalyzer/Checkers/RetainCountChecker/RetainCountChecker.h:363
¶clang::ento::RetainSummaryManager&
getSummaryManager(clang::ASTContext& Ctx) const
clang::ento::RetainSummaryManager&
getSummaryManager(clang::ASTContext& Ctx) const
Declared at: clang/lib/StaticAnalyzer/Checkers/RetainCountChecker/RetainCountChecker.h:280
Parameters
- clang::ASTContext& Ctx
¶clang::ento::RetainSummaryManager&
getSummaryManager(
clang::ento::CheckerContext& C) const
clang::ento::RetainSummaryManager&
getSummaryManager(
clang::ento::CheckerContext& C) const
Declared at: clang/lib/StaticAnalyzer/Checkers/RetainCountChecker/RetainCountChecker.h:287
Parameters
¶clang::ento::ProgramStateRef
handleAutoreleaseCounts(
clang::ento::ProgramStateRef state,
clang::ento::ExplodedNode* Pred,
const clang::ProgramPointTag* Tag,
clang::ento::CheckerContext& Ctx,
clang::ento::SymbolRef Sym,
clang::ento::retaincountchecker::RefVal V,
const clang::ReturnStmt* S = nullptr) const
clang::ento::ProgramStateRef
handleAutoreleaseCounts(
clang::ento::ProgramStateRef state,
clang::ento::ExplodedNode* Pred,
const clang::ProgramPointTag* Tag,
clang::ento::CheckerContext& Ctx,
clang::ento::SymbolRef Sym,
clang::ento::retaincountchecker::RefVal V,
const clang::ReturnStmt* S = nullptr) const
Declared at: clang/lib/StaticAnalyzer/Checkers/RetainCountChecker/RetainCountChecker.h:352
Parameters
- clang::ento::ProgramStateRef state
- clang::ento::ExplodedNode* Pred
- const clang::ProgramPointTag* Tag
- clang::ento::CheckerContext& Ctx
- clang::ento::SymbolRef Sym
- clang::ento::retaincountchecker::RefVal V
- const clang::ReturnStmt* S = nullptr
¶clang::ento::ProgramStateRef handleSymbolDeath(
clang::ento::ProgramStateRef state,
clang::ento::SymbolRef sid,
clang::ento::retaincountchecker::RefVal V,
SmallVectorImpl<clang::ento::SymbolRef>&
Leaked) const
clang::ento::ProgramStateRef handleSymbolDeath(
clang::ento::ProgramStateRef state,
clang::ento::SymbolRef sid,
clang::ento::retaincountchecker::RefVal V,
SmallVectorImpl<clang::ento::SymbolRef>&
Leaked) const
Declared at: clang/lib/StaticAnalyzer/Checkers/RetainCountChecker/RetainCountChecker.h:347
Parameters
- clang::ento::ProgramStateRef state
- clang::ento::SymbolRef sid
- clang::ento::retaincountchecker::RefVal V
- SmallVectorImpl<clang::ento::SymbolRef>& Leaked
¶void printState(
llvm::raw_ostream& Out,
clang::ento::ProgramStateRef State,
const char* NL,
const char* Sep) const
void printState(
llvm::raw_ostream& Out,
clang::ento::ProgramStateRef State,
const char* NL,
const char* Sep) const
Description
See CheckerManager::runCheckersForPrintState.
Declared at: clang/lib/StaticAnalyzer/Checkers/RetainCountChecker/RetainCountChecker.h:291
Parameters
- llvm::raw_ostream& Out
- clang::ento::ProgramStateRef State
- const char* NL
- const char* Sep
¶clang::ento::ExplodedNode* processLeaks(
clang::ento::ProgramStateRef state,
SmallVectorImpl<clang::ento::SymbolRef>&
Leaked,
clang::ento::CheckerContext& Ctx,
clang::ento::ExplodedNode* Pred =
nullptr) const
clang::ento::ExplodedNode* processLeaks(
clang::ento::ProgramStateRef state,
SmallVectorImpl<clang::ento::SymbolRef>&
Leaked,
clang::ento::CheckerContext& Ctx,
clang::ento::ExplodedNode* Pred =
nullptr) const
Declared at: clang/lib/StaticAnalyzer/Checkers/RetainCountChecker/RetainCountChecker.h:358
Parameters
- clang::ento::ProgramStateRef state
- SmallVectorImpl<clang::ento::SymbolRef>& Leaked
- clang::ento::CheckerContext& Ctx
- clang::ento::ExplodedNode* Pred = nullptr
¶void processNonLeakError(
clang::ento::ProgramStateRef St,
clang::SourceRange ErrorRange,
RefVal::Kind ErrorKind,
clang::ento::SymbolRef Sym,
clang::ento::CheckerContext& C) const
void processNonLeakError(
clang::ento::ProgramStateRef St,
clang::SourceRange ErrorRange,
RefVal::Kind ErrorKind,
clang::ento::SymbolRef Sym,
clang::ento::CheckerContext& C) const
Declared at: clang/lib/StaticAnalyzer/Checkers/RetainCountChecker/RetainCountChecker.h:341
Parameters
- clang::ento::ProgramStateRef St
- clang::SourceRange ErrorRange
- RefVal::Kind ErrorKind
- clang::ento::SymbolRef Sym
- clang::ento::CheckerContext& C
¶void processObjCLiterals(
clang::ento::CheckerContext& C,
const clang::Expr* Ex) const
void processObjCLiterals(
clang::ento::CheckerContext& C,
const clang::Expr* Ex) const
Declared at: clang/lib/StaticAnalyzer/Checkers/RetainCountChecker/RetainCountChecker.h:345
Parameters
- clang::ento::CheckerContext& C
- const clang::Expr* Ex
¶clang::ento::ExplodedNode* processReturn(
const clang::ReturnStmt* S,
clang::ento::CheckerContext& C) const
clang::ento::ExplodedNode* processReturn(
const clang::ReturnStmt* S,
clang::ento::CheckerContext& C) const
Description
Perform the necessary checks and state adjustments at the end of the function.\p S Return statement, may be null.
Declared at: clang/lib/StaticAnalyzer/Checkers/RetainCountChecker/RetainCountChecker.h:373
Parameters
- const clang::ReturnStmt* S
- clang::ento::CheckerContext& C
¶void processSummaryOfInlined(
const clang::ento::RetainSummary& Summ,
const clang::ento::CallEvent& Call,
clang::ento::CheckerContext& C) const
void processSummaryOfInlined(
const clang::ento::RetainSummary& Summ,
const clang::ento::CallEvent& Call,
clang::ento::CheckerContext& C) const
Declared at: clang/lib/StaticAnalyzer/Checkers/RetainCountChecker/RetainCountChecker.h:309
Parameters
- const clang::ento::RetainSummary& Summ
- const clang::ento::CallEvent& Call
- clang::ento::CheckerContext& C
¶clang::ento::ProgramStateRef updateSymbol(
clang::ento::ProgramStateRef state,
clang::ento::SymbolRef sym,
clang::ento::retaincountchecker::RefVal V,
clang::ento::ArgEffect E,
RefVal::Kind& hasErr,
clang::ento::CheckerContext& C) const
clang::ento::ProgramStateRef updateSymbol(
clang::ento::ProgramStateRef state,
clang::ento::SymbolRef sym,
clang::ento::retaincountchecker::RefVal V,
clang::ento::ArgEffect E,
RefVal::Kind& hasErr,
clang::ento::CheckerContext& C) const
Declared at: clang/lib/StaticAnalyzer/Checkers/RetainCountChecker/RetainCountChecker.h:334
Parameters
- clang::ento::ProgramStateRef state
- clang::ento::SymbolRef sym
- clang::ento::retaincountchecker::RefVal V
- clang::ento::ArgEffect E
- RefVal::Kind& hasErr
- clang::ento::CheckerContext& C