class RetainSummaryManager

Declaration

class RetainSummaryManager { /* full declaration omitted */ };

Declared at: clang/include/clang/Analysis/RetainSummaryManager.h:449

Member Variables

private clang::ASTContext& Ctx
Ctx - The ASTContext object for the analyzed ASTs.
private const bool ARCEnabled
Records whether or not the analyzed code runs in ARC mode.
private const bool TrackObjCAndCFObjects
Track Objective-C and CoreFoundation objects.
private const bool TrackOSObjects
Track sublcasses of OSObject.
private clang::ento::RetainSummaryManager::FuncSummariesTy FuncSummaries
FuncSummaries - A map from FunctionDecls to summaries.
private clang::ento::RetainSummaryManager:: ObjCMethodSummariesTy ObjCClassMethodSummaries
ObjCClassMethodSummaries - A map from selectors (for instance methods) to summaries.
private clang::ento::RetainSummaryManager:: ObjCMethodSummariesTy ObjCMethodSummaries
ObjCMethodSummaries - A map from selectors to summaries.
private llvm::BumpPtrAllocator BPAlloc
BPAlloc - A BumpPtrAllocator used for allocating summaries, ArgEffects, and all other data used by the checker.
private ArgEffects::Factory AF
AF - A factory for ArgEffects objects.
private clang::ento::RetEffect ObjCAllocRetE
ObjCAllocRetE - Default return effect for methods returning Objective-C objects.
private clang::ento::RetEffect ObjCInitRetE
ObjCInitRetE - Default return effect for init methods returning Objective-C objects.
private llvm::FoldingSet<CachedSummaryNode> SimpleSummaries
SimpleSummaries - Used for uniquing summaries that don't have special effects.

Method Overview

  • private void InitializeClassMethodSummaries()
  • private void InitializeMethodSummaries()
  • public RetainSummaryManager(clang::ASTContext & ctx, bool trackObjCAndCFObjects, bool trackOSObjects)
  • private void addClassMethSummary(const char * Cls, const char * name, const clang::ento::RetainSummary * Summ, bool isNullary = true)
  • private template <typename... Keywords>void addClsMethSummary(clang::IdentifierInfo * II, const clang::ento::RetainSummary * Summ, Keywords *... Kws)
  • private template <typename... Keywords>void addClsMethSummary(const char * Cls, const clang::ento::RetainSummary * Summ, Keywords *... Kws)
  • private void addInstMethSummary(const char * Cls, const char * nullaryName, const clang::ento::RetainSummary * Summ)
  • private template <typename... Keywords>void addInstMethSummary(const char * Cls, const clang::ento::RetainSummary * Summ, Keywords *... Kws)
  • private template <typename... Keywords>void addMethodSummary(clang::IdentifierInfo * ClsII, clang::ento::RetainSummaryManager::ObjCMethodSummariesTy & Summaries, const clang::ento::RetainSummary * Summ, Keywords *... Kws)
  • private void addNSObjectClsMethSummary(clang::Selector S, const clang::ento::RetainSummary * Summ)
  • private void addNSObjectMethSummary(clang::Selector S, const clang::ento::RetainSummary * Summ)
  • private bool applyParamAnnotationEffect(const clang::ParmVarDecl * pd, unsigned int parm_idx, const clang::NamedDecl * FD, clang::ento::RetainSummaryTemplate & Template)
  • public Optional<clang::ento::RetainSummaryManager::BehaviorSummary> canEval(const clang::CallExpr * CE, const clang::FunctionDecl * FD, bool & hasTrustedImplementationAnnotation)
  • private const clang::ento::RetainSummary * generateSummary(const clang::FunctionDecl * FD, bool & AllowAnnotations)
  • private const clang::ento::RetainSummary * getCFCreateGetRuleSummary(const clang::FunctionDecl * FD)
  • private const clang::ento::RetainSummary * getCFSummaryCreateRule(const clang::FunctionDecl * FD)
  • private const clang::ento::RetainSummary * getCFSummaryGetRule(const clang::FunctionDecl * FD)
  • private const clang::ento::RetainSummary * getClassMethodSummary(const clang::ObjCMessageExpr * ME)
  • private const clang::ento::RetainSummary * getDefaultSummary()
  • private const clang::ento::RetainSummary * getDoNothingSummary()
  • private const clang::ento::RetainSummary * getFunctionSummary(const clang::FunctionDecl * FD)
  • private const clang::ento::RetainSummary * getInstanceMethodSummary(const clang::ObjCMessageExpr * ME, clang::QualType ReceiverType)
  • private const clang::ento::RetainSummary * getMethodSummary(const clang::ObjCMethodDecl * MD)
  • private const clang::ento::RetainSummary * getMethodSummary(clang::Selector S, const clang::ObjCInterfaceDecl * ID, const clang::ObjCMethodDecl * MD, clang::QualType RetTy, clang::ento::RetainSummaryManager::ObjCMethodSummariesTy & CachedSummaries)
  • private const clang::ento::RetainSummary * getOSSummaryCreateRule(const clang::FunctionDecl * FD)
  • private const clang::ento::RetainSummary * getOSSummaryFreeRule(const clang::FunctionDecl * FD)
  • private const clang::ento::RetainSummary * getOSSummaryGetRule(const clang::FunctionDecl * FD)
  • private const clang::ento::RetainSummary * getOSSummaryReleaseRule(const clang::FunctionDecl * FD)
  • private const clang::ento::RetainSummary * getOSSummaryRetainRule(const clang::FunctionDecl * FD)
  • public clang::ento::RetEffect getObjAllocRetEffect() const
  • private const clang::ento::RetainSummary * getPersistentStopSummary()
  • private const clang::ento::RetainSummary * getPersistentSummary(clang::ento::RetEffect RetEff, clang::ento::ArgEffects ScratchArgs, clang::ento::ArgEffect ReceiverEff = clang::ento::ArgEffect(DoNothing), clang::ento::ArgEffect DefaultEff = clang::ento::ArgEffect(MayEscape), clang::ento::ArgEffect ThisEff = clang::ento::ArgEffect(DoNothing))
  • private const clang::ento::RetainSummary * getPersistentSummary(const clang::ento::RetainSummary & OldSumm)
  • private Optional<clang::ento::RetEffect> getRetEffectFromAnnotations(clang::QualType RetTy, const clang::Decl * D)
  • private const clang::ento::RetainSummary * getStandardMethodSummary(const clang::ObjCMethodDecl * MD, clang::Selector S, clang::QualType RetTy)
  • public const clang::ento::RetainSummary * getSummary(clang::AnyCall C, bool HasNonZeroCallbackArg = false, bool IsReceiverUnconsumedSelf = false, clang::QualType ReceiverType = {})
  • private const clang::ento::RetainSummary * getSummaryForOSObject(const clang::FunctionDecl * FD, llvm::StringRef FName, clang::QualType RetTy)
  • private const clang::ento::RetainSummary * getSummaryForObjCOrCFObject(const clang::FunctionDecl * FD, llvm::StringRef FName, clang::QualType RetTy, const clang::FunctionType * FT, bool & AllowAnnotations)
  • private const clang::ento::RetainSummary * getUnarySummary(const clang::FunctionType * FT, clang::ento::ArgEffectKind AE)
  • private template <class T1, class T2, class... Others>Optional<clang::ento::ObjKind> hasAnyEnabledAttrOf(const clang::Decl * D, clang::QualType QT)
  • private template <class T>Optional<clang::ento::ObjKind> hasAnyEnabledAttrOf(const clang::Decl * D, clang::QualType QT)
  • public static bool isKnownSmartPointer(clang::QualType QT)
  • public bool isTrustedReferenceCountImplementation(const clang::Decl * FD)
  • private void updateSummaryForArgumentTypes(const clang::AnyCall & C, const clang::ento::RetainSummary *& RS)
  • private const clang::ento::RetainSummary * updateSummaryForNonZeroCallbackArg(const clang::ento::RetainSummary * S, clang::AnyCall & C)
  • private void updateSummaryForReceiverUnconsumedSelf(const clang::ento::RetainSummary *& S)
  • private void updateSummaryFromAnnotations(const clang::ento::RetainSummary *& Summ, const clang::FunctionDecl * FD)
  • private void updateSummaryFromAnnotations(const clang::ento::RetainSummary *& Summ, const clang::ObjCMethodDecl * MD)

Methods

void InitializeClassMethodSummaries()

Declared at: clang/include/clang/Analysis/RetainSummaryManager.h:549

void InitializeMethodSummaries()

Declared at: clang/include/clang/Analysis/RetainSummaryManager.h:550

RetainSummaryManager(clang::ASTContext& ctx,
                     bool trackObjCAndCFObjects,
                     bool trackOSObjects)

Declared at: clang/include/clang/Analysis/RetainSummaryManager.h:624

Parameters

clang::ASTContext& ctx
bool trackObjCAndCFObjects
bool trackOSObjects

void addClassMethSummary(
    const char* Cls,
    const char* name,
    const clang::ento::RetainSummary* Summ,
    bool isNullary = true)

Declared at: clang/include/clang/Analysis/RetainSummaryManager.h:560

Parameters

const char* Cls
const char* name
const clang::ento::RetainSummary* Summ
bool isNullary = true

template <typename... Keywords>
void addClsMethSummary(
    clang::IdentifierInfo* II,
    const clang::ento::RetainSummary* Summ,
    Keywords*... Kws)

Declared at: clang/include/clang/Analysis/RetainSummaryManager.h:596

Templates

Keywords

Parameters

clang::IdentifierInfo* II
const clang::ento::RetainSummary* Summ
Keywords*... Kws

template <typename... Keywords>
void addClsMethSummary(
    const char* Cls,
    const clang::ento::RetainSummary* Summ,
    Keywords*... Kws)

Declared at: clang/include/clang/Analysis/RetainSummaryManager.h:589

Templates

Keywords

Parameters

const char* Cls
const clang::ento::RetainSummary* Summ
Keywords*... Kws

void addInstMethSummary(
    const char* Cls,
    const char* nullaryName,
    const clang::ento::RetainSummary* Summ)

Declared at: clang/include/clang/Analysis/RetainSummaryManager.h:568

Parameters

const char* Cls
const char* nullaryName
const clang::ento::RetainSummary* Summ

template <typename... Keywords>
void addInstMethSummary(
    const char* Cls,
    const clang::ento::RetainSummary* Summ,
    Keywords*... Kws)

Declared at: clang/include/clang/Analysis/RetainSummaryManager.h:583

Templates

Keywords

Parameters

const char* Cls
const clang::ento::RetainSummary* Summ
Keywords*... Kws

template <typename... Keywords>
void addMethodSummary(
    clang::IdentifierInfo* ClsII,
    clang::ento::RetainSummaryManager::
        ObjCMethodSummariesTy& Summaries,
    const clang::ento::RetainSummary* Summ,
    Keywords*... Kws)

Declared at: clang/include/clang/Analysis/RetainSummaryManager.h:576

Templates

Keywords

Parameters

clang::IdentifierInfo* ClsII
clang::ento::RetainSummaryManager:: ObjCMethodSummariesTy& Summaries
const clang::ento::RetainSummary* Summ
Keywords*... Kws

void addNSObjectClsMethSummary(
    clang::Selector S,
    const clang::ento::RetainSummary* Summ)

Declared at: clang/include/clang/Analysis/RetainSummaryManager.h:552

Parameters

clang::Selector S
const clang::ento::RetainSummary* Summ

void addNSObjectMethSummary(
    clang::Selector S,
    const clang::ento::RetainSummary* Summ)

Declared at: clang/include/clang/Analysis/RetainSummaryManager.h:556

Parameters

clang::Selector S
const clang::ento::RetainSummary* Summ

bool applyParamAnnotationEffect(
    const clang::ParmVarDecl* pd,
    unsigned int parm_idx,
    const clang::NamedDecl* FD,
    clang::ento::RetainSummaryTemplate& Template)

Description

Apply the annotation of @c pd in function @c FD to the resulting summary stored in out-parameter @c Template.

Declared at: clang/include/clang/Analysis/RetainSummaryManager.h:619

Parameters

const clang::ParmVarDecl* pd
unsigned int parm_idx
const clang::NamedDecl* FD
clang::ento::RetainSummaryTemplate& Template

Returns

whether an annotation was applied.

Optional<clang::ento::RetainSummaryManager::
             BehaviorSummary>
canEval(const clang::CallExpr* CE,
        const clang::FunctionDecl* FD,
        bool& hasTrustedImplementationAnnotation)

Declared at: clang/include/clang/Analysis/RetainSummaryManager.h:651

Parameters

const clang::CallExpr* CE
const clang::FunctionDecl* FD
bool& hasTrustedImplementationAnnotation

const clang::ento::RetainSummary* generateSummary(
    const clang::FunctionDecl* FD,
    bool& AllowAnnotations)

Declared at: clang/include/clang/Analysis/RetainSummaryManager.h:601

Parameters

const clang::FunctionDecl* FD
bool& AllowAnnotations

const clang::ento::RetainSummary*
getCFCreateGetRuleSummary(
    const clang::FunctionDecl* FD)

Declared at: clang/include/clang/Analysis/RetainSummaryManager.h:518

Parameters

const clang::FunctionDecl* FD

const clang::ento::RetainSummary*
getCFSummaryCreateRule(
    const clang::FunctionDecl* FD)

Declared at: clang/include/clang/Analysis/RetainSummaryManager.h:516

Parameters

const clang::FunctionDecl* FD

const clang::ento::RetainSummary*
getCFSummaryGetRule(const clang::FunctionDecl* FD)

Declared at: clang/include/clang/Analysis/RetainSummaryManager.h:517

Parameters

const clang::FunctionDecl* FD

const clang::ento::RetainSummary*
getClassMethodSummary(
    const clang::ObjCMessageExpr* ME)

Declared at: clang/include/clang/Analysis/RetainSummaryManager.h:683

Parameters

const clang::ObjCMessageExpr* ME

const clang::ento::RetainSummary*
getDefaultSummary()

Declared at: clang/include/clang/Analysis/RetainSummaryManager.h:537

const clang::ento::RetainSummary*
getDoNothingSummary()

Declared at: clang/include/clang/Analysis/RetainSummaryManager.h:531

const clang::ento::RetainSummary*
getFunctionSummary(const clang::FunctionDecl* FD)

Declared at: clang/include/clang/Analysis/RetainSummaryManager.h:673

Parameters

const clang::FunctionDecl* FD

const clang::ento::RetainSummary*
getInstanceMethodSummary(
    const clang::ObjCMessageExpr* ME,
    clang::QualType ReceiverType)

Declared at: clang/include/clang/Analysis/RetainSummaryManager.h:681

Parameters

const clang::ObjCMessageExpr* ME
clang::QualType ReceiverType

const clang::ento::RetainSummary*
getMethodSummary(const clang::ObjCMethodDecl* MD)

Description

getMethodSummary - This version of getMethodSummary is used to query the summary for the current method being analyzed.

Declared at: clang/include/clang/Analysis/RetainSummaryManager.h:671

Parameters

const clang::ObjCMethodDecl* MD

const clang::ento::RetainSummary*
getMethodSummary(
    clang::Selector S,
    const clang::ObjCInterfaceDecl* ID,
    const clang::ObjCMethodDecl* MD,
    clang::QualType RetTy,
    clang::ento::RetainSummaryManager::
        ObjCMethodSummariesTy& CachedSummaries)

Declared at: clang/include/clang/Analysis/RetainSummaryManager.h:675

Parameters

clang::Selector S
const clang::ObjCInterfaceDecl* ID
const clang::ObjCMethodDecl* MD
clang::QualType RetTy
clang::ento::RetainSummaryManager:: ObjCMethodSummariesTy& CachedSummaries

const clang::ento::RetainSummary*
getOSSummaryCreateRule(
    const clang::FunctionDecl* FD)

Description

Create an OS object at +1.

Declared at: clang/include/clang/Analysis/RetainSummaryManager.h:499

Parameters

const clang::FunctionDecl* FD

const clang::ento::RetainSummary*
getOSSummaryFreeRule(
    const clang::FunctionDecl* FD)

Description

Free the OS object.

Declared at: clang/include/clang/Analysis/RetainSummaryManager.h:511

Parameters

const clang::FunctionDecl* FD

const clang::ento::RetainSummary*
getOSSummaryGetRule(const clang::FunctionDecl* FD)

Description

Get an OS object at +0.

Declared at: clang/include/clang/Analysis/RetainSummaryManager.h:502

Parameters

const clang::FunctionDecl* FD

const clang::ento::RetainSummary*
getOSSummaryReleaseRule(
    const clang::FunctionDecl* FD)

Description

Decrement the reference count on OS object.

Declared at: clang/include/clang/Analysis/RetainSummaryManager.h:508

Parameters

const clang::FunctionDecl* FD

const clang::ento::RetainSummary*
getOSSummaryRetainRule(
    const clang::FunctionDecl* FD)

Description

Increment the reference count on OS object.

Declared at: clang/include/clang/Analysis/RetainSummaryManager.h:505

Parameters

const clang::FunctionDecl* FD

clang::ento::RetEffect getObjAllocRetEffect()
    const

Declared at: clang/include/clang/Analysis/RetainSummaryManager.h:665

const clang::ento::RetainSummary*
getPersistentStopSummary()

Declared at: clang/include/clang/Analysis/RetainSummaryManager.h:543

const clang::ento::RetainSummary*
getPersistentSummary(
    clang::ento::RetEffect RetEff,
    clang::ento::ArgEffects ScratchArgs,
    clang::ento::ArgEffect ReceiverEff =
        clang::ento::ArgEffect(DoNothing),
    clang::ento::ArgEffect DefaultEff =
        clang::ento::ArgEffect(MayEscape),
    clang::ento::ArgEffect ThisEff =
        clang::ento::ArgEffect(DoNothing))

Declared at: clang/include/clang/Analysis/RetainSummaryManager.h:523

Parameters

clang::ento::RetEffect RetEff
clang::ento::ArgEffects ScratchArgs
clang::ento::ArgEffect ReceiverEff = clang::ento::ArgEffect(DoNothing)
clang::ento::ArgEffect DefaultEff = clang::ento::ArgEffect(MayEscape)
clang::ento::ArgEffect ThisEff = clang::ento::ArgEffect(DoNothing)

const clang::ento::RetainSummary*
getPersistentSummary(
    const clang::ento::RetainSummary& OldSumm)

Declared at: clang/include/clang/Analysis/RetainSummaryManager.h:520

Parameters

const clang::ento::RetainSummary& OldSumm

Optional<clang::ento::RetEffect>
getRetEffectFromAnnotations(clang::QualType RetTy,
                            const clang::Decl* D)

Description

Determine if there is a special return effect for this function or method.

Declared at: clang/include/clang/Analysis/RetainSummaryManager.h:689

Parameters

clang::QualType RetTy
const clang::Decl* D

const clang::ento::RetainSummary*
getStandardMethodSummary(
    const clang::ObjCMethodDecl* MD,
    clang::Selector S,
    clang::QualType RetTy)

Declared at: clang/include/clang/Analysis/RetainSummaryManager.h:685

Parameters

const clang::ObjCMethodDecl* MD
clang::Selector S
clang::QualType RetTy

const clang::ento::RetainSummary* getSummary(
    clang::AnyCall C,
    bool HasNonZeroCallbackArg = false,
    bool IsReceiverUnconsumedSelf = false,
    clang::QualType ReceiverType = {})

Declared at: clang/include/clang/Analysis/RetainSummaryManager.h:660

Parameters

clang::AnyCall C
bool HasNonZeroCallbackArg = false
bool IsReceiverUnconsumedSelf = false
clang::QualType ReceiverType = {}

const clang::ento::RetainSummary*
getSummaryForOSObject(
    const clang::FunctionDecl* FD,
    llvm::StringRef FName,
    clang::QualType RetTy)

Description

Return a summary for OSObject, or nullptr if not found.

Declared at: clang/include/clang/Analysis/RetainSummaryManager.h:605

Parameters

const clang::FunctionDecl* FD
llvm::StringRef FName
clang::QualType RetTy

const clang::ento::RetainSummary*
getSummaryForObjCOrCFObject(
    const clang::FunctionDecl* FD,
    llvm::StringRef FName,
    clang::QualType RetTy,
    const clang::FunctionType* FT,
    bool& AllowAnnotations)

Description

Return a summary for Objective-C or CF object, or nullptr if not found.

Declared at: clang/include/clang/Analysis/RetainSummaryManager.h:609

Parameters

const clang::FunctionDecl* FD
llvm::StringRef FName
clang::QualType RetTy
const clang::FunctionType* FT
bool& AllowAnnotations

const clang::ento::RetainSummary* getUnarySummary(
    const clang::FunctionType* FT,
    clang::ento::ArgEffectKind AE)

Declared at: clang/include/clang/Analysis/RetainSummaryManager.h:513

Parameters

const clang::FunctionType* FT
clang::ento::ArgEffectKind AE

template <class T1, class T2, class... Others>
Optional<clang::ento::ObjKind>
hasAnyEnabledAttrOf(const clang::Decl* D,
                    clang::QualType QT)

Declared at: clang/include/clang/Analysis/RetainSummaryManager.h:729

Templates

T1
T2
Others

Parameters

const clang::Decl* D
clang::QualType QT

template <class T>
Optional<clang::ento::ObjKind>
hasAnyEnabledAttrOf(const clang::Decl* D,
                    clang::QualType QT)

Description

Determine whether a declaration @c D of correspondent type (return type for functions/methods) @c QT has any of the given attributes, provided they pass necessary validation checks AND tracking the given attribute is enabled. Returns the object kind corresponding to the present attribute, or None, if none of the specified attributes are present. Crashes if passed an attribute which is not explicitly handled.

Declared at: clang/include/clang/Analysis/RetainSummaryManager.h:726

Templates

T

Parameters

const clang::Decl* D
clang::QualType QT

static bool isKnownSmartPointer(
    clang::QualType QT)

Declared at: clang/include/clang/Analysis/RetainSummaryManager.h:656

Parameters

clang::QualType QT

Returns

Whether the type corresponds to a known smart pointer implementation (that is, everything about it is inlineable).

bool isTrustedReferenceCountImplementation(
    const clang::Decl* FD)

Declared at: clang/include/clang/Analysis/RetainSummaryManager.h:658

Parameters

const clang::Decl* FD

void updateSummaryForArgumentTypes(
    const clang::AnyCall& C,
    const clang::ento::RetainSummary*& RS)

Description

Set argument types for arguments which are not doing anything.

Declared at: clang/include/clang/Analysis/RetainSummaryManager.h:716

Parameters

const clang::AnyCall& C
const clang::ento::RetainSummary*& RS

const clang::ento::RetainSummary*
updateSummaryForNonZeroCallbackArg(
    const clang::ento::RetainSummary* S,
    clang::AnyCall& C)

Declared at: clang/include/clang/Analysis/RetainSummaryManager.h:698

Parameters

const clang::ento::RetainSummary* S
clang::AnyCall& C

void updateSummaryForReceiverUnconsumedSelf(
    const clang::ento::RetainSummary*& S)

Description

Special case '[super init];' and '[self init];' Even though calling '[super init]' without assigning the result to self and checking if the parent returns 'nil' is a bad pattern, it is common. Additionally, our Self Init checker already warns about it. To avoid overwhelming the user with messages from both checkers, we model the case of '[super init]' in cases when it is not consumed by another expression as if the call preserves the value of 'self'; essentially, assuming it can never fail and return 'nil'. Note, we don't want to just stop tracking the value since we want the RetainCount checker to report leaks and use-after-free if SelfInit checker is turned off.

Declared at: clang/include/clang/Analysis/RetainSummaryManager.h:713

Parameters

const clang::ento::RetainSummary*& S

void updateSummaryFromAnnotations(
    const clang::ento::RetainSummary*& Summ,
    const clang::FunctionDecl* FD)

Declared at: clang/include/clang/Analysis/RetainSummaryManager.h:695

Parameters

const clang::ento::RetainSummary*& Summ
const clang::FunctionDecl* FD

void updateSummaryFromAnnotations(
    const clang::ento::RetainSummary*& Summ,
    const clang::ObjCMethodDecl* MD)

Declared at: clang/include/clang/Analysis/RetainSummaryManager.h:692

Parameters

const clang::ento::RetainSummary*& Summ
const clang::ObjCMethodDecl* MD