clang 22.0.0git
RetainCountChecker.cpp File Reference

Go to the source code of this file.

Namespaces

namespace  clang
 The JSON file list parser is used to communicate input to InstallAPI.
namespace  clang::ento
namespace  clang::ento::retaincountchecker

Functions

const RefValclang::ento::retaincountchecker::getRefBinding (ProgramStateRef State, SymbolRef Sym)
static ProgramStateRef setRefBinding (ProgramStateRef State, SymbolRef Sym, RefVal Val)
static ProgramStateRef removeRefBinding (ProgramStateRef State, SymbolRef Sym)
static bool isReceiverUnconsumedSelf (const CallEvent &Call)
static const RetainSummarygetSummary (RetainSummaryManager &Summaries, const CallEvent &Call, QualType ReceiverType)
static QualType GetReturnType (const Expr *RetE, ASTContext &Ctx)
 GetReturnType - Used to get the return type of a message expression or function call with the intention of affixing that type to a tracked symbol.
static std::optional< RefValrefValFromRetEffect (RetEffect RE, QualType ResultTy)
static bool isPointerToObject (QualType QT)
static bool shouldEscapeOSArgumentOnCall (const CallEvent &CE, unsigned ArgIdx, const RefVal *TrackedValue)
 Whether the tracked value should be escaped on a given call.
static bool isSmartPtrField (const MemRegion *MR)
static bool shouldEscapeRegion (ProgramStateRef State, const MemRegion *R)
 A value escapes in these possible cases:
static SmallVector< ProgramStateRef, 2 > updateOutParameters (ProgramStateRef State, const RetainSummary &Summ, const CallEvent &CE)

Function Documentation

◆ GetReturnType()

QualType GetReturnType ( const Expr * RetE,
ASTContext & Ctx )
static

GetReturnType - Used to get the return type of a message expression or function call with the intention of affixing that type to a tracked symbol.

While the return type can be queried directly from RetEx, when invoking class methods we augment to the return type to be that of a pointer to the class (as opposed it just being id).

more specific than id.

Definition at line 392 of file RetainCountChecker.cpp.

References clang::Type::getAs(), clang::ASTContext::getObjCInterfaceType(), clang::ASTContext::getObjCObjectPointerType(), and clang::Expr::getType().

◆ getSummary()

◆ isPointerToObject()

◆ isReceiverUnconsumedSelf()

bool isReceiverUnconsumedSelf ( const CallEvent & Call)
static

Definition at line 336 of file RetainCountChecker.cpp.

References clang::Call, and clang::OMF_init.

Referenced by getSummary().

◆ isSmartPtrField()

bool isSmartPtrField ( const MemRegion * MR)
static

◆ refValFromRetEffect()

◆ removeRefBinding()

◆ setRefBinding()

◆ shouldEscapeOSArgumentOnCall()

bool shouldEscapeOSArgumentOnCall ( const CallEvent & CE,
unsigned ArgIdx,
const RefVal * TrackedValue )
static

◆ shouldEscapeRegion()

bool shouldEscapeRegion ( ProgramStateRef State,
const MemRegion * R )
static

A value escapes in these possible cases:

  • binding to something that is not a memory region.
  • binding to a memregion that does not have stack storage
  • binding to a variable that has a destructor attached using CleanupAttr

We do not currently model what happens when a symbol is assigned to a struct field, unless it is a known smart pointer implementation, about which we know that it is inlined. FIXME: This could definitely be improved upon.

Definition at line 503 of file RetainCountChecker.cpp.

References clang::Decl::hasAttr(), clang::ento::MemRegion::hasMemorySpace(), and isSmartPtrField().

Referenced by clang::ento::retaincountchecker::RetainCountChecker::checkBind(), and updateOutParameters().

◆ updateOutParameters()