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()

Declared at: clang/lib/StaticAnalyzer/Checkers/RetainCountChecker/RetainCountChecker.h:278

void checkBeginFunction(
    clang::ento::CheckerContext& C) const

Declared at: clang/lib/StaticAnalyzer/Checkers/RetainCountChecker/RetainCountChecker.h:331

Parameters

clang::ento::CheckerContext& C

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

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

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

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

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

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

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

Declared at: clang/lib/StaticAnalyzer/Checkers/RetainCountChecker/RetainCountChecker.h:299

Parameters

const clang::ObjCDictionaryLiteral* DL
clang::ento::CheckerContext& C

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

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

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

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

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

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

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

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()

Declared at: clang/lib/StaticAnalyzer/Checkers/RetainCountChecker/RetainCountChecker.h:367

static const clang::ento::CheckerProgramPointTag&
getDeallocSentTag()

Declared at: clang/lib/StaticAnalyzer/Checkers/RetainCountChecker/RetainCountChecker.h:363

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

Declared at: clang/lib/StaticAnalyzer/Checkers/RetainCountChecker/RetainCountChecker.h:287

Parameters

clang::ento::CheckerContext& C

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

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

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

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

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

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

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

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

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