A RetroSearch Logo

Home - News ( United States | United Kingdom | Italy | Germany ) - Football scores

Search Query:

Showing content from https://clang.llvm.org/doxygen/ExprEngineCallAndReturn_8cpp_source.html below:

clang: lib/StaticAnalyzer/Core/ExprEngineCallAndReturn.cpp Source File

23#include "llvm/ADT/SmallSet.h" 24#include "llvm/ADT/Statistic.h" 25#include "llvm/Support/Casting.h" 26#include "llvm/Support/Compiler.h" 27#include "llvm/Support/SaveAndRestore.h" 30using namespace clang

;

33#define DEBUG_TYPE "ExprEngine" 36 "The # of times we split the path due to imprecise dynamic dispatch info"

);

39 "The # of times we inlined a call"

);

42 "The # of times we reached inline count maximum"

);

52

assert(Entry->

empty

());

67 Node

->addPredecessor(Pred, G);

77static

std::pair<

const Stmt

*,

79 const Stmt

*S =

nullptr

;

93

S = CEE->getCalleeContext()->getCallSite();

100

std::optional<CallEnter> CE;

104

}

while

(!CE || CE->getCalleeContext() != CEE->getCalleeContext());

107

}

else if

(std::optional<BlockEdge> BE = PP.

getAs

<

BlockEdge

>()) {

110

}

else if

(std::optional<CallEnter> CE = PP.

getAs

<

CallEnter

>()) {

112 if

(CE->getCalleeContext() == SF)

116 if

(

Node

->pred_empty())

117 return

std::make_pair(

nullptr

,

nullptr

);

122 return

std::make_pair(S, Blk);

139 if

(ExpectedTy == ActualTy)

169 const Stmt

*LastSt =

nullptr

;

172 if

(!Blk || !LastSt) {

184 removeDead

(Pred, Dst, dyn_cast<ReturnStmt>(LastSt), LCtx,

191 const Decl

*RuntimeCallee = calleeCtx->

getDecl

();

192 const Decl

*StaticDecl =

Call

->getDecl();

193

assert(RuntimeCallee);

203

assert(isa<CXXDestructorCall>(

Call

) &&

204 "The call event is not a destructor call!"

);

206 const auto

&DtorCall = cast<CXXDestructorCall>(

Call

);

208 auto

ThisVal = DtorCall.getCXXThisVal();

210 if

(

auto

ThisElementRegion = dyn_cast<ElementRegion>(ThisVal.getAsRegion())) {

211 auto

ArrayRegion = ThisElementRegion->getAsArrayOffset().getRegion();

212 auto

ElementType = ThisElementRegion->getElementType();

217 if

(!ElementCount.isConstant())

220 return

ElementCount.getAsInteger()->getLimitedValue();

230

assert(LCtx &&

"Location context must be provided!"

);

234

State = removePendingInitLoop(State,

E

, LCtx);

237

State = removeIndexOfElementToConstruct(State,

E

, LCtx);

241

State = removePendingArrayDestruction(State, LCtx);

267 const Stmt

*LastSt =

nullptr

;

283 bool

ShouldRepeatCall =

false

;

285 if

(

const auto

*DtorDecl =

286

dyn_cast_or_null<CXXDestructorDecl>(

Call

->getDecl())) {

288

ShouldRepeatCall = *Idx > 0;

290 auto

ThisVal = svalBuilder.

getCXXThis

(DtorDecl->getParent(), calleeCtx);

291

state = state->killBinding(ThisVal);

297 if

(

const ReturnStmt

*RS = dyn_cast_or_null<ReturnStmt>(LastSt)) {

299 SVal V

= state->getSVal(RS, LCtx);

305 if

(!ReturnedTy.

isNull

()) {

306 if

(

const Expr

*Ex = dyn_cast<Expr>(CE)) {

313

state = state->BindExpr(CE, callerCtx,

V

);

319

svalBuilder.

getCXXThis

(CCE->getConstructor()->getParent(), calleeCtx);

320 SVal

ThisV = state->getSVal(This);

321

ThisV = state->getSVal(ThisV.

castAs

<

Loc

>());

322

state = state->BindExpr(CCE, callerCtx, ThisV);

324

ShouldRepeatCall = shouldRepeatCtorCall(state, CCE, callerCtx);

327 if

(

const auto

*CNE = dyn_cast<CXXNewExpr>(CE)) {

333 SVal

AllocV = state->getSVal(CNE, callerCtx);

338

state = addObjectUnderConstruction(state, CNE, calleeCtx->

getParent

(),

343 if

(!ShouldRepeatCall) {

344

state = removeStateTraitsUsedForArrayEvaluation(

345

state, dyn_cast_or_null<CXXConstructExpr>(CE), callerCtx);

356 auto Loc

= isa<ReturnStmt>(LastSt)

359 nullptr

, &retValBind)};

361

isa<ReturnStmt>(LastSt) ? Blk : &CEBNode->

getCFG

().

getExit

();

374 removeDead

(BindedRetNode, CleanedNodes,

nullptr

, calleeCtx,

377

currBldrCtx =

nullptr

;

379

CleanedNodes.

Add

(CEBNode);

404 if

(llvm::isa_and_nonnull<CXXNewExpr>(CE)) {

407

CEENode, *UpdatedCall, *

this

,

411

cast<CXXAllocatorCall>(*UpdatedCall), DstPostCall, I, *

this

,

416

*UpdatedCall, *

this

,

425

!(isa<CXXNewExpr>(CE) &&

430

Dst.

insert

(DstPostCall);

436 unsigned

Idx = calleeCtx->

getIndex

() + (ShouldRepeatCall ? 0 : 1);

455 return

Cfg->

size

() >= AMgr.

options

.MinCFGSizeTreatFunctionsAsLarge;

464 bool

&IsRecursive,

unsigned

&StackDepth) {

465

IsRecursive =

false

;

470 const Decl

*DI = SFC->getDecl();

483 if

(!isSmall(CalleeADC))

497 enum

DynamicDispatchMode {

498

DynamicDispatchModeInlined = 1,

499

DynamicDispatchModeConservative

511 if

(

Call

.isForeign() && !isSecondPhaseCTU()) {

520 const bool

BState = State->get<CTUDispatchBifurcation>();

525

ConservativeEvalState = State->set<CTUDispatchBifurcation>(

true

);

526

conservativeEvalCall(

Call

, Bldr, Pred, ConservativeEvalState);

528

conservativeEvalCall(

Call

, Bldr, Pred, State);

544

!cast<BlockCall>(

Call

).isConversionFromLambda()) {

546

assert(BR &&

"If we have the block definition we should have its region"

);

549

cast<BlockDecl>(

D

),

554 const Expr

*CallE =

Call

.getOriginExpr();

566

State = State->enterStackFrame(

Call

, CalleeSFC);

570

N->addPredecessor(Pred, G);

589 if

(!isSecondPhaseCTU())

592

VisitedCallees->insert(

D

);

601

assert(ReplayState == CallE &&

"Backtracked to the wrong call."

);

623 evalCall

(dstCallEvaluated, N, *CallTemplate);

639 if

(!

E

|| isa<CXXNewExpr>(

E

))

643 for

(

unsigned

CallI = 0, CallN =

Call

.getNumArgs(); CallI != CallN; ++CallI) {

644 unsigned

I =

Call

.getASTArgumentIndex(CallI);

649

->getStackFrame()->getParent()

651

State = finishObjectConstruction(State, {

E

, I}, LC);

663 if

(CleanedState == State) {

672 "Finish argument construction"

);

674

B.generateNode(PP, CleanedState, Pred);

702

finishArgumentConstruction(dstArgumentCleanup, I,

Call

);

730 if

(

const MemRegion

*MR =

Call

.getArgSVal(Arg).getAsRegion())

738 if

(State == I->getState())

754 switch

(Msg->getMethodFamily()) {

761 return

State->BindExpr(

E

, LCtx, Msg->getReceiverSVal());

765 SVal

ThisV =

C

->getCXXThisVal();

766

ThisV = State->getSVal(ThisV.

castAs

<

Loc

>());

767 return

State->BindExpr(

E

, LCtx, ThisV);

776

assert(RTC->getStmt() ==

Call

.getOriginExpr());

779 Call

.getOriginExpr(), State, currBldrCtx, LCtx,

780

RTC->getConstructionContext(), CallOpts);

791

State = State->invalidateRegions(TargetR,

E

, Count, LCtx,

801 const auto

*CNE = dyn_cast<CXXNewExpr>(

E

);

802 if

(CNE && CNE->getOperatorNew()->isReplaceableGlobalAllocationFunction()) {

808 if

(

const Expr

*SizeExpr = CNE->getArraySize().value_or(

nullptr

)) {

809

ElementCount = State->getSVal(SizeExpr, LCtx);

811

ElementCount = svalBuilder.

makeIntVal

(1,

true

);

817

svalBuilder.

evalBinOp

(State, BO_Mul, ElementCount, ElementSize,

830 return

State->BindExpr(

E

, LCtx, R);

837

State =

Call

.invalidateRegions(currBldrCtx->

blockCount

(), State);

845

ExprEngine::CallInlinePolicy

851 switch

(

Call

.getKind()) {

859 return

CIP_DisallowedAlways;

863 return

CIP_DisallowedAlways;

873 if

(llvm::isa_and_nonnull<NewAllocatedObjectConstructionContext>(CC) &&

874

!Opts.MayInlineCXXAllocator)

875 return

CIP_DisallowedOnce;

878 if

(!shouldInlineArrayConstruction(Pred->

getState

(), CtorExpr, CurLC))

879 return

CIP_DisallowedOnce;

894 return

CIP_DisallowedAlways;

900

!Opts.ShouldIncludeTemporaryDtorsInCFG)

901 return

CIP_DisallowedOnce;

907 return

CIP_DisallowedOnce;

912 return

CIP_DisallowedOnce;

924 return

CIP_DisallowedAlways;

934 return

CIP_DisallowedOnce;

940

!Opts.MayInlineCXXTemporaryDtors)

941 return

CIP_DisallowedOnce;

947 return

CIP_DisallowedOnce;

953 if

(Opts.MayInlineCXXAllocator)

957 return

CIP_DisallowedAlways;

959 if

(!Opts.MayInlineObjCMethod)

960 return

CIP_DisallowedAlways;

963 return

CIP_DisallowedAlways;

984 hasMember

(Ctx, RD,

"iterator_category"

);

1008 if

(II->isStr(

"shared_ptr"

))

1030 if

(!Opts.MayInlineTemplateFunctions)

1035 if

(!Opts.MayInlineCXXStandardLibrary)

1042 if

(!Opts.MayInlineCXXContainerMethods)

1051 if

(!Opts.MayInlineCXXSharedPtrDtor)

1059 const CFG

*CalleeCFG = CalleeADC->

getCFG

();

1064 if

(isHuge(CalleeADC))

1096

std::optional<bool> MayInline = Engine.FunctionSummaries->

mayInline

(

D

);

1104 if

(mayInlineDecl(CalleeADC)) {

1116

CallInlinePolicy CIP = mayInlineCallKind(

Call

, Pred, Opts, CallOpts);

1117 if

(CIP != CIP_Allowed) {

1118 if

(CIP == CIP_DisallowedAlways) {

1119

assert(!MayInline || *MayInline);

1126 bool

IsRecursive =

false

;

1127 unsigned

StackDepth = 0;

1130

(!isSmall(CalleeADC) || IsRecursive))

1135

Opts.MaxTimesInlineLarge) &&

1136

isLarge(CalleeADC)) {

1137

NumReachedInlineCountMax++;

1141 if

(HowToInline ==

Inline_Minimal

&& (!isSmall(CalleeADC) || IsRecursive))

1147bool

ExprEngine::shouldInlineArrayConstruction(

const ProgramStateRef

State,

1154 if

(

const auto

*CAT = dyn_cast<ConstantArrayType>(CE->

getType

())) {

1165 return

shouldInlineArrayDestruction(ArrSize);

1170 return

shouldInlineArrayDestruction(*Size);

1175bool

ExprEngine::shouldInlineArrayDestruction(uint64_t Size) {

1180 return

Size <= maxAllowedSize && Size > 0;

1193 if

(

const auto

*CAT = dyn_cast<ConstantArrayType>(Ty)) {

1227

performTrivialCopy(Bldr, Pred, *

Call

);

1234 const Expr

*

E

=

Call

->getOriginExpr();

1237 if

(InlinedFailedState) {

1239

State = InlinedFailedState;

1244 if

(shouldInlineCall(*

Call

,

D

, Pred, CallOpts)) {

1256

conservativeEvalCall(*

Call

, Bldr, Pred, State);

1260

ctuBifurcate(*

Call

,

D

, Bldr, Pred, State);

1267

State = removeStateTraitsUsedForArrayEvaluation(

1268

State, dyn_cast_or_null<CXXConstructExpr>(

E

),

Call

->getLocationContext());

1271

conservativeEvalCall(*

Call

, Bldr, Pred, State);

1274void

ExprEngine::BifurcateCall(

const MemRegion

*BifurReg,

1283 const unsigned

*BState =

1284

State->get<DynamicDispatchBifurcationMap>(BifurReg);

1287 if

(*BState == DynamicDispatchModeInlined)

1288

ctuBifurcate(

Call

,

D

, Bldr, Pred, State);

1292

conservativeEvalCall(

Call

, Bldr, Pred, State);

1299

State->set<DynamicDispatchBifurcationMap>(BifurReg,

1300

DynamicDispatchModeInlined);

1301

ctuBifurcate(

Call

,

D

, Bldr, Pred, IState);

1304

State->set<DynamicDispatchBifurcationMap>(BifurReg,

1305

DynamicDispatchModeConservative);

1306

conservativeEvalCall(

Call

, Bldr, Pred, NoIState);

1308

NumOfDynamicDispatchPathSplits++;

1320

ei = dstPreVisit.

end

(); it != ei; ++it) {

Defines the C++ Decl subclasses, other than those for templates (found in DeclTemplate....

static bool isContainerClass(const ASTContext &Ctx, const CXXRecordDecl *RD)

Returns true if the given C++ class is a container or iterator.

static ProgramStateRef getInlineFailedState(ProgramStateRef State, const Stmt *CallE)

static std::pair< const Stmt *, const CFGBlock * > getLastStmt(const ExplodedNode *Node)

static bool isTrivialObjectAssignment(const CallEvent &Call)

static bool isCXXSharedPtrDtor(const FunctionDecl *FD)

Returns true if the given function is the destructor of a class named "shared_ptr".

static bool hasMember(const ASTContext &Ctx, const CXXRecordDecl *RD, StringRef Name)

Returns true if the given C++ class contains a member with the given name.

static bool wasDifferentDeclUsedForInlining(CallEventRef<> Call, const StackFrameContext *calleeCtx)

STATISTIC(NumOfDynamicDispatchPathSplits, "The # of times we split the path due to imprecise dynamic dispatch info")

static SVal adjustReturnValue(SVal V, QualType ExpectedTy, QualType ActualTy, StoreManager &StoreMgr)

Adjusts a return value when the called function's return type does not match the caller's expression ...

static bool isContainerMethod(const ASTContext &Ctx, const FunctionDecl *FD)

Returns true if the given function refers to a method of a C++ container or iterator.

static unsigned getElementCountOfArrayBeingDestructed(const CallEvent &Call, const ProgramStateRef State, SValBuilder &SVB)

llvm::MachO::Target Target

#define REGISTER_MAP_WITH_PROGRAMSTATE(Name, Key, Value)

Declares an immutable map of type NameTy, suitable for placement into the ProgramState.

#define REGISTER_TRAIT_WITH_PROGRAMSTATE(Name, Type)

Declares a program state trait for type Type called Name, and introduce a type named NameTy.

Holds long-lived AST nodes (such as types and decls) that can be referred to throughout the semantic ...

SourceManager & getSourceManager()

DeclarationNameTable DeclarationNames

const LangOptions & getLangOpts() const

uint64_t getConstantArrayElementCount(const ConstantArrayType *CA) const

Return number of constant array elements.

AnalysisDeclContext * getContext(const Decl *D)

AnalysisDeclContext contains the context data for the function, method or block under analysis.

const BlockInvocationContext * getBlockInvocationContext(const LocationContext *ParentLC, const BlockDecl *BD, const void *Data)

Obtain a context of the block invocation using its parent context.

const Decl * getDecl() const

static bool isInStdNamespace(const Decl *D)

const StackFrameContext * getStackFrame(LocationContext const *ParentLC, const Stmt *S, const CFGBlock *Blk, unsigned BlockCount, unsigned Index)

Obtain a context of the call stack using its parent context.

ASTContext & getASTContext() const

bool isBodyAutosynthesized() const

CFG::BuildOptions & getCFGBuildOptions()

Stores options for the analyzer from the command line.

bool mayInlineCXXMemberFunction(CXXInlineableMemberKind K) const

Returns the option controlling which C++ member functions will be considered for inlining.

unsigned maxBlockVisitOnPath

The maximum number of times the analyzer visits a block.

IPAKind getIPAMode() const

Returns the inter-procedural analysis mode.

CTUPhase1InliningKind getCTUPhase1Inlining() const

AnalysisPurgeMode AnalysisPurgeOpt

unsigned InlineMaxStackDepth

The inlining stack depth limit.

Represents a single basic block in a source-level CFG.

succ_iterator succ_begin()

unsigned succ_size() const

Represents C++ constructor call.

std::optional< T > getAs() const

Convert to the specified CFGElement type, returning std::nullopt if this CFGElement is not of the des...

Represents a source-level, intra-procedural CFG that represents the control-flow of a Stmt.

unsigned size() const

Return the total number of CFGBlocks within the CFG This is simply a renaming of the getNumBlockIDs()...

bool isLinear() const

Returns true if the CFG has no branches.

unsigned getNumBlockIDs() const

Returns the total number of BlockIDs allocated (which start at 0).

BasePaths - Represents the set of paths from a derived class to one of its (direct or indirect) bases...

Represents a call to a C++ constructor.

CXXConstructionKind getConstructionKind() const

Determine whether this constructor is actually constructing a base class (rather than a complete obje...

Represents a C++ destructor within a class.

Represents a static or instance method of a struct/union/class.

const CXXRecordDecl * getParent() const

Return the parent of this method declaration, which is the class in which this method is defined.

bool isMoveAssignmentOperator() const

Determine whether this is a move assignment operator.

bool isCopyAssignmentOperator() const

Determine whether this is a copy-assignment operator, regardless of whether it was declared implicitl...

Represents a C++ struct/union/class.

bool hasTrivialDestructor() const

Determine whether this class has a trivial destructor (C++ [class.dtor]p3)

bool hasMemberName(DeclarationName N) const

Determine whether this class has a member with the given name, possibly in a non-dependent base class...

bool isDerivedFrom(const CXXRecordDecl *Base) const

Determine whether this class is derived from the class Base.

Represents a point when we begin processing an inlined call.

const CFGBlock * getEntry() const

Returns the entry block in the CFG for the entered function.

const StackFrameContext * getCalleeContext() const

Represents a point when we finish the call exit sequence (for inlined call).

CallExpr - Represents a function call (C99 6.5.2.2, C++ [expr.call]).

ConstructionContext's subclasses describe different ways of constructing an object in C++.

Decl - This represents one declaration (or definition), e.g.

virtual Decl * getCanonicalDecl()

Retrieves the "canonical" declaration of the given declaration.

IdentifierInfo * getAsIdentifierInfo() const

Retrieve the IdentifierInfo * stored in this declaration name, or null if this declaration name isn't...

This is a meta program point, which should be skipped by all the diagnostic reasoning etc.

This represents one expression.

Represents a function declaration or definition.

bool isTrivial() const

Whether this function is "trivial" in some specialized C++ senses.

One of these records is kept for each identifier that is lexed.

IdentifierInfo & get(StringRef Name)

Return the identifier token info for the specified named identifier.

It wraps the AnalysisDeclContext to represent both the call stack with the help of StackFrameContext ...

const Decl * getDecl() const

LLVM_ATTRIBUTE_RETURNS_NONNULL AnalysisDeclContext * getAnalysisDeclContext() const

const LocationContext * getParent() const

It might return null.

const StackFrameContext * getStackFrame() const

DeclarationName getDeclName() const

Get the actual, stored name of the declaration, which may be a special name.

Represents a parameter to a function.

@ PostStmtPurgeDeadSymbolsKind

const StackFrameContext * getStackFrame() const

std::optional< T > getAs() const

Convert to the specified ProgramPoint type, returning std::nullopt if this ProgramPoint is not of the...

A (possibly-)qualified type.

bool isNull() const

Return true if this QualType doesn't point to a type yet.

QualType getCanonicalType() const

bool isConstQualified() const

Determine whether this type is const-qualified.

ReturnStmt - This represents a return, optionally of an expression: return; return 4;.

bool isInSystemHeader(SourceLocation Loc) const

Returns if a SourceLocation is in a system header.

It represents a stack frame of the call stack (based on CallEvent).

unsigned getIndex() const

const Stmt * getCallSite() const

const CFGBlock * getCallSiteBlock() const

Stmt - This represents one statement.

bool isPointerType() const

CanQualType getCanonicalTypeUnqualified() const

bool isReferenceType() const

const CXXRecordDecl * getPointeeCXXRecordDecl() const

If this is a pointer or reference to a RecordType, return the CXXRecordDecl that the type refers to.

QualType getPointeeType() const

If this is a pointer, ObjC object pointer, or block pointer, this returns the respective pointee.

bool isObjCObjectPointerType() const

static bool isInCodeFile(SourceLocation SL, const SourceManager &SM)

AnalysisDeclContext * getAnalysisDeclContext(const Decl *D)

AnalysisDeclContextManager & getAnalysisDeclContextManager()

AnalyzerOptions & options

bool shouldInlineCall() const

AnalyzerOptions & getAnalyzerOptions() override

BlockDataRegion - A region that represents a block instance.

Represents a call to a C++ constructor.

const CXXConstructorDecl * getDecl() const override

Returns the declaration of the function or method that will be called.

const CXXConstructExpr * getOriginExpr() const override

Returns the expression whose value will be the result of this call.

Represents a non-static C++ member function call, no matter how it is written.

const FunctionDecl * getDecl() const override

Returns the declaration of the function or method that will be called.

Manages the lifetime of CallEvent objects.

CallEventRef getSimpleCall(const CallExpr *E, ProgramStateRef State, const LocationContext *LCtx, CFGBlock::ConstCFGElementRef ElemRef)

CallEventRef getCaller(const StackFrameContext *CalleeCtx, ProgramStateRef State)

Gets an outside caller given a callee context.

Represents an abstract call to a function or method along a particular path.

CallEventRef< T > cloneWithState(ProgramStateRef NewState) const

Returns a copy of this CallEvent, but using the given state.

static QualType getDeclaredResultType(const Decl *D)

Returns the result type of a function or method declaration.

static bool isVariadic(const Decl *D)

Returns true if the given decl is known to be variadic.

void runCheckersForPreCall(ExplodedNodeSet &Dst, const ExplodedNodeSet &Src, const CallEvent &Call, ExprEngine &Eng)

Run checkers for pre-visiting obj-c messages.

void runCheckersForEvalCall(ExplodedNodeSet &Dst, const ExplodedNodeSet &Src, const CallEvent &CE, ExprEngine &Eng, const EvalCallOptions &CallOpts)

Run checkers for evaluating a call.

void runCheckersForPostObjCMessage(ExplodedNodeSet &Dst, const ExplodedNodeSet &Src, const ObjCMethodCall &msg, ExprEngine &Eng, bool wasInlined=false)

Run checkers for post-visiting obj-c messages.

void runCheckersForPostStmt(ExplodedNodeSet &Dst, const ExplodedNodeSet &Src, const Stmt *S, ExprEngine &Eng, bool wasInlined=false)

Run checkers for post-visiting Stmts.

void runCheckersForNewAllocator(const CXXAllocatorCall &Call, ExplodedNodeSet &Dst, ExplodedNode *Pred, ExprEngine &Eng, bool wasInlined=false)

Run checkers between C++ operator new and constructor calls.

void runCheckersForPreStmt(ExplodedNodeSet &Dst, const ExplodedNodeSet &Src, const Stmt *S, ExprEngine &Eng)

Run checkers for pre-visiting Stmts.

void runCheckersForPostCall(ExplodedNodeSet &Dst, const ExplodedNodeSet &Src, const CallEvent &Call, ExprEngine &Eng, bool wasInlined=false)

Run checkers for post-visiting obj-c messages.

WorkList * getCTUWorkList() const

WorkList * getWorkList() const

void enqueue(ExplodedNodeSet &Set)

Enqueue the given set of nodes onto the work list.

ExplodedNode * getNode(const ProgramPoint &L, ProgramStateRef State, bool IsSink=false, bool *IsNew=nullptr)

Retrieve the node associated with a (Location,State) pair, where the 'Location' is a ProgramPoint in ...

ImplTy::iterator iterator

void insert(const ExplodedNodeSet &S)

void Add(ExplodedNode *N)

const ProgramStateRef & getState() const

void addPredecessor(ExplodedNode *V, ExplodedGraph &G)

addPredeccessor - Adds a predecessor to the current node, and in tandem add this node as a successor ...

const StackFrameContext * getStackFrame() const

const LocationContext * getLocationContext() const

ProgramStateManager & getStateManager()

void processCallEnter(NodeBuilderContext &BC, CallEnter CE, ExplodedNode *Pred)

Generate the entry node of the callee.

void processBeginOfFunction(NodeBuilderContext &BC, ExplodedNode *Pred, ExplodedNodeSet &Dst, const BlockEdge &L)

Called by CoreEngine.

void removeDead(ExplodedNode *Node, ExplodedNodeSet &Out, const Stmt *ReferenceStmt, const LocationContext *LC, const Stmt *DiagnosticStmt=nullptr, ProgramPoint::Kind K=ProgramPoint::PreStmtPurgeDeadSymbolsKind)

Run the analyzer's garbage collection - remove dead symbols and bindings from the state.

std::pair< ProgramStateRef, SVal > handleConstructionContext(const Expr *E, ProgramStateRef State, const NodeBuilderContext *BldrCtx, const LocationContext *LCtx, const ConstructionContext *CC, EvalCallOptions &CallOpts, unsigned Idx=0)

A convenient wrapper around computeObjectUnderConstruction and updateObjectsUnderConstruction.

void VisitReturnStmt(const ReturnStmt *R, ExplodedNode *Pred, ExplodedNodeSet &Dst)

VisitReturnStmt - Transfer function logic for return statements.

const CoreEngine & getCoreEngine() const

void processCallExit(ExplodedNode *Pred)

Generate the sequence of nodes that simulate the call exit and the post visit for CallExpr.

static std::optional< SVal > getObjectUnderConstruction(ProgramStateRef State, const ConstructionContextItem &Item, const LocationContext *LC)

By looking at a certain item that may be potentially part of an object's ConstructionContext,...

CFGElement getCurrentCFGElement()

Return the CFG element corresponding to the worklist element that is currently being processed by Exp...

@ Inline_Minimal

Do minimal inlining of callees.

ProgramStateRef processPointerEscapedOnBind(ProgramStateRef State, ArrayRef< std::pair< SVal, SVal > > LocAndVals, const LocationContext *LCtx, PointerEscapeKind Kind, const CallEvent *Call)

Call PointerEscape callback when a value escapes as a result of bind.

static std::optional< unsigned > getIndexOfElementToConstruct(ProgramStateRef State, const CXXConstructExpr *E, const LocationContext *LCtx)

Retreives which element is being constructed in a non-POD type array.

void VisitCallExpr(const CallExpr *CE, ExplodedNode *Pred, ExplodedNodeSet &Dst)

VisitCall - Transfer function for function calls.

ASTContext & getContext() const

getContext - Return the ASTContext associated with this analysis.

StoreManager & getStoreManager()

CFGBlock::ConstCFGElementRef getCFGElementRef() const

void evalCall(ExplodedNodeSet &Dst, ExplodedNode *Pred, const CallEvent &Call)

Evaluate a call, running pre- and post-call checkers and allowing checkers to be responsible for hand...

static std::optional< unsigned > getPendingArrayDestruction(ProgramStateRef State, const LocationContext *LCtx)

Retreives which element is being destructed in a non-POD type array.

CheckerManager & getCheckerManager() const

ProgramStateRef bindReturnValue(const CallEvent &Call, const LocationContext *LCtx, ProgramStateRef State)

Create a new state in which the call return value is binded to the call origin expression.

void removeDeadOnEndOfFunction(NodeBuilderContext &BC, ExplodedNode *Pred, ExplodedNodeSet &Dst)

Remove dead bindings/symbols before exiting a function.

void defaultEvalCall(NodeBuilder &B, ExplodedNode *Pred, const CallEvent &Call, const EvalCallOptions &CallOpts={})

Default implementation of call evaluation.

AnalysisManager & getAnalysisManager()

static std::optional< unsigned > getPendingInitLoop(ProgramStateRef State, const CXXConstructExpr *E, const LocationContext *LCtx)

Retreives the size of the array in the pending ArrayInitLoopExpr.

std::optional< bool > mayInline(const Decl *D)

void markMayInline(const Decl *D)

unsigned getNumTimesInlined(const Decl *D)

void markShouldNotInline(const Decl *D)

void bumpNumTimesInlined(const Decl *D)

MemRegion - The root abstract class for all memory regions.

LLVM_ATTRIBUTE_RETURNS_NONNULL const MemRegion * StripCasts(bool StripBaseAndDerivedCasts=true) const

const CFGBlock * getBlock() const

Return the CFGBlock associated with this builder.

unsigned blockCount() const

Returns the number of times the current basic block has been visited on the exploded graph path.

This is the simplest builder which generates nodes in the ExplodedGraph.

ExplodedNode * generateNode(const ProgramPoint &PP, ProgramStateRef State, ExplodedNode *Pred)

Generates a node in the ExplodedGraph.

void takeNodes(const ExplodedNodeSet &S)

Represents any expression that calls an Objective-C method.

While alive, includes the current analysis stack in a crash trace.

CallEventManager & getCallEventManager()

Information about invalidation for a particular region/symbol.

@ TK_DoNotInvalidateSuperRegion

void setTrait(SymbolRef Sym, InvalidationKinds IK)

Defines the runtime definition of the called function.

const MemRegion * getDispatchRegion()

When other definitions are possible, returns the region whose runtime type determines the method defi...

bool mayHaveOtherDefinitions()

Check if the definition we have is precise.

nonloc::ConcreteInt makeIntVal(const IntegerLiteral *integer)

QualType getArrayIndexType() const

SVal evalCast(SVal V, QualType CastTy, QualType OriginalTy)

Cast a given SVal to another SVal using given QualType's.

DefinedOrUnknownSVal conjureSymbolVal(const void *symbolTag, const Expr *expr, const LocationContext *LCtx, unsigned count)

Create a new symbol with a unique 'name'.

loc::MemRegionVal getCXXThis(const CXXMethodDecl *D, const StackFrameContext *SFC)

Return a memory region for the 'this' object reference.

SVal evalBinOp(ProgramStateRef state, BinaryOperator::Opcode op, SVal lhs, SVal rhs, QualType type)

DefinedSVal getConjuredHeapSymbolVal(const Expr *E, const LocationContext *LCtx, unsigned Count)

Conjure a symbol representing heap allocated memory region.

SVal - This represents a symbolic expression, which can be either an L-value or an R-value.

QualType getType(const ASTContext &) const

Try to get a reasonable type for the given value.

const MemRegion * getAsRegion() const

T castAs() const

Convert to the specified SVal type, asserting that this SVal is of the desired type.

This builder class is useful for generating nodes that resulted from visiting a statement.

ExplodedNode * generateNode(const Stmt *S, ExplodedNode *Pred, ProgramStateRef St, const ProgramPointTag *tag=nullptr, ProgramPoint::Kind K=ProgramPoint::PostStmtKind)

SVal evalDerivedToBase(SVal Derived, const CastExpr *Cast)

Evaluates a chain of derived-to-base casts through the path specified in Cast.

virtual void enqueue(const WorkListUnit &U)=0

LLVM_ATTRIBUTE_RETURNS_NONNULL const MemRegion * getRegion() const

Get the underlining region.

@ PSK_EscapeOutParameters

Escape for a new symbol that was generated into a region that the analyzer cannot follow during a con...

DefinedOrUnknownSVal getDynamicElementCount(ProgramStateRef State, const MemRegion *MR, SValBuilder &SVB, QualType Ty)

ProgramStateRef setDynamicExtent(ProgramStateRef State, const MemRegion *MR, DefinedOrUnknownSVal Extent)

Set the dynamic extent Extent of the region MR.

@ CE_CXXInheritedConstructor

DefinedOrUnknownSVal getElementExtent(QualType Ty, SValBuilder &SVB)

The JSON file list parser is used to communicate input to InstallAPI.

@ IPAK_DynamicDispatch

Enable inlining of dynamically dispatched methods.

@ IPAK_DynamicDispatchBifurcate

Enable inlining of dynamically dispatched methods, bifurcate paths when exact type info is unavailabl...

@ CIMK_Destructors

Refers to destructors (implicit or explicit).

@ CIMK_MemberFunctions

Refers to regular member function and operator calls.

@ CIMK_Constructors

Refers to constructors (implicit or explicit).

Hints for figuring out of a call should be inlined during evalCall().

bool IsTemporaryLifetimeExtendedViaAggregate

This call is a constructor for a temporary that is lifetime-extended by binding it to a reference-typ...

bool IsTemporaryCtorOrDtor

This call is a constructor or a destructor of a temporary value.

bool IsArrayCtorOrDtor

This call is a constructor or a destructor for a single element within an array, a part of array cons...

bool IsCtorOrDtorWithImproperlyModeledTargetRegion

This call is a constructor or a destructor for which we do not currently compute the this-region corr...

Traits for storing the call processing policy inside GDM.


RetroSearch is an open source project built by @garambo | Open a GitHub Issue

Search and Browse the WWW like it's 1997 | Search results from DuckDuckGo

HTML: 3.2 | Encoding: UTF-8 | Version: 0.7.4