clang 20.0.0git
Namespaces | Macros | Functions
RetainCountChecker.cpp File Reference
#include "RetainCountChecker.h"
#include "clang/StaticAnalyzer/Core/Checker.h"
#include "clang/StaticAnalyzer/Core/PathSensitive/CallEvent.h"
#include <optional>

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
 

Macros

#define INIT_BUGTYPE(KIND)
 
#define LAZY_INIT_BUGTYPE(KIND)
 

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 (const MemRegion *R)
 A value escapes in these possible cases:
 
static SmallVector< ProgramStateRef, 2 > updateOutParameters (ProgramStateRef State, const RetainSummary &Summ, const CallEvent &CE)
 

Macro Definition Documentation

◆ INIT_BUGTYPE

#define INIT_BUGTYPE (   KIND)
Value:
Chk->KIND = std::make_unique<RefCountBug>(Mgr.getCurrentCheckerName(), \
RefCountBug::KIND);

◆ LAZY_INIT_BUGTYPE

#define LAZY_INIT_BUGTYPE (   KIND)
Value:
if (!Chk->KIND) \
Chk->KIND = std::make_unique<RefCountBug>(Mgr.getCurrentCheckerName(), \
RefCountBug::KIND);

Function Documentation

◆ GetReturnType()

static 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 393 of file RetainCountChecker.cpp.

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

◆ getSummary()

static const RetainSummary * getSummary ( RetainSummaryManager Summaries,
const CallEvent Call,
QualType  ReceiverType 
)
static

◆ isPointerToObject()

static bool isPointerToObject ( QualType  QT)
static

◆ isReceiverUnconsumedSelf()

static bool isReceiverUnconsumedSelf ( const CallEvent Call)
static

Definition at line 337 of file RetainCountChecker.cpp.

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

Referenced by getSummary().

◆ isSmartPtrField()

static bool isSmartPtrField ( const MemRegion MR)
static

◆ refValFromRetEffect()

static std::optional< RefVal > refValFromRetEffect ( RetEffect  RE,
QualType  ResultTy 
)
static

◆ removeRefBinding()

static ProgramStateRef removeRefBinding ( ProgramStateRef  State,
SymbolRef  Sym 
)
static

◆ setRefBinding()

static ProgramStateRef setRefBinding ( ProgramStateRef  State,
SymbolRef  Sym,
RefVal  Val 
)
static

◆ shouldEscapeOSArgumentOnCall()

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

◆ shouldEscapeRegion()

static bool shouldEscapeRegion ( 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 504 of file RetainCountChecker.cpp.

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

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

◆ updateOutParameters()

static SmallVector< ProgramStateRef, 2 > updateOutParameters ( ProgramStateRef  State,
const RetainSummary Summ,
const CallEvent CE 
)
static