A RetroSearch Logo

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

Search Query:

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

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

23#include "llvm/ADT/STLExtras.h" 24#include "llvm/ADT/Sequence.h" 27using namespace clang

;

38

state = createTemporaryRegionIfNeeded(state, LCtx, tempExpr, ME);

47 bool

AlwaysReturnsLValue;

50

assert(Ctor->getDecl()->isTrivial());

51

assert(Ctor->getDecl()->isCopyOrMoveConstructor());

52

ThisVal = Ctor->getCXXThisVal();

54

AlwaysReturnsLValue =

false

;

56

assert(cast<CXXMethodDecl>(

Call

.getDecl())->isTrivial());

57

assert(cast<CXXMethodDecl>(

Call

.getDecl())->getOverloadedOperator() ==

59

ThisVal = cast<CXXInstanceCall>(

Call

).getCXXThisVal();

60

ThisRD = cast<CXXMethodDecl>(

Call

.getDecl())->

getParent

();

61

AlwaysReturnsLValue =

true

;

75 if

(std::optional<Loc> L =

V

.getAs<

Loc

>())

78

assert(

V

.isUnknownOrUndef());

79

evalBind(Dst,

CallExpr

, Pred, ThisVal,

V

,

true

);

84 if

(AlwaysReturnsLValue)

85

State = State->BindExpr(

CallExpr

, LCtx, ThisVal);

93 QualType

&Ty,

bool

&IsArray,

unsigned

Idx) {

94 SValBuilder

&SVB = State->getStateManager().getSValBuilder();

99

Ty = AT->getElementType();

100

AT = dyn_cast<ArrayType>(AT->getElementType());

127 const auto

*DSCC = cast<VariableConstructionContext>(CC);

128 const auto

*DS = DSCC->getDeclStmt();

129 const auto

*Var = cast<VarDecl>(DS->getSingleDecl());

131 return

makeElementRegion(State, State->getLValue(Var, LCtx), Ty,

136 const auto

*ICC = cast<ConstructorInitializerConstructionContext>(CC);

137 const auto

*

Init

= ICC->getCXXCtorInitializer();

140 SVal

ThisVal = State->getSVal(ThisPtr);

141 if

(

Init

->isBaseInitializer()) {

142 const auto

*ThisReg = cast<SubRegion>(ThisVal.

getAsRegion

());

144 Init

->getBaseClass()->getAsCXXRecordDecl();

145 const auto

*BaseReg =

147 Init

->isBaseVirtual());

150 if

(

Init

->isDelegatingInitializer())

155 if

(

Init

->isIndirectMemberInitializer()) {

156

Field =

Init

->getIndirectMember();

157

FieldVal = State->getLValue(

Init

->getIndirectMember(), ThisVal);

159

Field =

Init

->getMember();

160

FieldVal = State->getLValue(

Init

->getMember(), ThisVal);

169 const auto

*NECC = cast<NewAllocatedObjectConstructionContext>(CC);

170 const auto

*NE = NECC->getCXXNewExpr();

173

dyn_cast_or_null<SubRegion>(

V

.getAsRegion())) {

177 auto

Ty = NE->getType()->getPointeeType();

178 while

(

const auto

*AT =

getContext

().getAsArrayType(Ty))

179

Ty = AT->getElementType();

208 if

(isa<BlockInvocationContext>(CallerLCtx)) {

211

CallerLCtx = CallerLCtx->getParent();

212

assert(!isa<BlockInvocationContext>(CallerLCtx));

218

cast<Expr>(SFC->

getCallSite

()), State, &CallerBldrCtx, CallerLCtx,

219

RTC->getConstructionContext(), CallOpts);

230 const auto

*RCC = cast<ReturnedValueConstructionContext>(CC);

233 static const int

TopLevelSymRegionTag = 0;

234 const Expr

*RetE = RCC->getReturnStmt()->getRetValue();

235

assert(RetE &&

"Void returns should not have a construction context"

);

241

llvm_unreachable(

"Unhandled return value construction context!"

);

245 const auto

*TCC = cast<ElidedTemporaryObjectConstructionContext>(CC);

258

TCC->getConstructorAfterElision(), State, BldrCtx, LCtx,

259

TCC->getConstructionContextAfterElision(), CallOpts);

269

CallOpts = PreElideCallOpts;

274 const auto

*TCC = cast<TemporaryObjectConstructionContext>(CC);

282 if

(!VD->getType()->isReferenceType()) {

306 const auto

*LCC = cast<LambdaCaptureConstructionContext>(CC);

311 const auto

*CE = dyn_cast_or_null<CXXConstructExpr>(

E

);

324 const auto

*ACC = cast<ArgumentConstructionContext>(CC);

325 const Expr

*

E

= ACC->getCallLikeExpr();

326 unsigned

Idx = ACC->getIndex();

329 auto

getArgLoc = [&](

CallEventRef<>

Caller) -> std::optional<SVal> {

331

Caller->getCalleeStackFrame(BldrCtx->

blockCount

());

350

*Caller->getAdjustedParameterIndex(Idx), BldrCtx->

blockCount

());

357 if

(

const auto

*CE = dyn_cast<CallExpr>(

E

)) {

360 if

(std::optional<SVal>

V

= getArgLoc(Caller))

364

}

else if

(

const auto

*CCE = dyn_cast<CXXConstructExpr>(

E

)) {

369 if

(std::optional<SVal>

V

= getArgLoc(Caller))

373

}

else if

(

const auto

*ME = dyn_cast<ObjCMessageExpr>(

E

)) {

376 if

(std::optional<SVal>

V

= getArgLoc(Caller))

402

assert(CC &&

"Computed target region without construction context?"

);

406 const auto

*DSCC = cast<VariableConstructionContext>(CC);

407 return

addObjectUnderConstruction(State, DSCC->getDeclStmt(), LCtx,

V

);

411 const auto

*ICC = cast<ConstructorInitializerConstructionContext>(CC);

412 const auto

*

Init

= ICC->getCXXCtorInitializer();

414

assert(

Init

->isAnyMemberInitializer() &&

415 "Base and delegating initializers should have been handled by" 416 "computeObjectUnderConstruction()"

);

417 return

addObjectUnderConstruction(State,

Init

, LCtx,

V

);

433

assert(RTC &&

"Could not have had a target region without it"

);

434 if

(isa<BlockInvocationContext>(CallerLCtx)) {

438

assert(!isa<BlockInvocationContext>(CallerLCtx));

442

cast<Expr>(SFC->

getCallSite

()), State, CallerLCtx,

443

RTC->getConstructionContext(), CallOpts);

448 const auto

*TCC = cast<ElidedTemporaryObjectConstructionContext>(CC);

450 V

, TCC->getConstructorAfterElision(), State, LCtx,

451

TCC->getConstructionContextAfterElision(), CallOpts);

454

State = addObjectUnderConstruction(

455

State, TCC->getConstructorAfterElision(), LCtx,

V

);

458 if

(

const auto

*BTE = TCC->getCXXBindTemporaryExpr())

459

State = elideDestructor(State, BTE, LCtx);

463 if

(

const auto

*MTE = TCC->getMaterializedTemporaryExpr())

464

State = addObjectUnderConstruction(State, MTE, LCtx,

V

);

473 const auto

*TCC = cast<TemporaryObjectConstructionContext>(CC);

474 if

(

const auto

*BTE = TCC->getCXXBindTemporaryExpr())

475

State = addObjectUnderConstruction(State, BTE, LCtx,

V

);

477 if

(

const auto

*MTE = TCC->getMaterializedTemporaryExpr())

478

State = addObjectUnderConstruction(State, MTE, LCtx,

V

);

483 const auto

*LCC = cast<LambdaCaptureConstructionContext>(CC);

487 if

(

const auto

*EL = dyn_cast_or_null<ElementRegion>(

V

.getAsRegion()))

490 return

addObjectUnderConstruction(

491

State, {LCC->getLambdaExpr(), LCC->getIndex()}, LCtx,

V

);

494 const auto

*ACC = cast<ArgumentConstructionContext>(CC);

495 if

(

const auto

*BTE = ACC->getCXXBindTemporaryExpr())

496

State = addObjectUnderConstruction(State, BTE, LCtx,

V

);

498 return

addObjectUnderConstruction(

499

State, {ACC->getCallLikeExpr(), ACC->getIndex()}, LCtx,

V

);

502

llvm_unreachable(

"Unhandled construction context!"

);

509 SValBuilder

&SVB = State->getStateManager().getSValBuilder();

520 const auto

*SourceArrayRegion =

521

cast<SubRegion>(State->getSVal(SourceArray, LCtx).getAsRegion());

525 return

State->BindExpr(Ctor->getArg(0), LCtx,

529void

ExprEngine::handleConstructor(

const Expr

*

E

,

532 const auto

*CE = dyn_cast<CXXConstructExpr>(

E

);

533 const auto

*CIE = dyn_cast<CXXInheritedCtorInitExpr>(

E

);

542 if

(std::optional<SVal> ElidedTarget =

549

State = finishObjectConstruction(State, CE, LCtx);

551

State = State->BindExpr(CE, LCtx, State->getSVal(*L, CE->getType()));

563

CE ? CE->getConstructionKind() : CIE->getConstructionKind();

567

assert(CE && !CIE &&

"A complete constructor is inherited?!"

);

574 if

(CE->getType()->isArrayType() || AILE) {

576 auto

isZeroSizeArray = [&] {

579 if

(

const auto

*CAT = dyn_cast<ConstantArrayType>(CE->getType()))

588 if

(isZeroSizeArray()) {

591 "Skipping 0 size array construction"

};

597

State = setIndexOfElementToConstruct(State, CE, LCtx, Idx + 1);

603

State = setPendingInitLoop(

605 getContext

().getArrayInitLoopExprElementCount(AILE));

613

CE, State, currBldrCtx, LCtx, CC, CallOpts, Idx);

619 const auto

*OuterCtor = dyn_cast_or_null<CXXConstructExpr>(

625

(

"This virtual base should have already been initialized by " 626 "the most derived class!"

));

653 SVal

ThisVal = State->getSVal(ThisPtr);

670 "Prepare for object construction"

);

674

assert(DstPrepare.

size

() <= 1);

675 if

(DstPrepare.

size

() == 0)

677

Pred = *BldrPrepare.begin();

697 if

(CE->requiresZeroInitialization()) {

710

State = State->bindDefaultZero(

Target

, LCtx);

717

PreInitialized = DstPreVisit;

726 if

(CE && CE->getConstructor()->isTrivial() &&

727

CE->getConstructor()->isCopyOrMoveConstructor() &&

732

performTrivialCopy(Bldr, N, *

Call

);

748 StmtNodeBuilder

Bldr(DstEvaluated, DstEvaluatedPostProcessed, *currBldrCtx);

753

cast<CXXConstructorDecl>(

Call

->getDecl())

755

->isAnyDestructorNoReturn()) {

764

assert(!DstEvaluated.

empty

() &&

765 "We should not have inlined this constructor!"

);

780

finishArgumentConstruction(DstPostArgumentCleanup, I, *

Call

);

786

DstPostArgumentCleanup,

794

handleConstructor(CE, Pred, Dst);

800

handleConstructor(CE, Pred, Dst);

810

assert(S &&

"A destructor without a trigger!"

);

815

assert(

RecordDecl

&&

"Only CXXRecordDecls should have destructors"

);

838 if

(

const Expr

*

E

= dyn_cast_or_null<Expr>(S)) {

854 Call

->getSourceRange().getBegin(),

855 "Error evaluating destructor"

);

877 "Error evaluating New Allocator Call"

);

909 SVal

RetVal = State->getSVal(CNE, LCtx);

914

State = State->bindDefaultInitial(RetVal,

UndefinedVal

{}, LCtx);

926 if

(!ProtoType->isNothrow())

931

CNE, I, addObjectUnderConstruction(State, CNE, LCtx, RetVal));

936

DstPostValue, *

Call

, *

this

);

949 unsigned

blockCount = currBldrCtx->

blockCount

();

954 bool

IsStandardGlobalOpNewFunction =

962

State = finishObjectConstruction(State, CNE, LCtx);

969 if

(IsStandardGlobalOpNewFunction)

985

State =

Call

->invalidateRegions(blockCount);

997 if

(!ProtoType->isNothrow())

999

State = State->assume(*dSymVal,

true

);

1008 if

(

const auto

*NewReg = cast_or_null<SubRegion>(symVal.

getAsRegion

())) {

1013 bool

isInitList = isa_and_nonnull<InitListExpr>(

Init

);

1030

evalBind(evaluated, CNE, Pred,

Result

,

V

,

true

);

1035

Pred = *evaluated.

begin

();

1057

State = State->BindExpr(CNE, LCtx,

Result

);

1065 if

(!isa<CXXConstructExpr>(

Init

)) {

1068

evalBind(Dst, CNE, NewN,

Result

, State->getSVal(

Init

, LCtx),

1069

IsStandardGlobalOpNewFunction);

1091

DstPostCall = DstPreCall;

1108

state = state->bindLoc(state->getLValue(VD, LCtx),

V

, LCtx);

1127

Bldr.

generateNode

(TE, Pred, state->BindExpr(TE, LCtx,

V

));

1143 for

(

auto const

[Idx, FieldForCapture, InitExpr] :

1144

llvm::zip(llvm::seq<unsigned>(0, -1), LE->getLambdaClass()->fields(),

1145

LE->capture_inits())) {

1146 SVal

FieldLoc = State->getLValue(FieldForCapture,

V

);

1149 if

(!FieldForCapture->hasCapturedVLAType()) {

1150

assert(InitExpr &&

"Capture missing initialization expression"

);

1156 const auto

FTy = FieldForCapture->getType();

1157 if

(FTy->isConstantArrayType() &&

1159 getContext

().getAsConstantArrayType(FTy)) == 0)

1165 if

(

const auto

OUC =

1167

InitVal = State->getSVal(OUC->getAsRegion());

1169

State = finishObjectConstruction(State, {LE, Idx}, LocCtxt);

1171

InitVal = State->getSVal(InitExpr, LocCtxt);

1176 "VLA capture by value is a compile time error!"

);

1181 Expr

*SizeExpr = FieldForCapture->getCapturedVLAType()->getSizeExpr();

1182

InitVal = State->getSVal(SizeExpr, LocCtxt);

1185

State = State->bindLoc(FieldLoc, InitVal, LocCtxt);

1191 SVal

LambdaRVal = State->getSVal(R);

1197

State->BindExpr(LE, LocCtxt, LambdaRVal),

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

static ProgramStateRef bindRequiredArrayElementToEnvironment(ProgramStateRef State, const ArrayInitLoopExpr *AILE, const LocationContext *LCtx, NonLoc Idx)

llvm::MachO::Target Target

Defines the PrettyStackTraceEntry class, which is used to make crashes give more contextual informati...

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

QualType getPointerType(QualType T) const

Return the uniqued reference to the type for a pointer to the specified type.

const ArrayType * getAsArrayType(QualType T) const

Type Query functions.

uint64_t getConstantArrayElementCount(const ConstantArrayType *CA) const

Return number of constant array elements.

uint64_t getArrayInitLoopExprElementCount(const ArrayInitLoopExpr *AILE) const

Return number of elements initialized in an ArrayInitLoopExpr.

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

CFG::BuildOptions & getCFGBuildOptions()

Represents a loop initializing the elements of an array.

OpaqueValueExpr * getCommonExpr() const

Get the common subexpression shared by all initializations (the source array).

Represents an array type, per C99 6.7.5.2 - Array Declarators.

Represents a function call that returns a C++ object by value.

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...

CXXCatchStmt - This represents a C++ catch block.

VarDecl * getExceptionDecl() const

Represents a call to a C++ constructor.

Represents a delete expression for memory deallocation and destructor calls, e.g.

Represents a C++ destructor within a class.

Represents a call to an inherited base class constructor from an inheriting constructor.

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

Represents a new-expression for memory allocation and constructor calls, e.g: "new CXXNewExpr(foo)".

Expr * getPlacementArg(unsigned I)

SourceLocation getBeginLoc() const

FunctionDecl * getOperatorNew() const

Expr * getInitializer()

The initializer of this new-expression.

Represents a C++ struct/union/class.

Represents the this expression in C++.

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++.

virtual const ArrayInitLoopExpr * getArrayInitLoop() const

@ CXX17ElidedCopyVariableKind

@ ElidedTemporaryObjectKind

@ SimpleTemporaryObjectKind

@ CXX17ElidedCopyConstructorInitializerKind

@ SimpleConstructorInitializerKind

@ SimpleReturnedValueKind

@ CXX17ElidedCopyReturnedValueKind

DeclContext * getParent()

getParent - Returns the containing DeclContext.

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

This represents one expression.

Expr * IgnoreParens() LLVM_READONLY

Skip past any parentheses which might surround this expression until reaching a fixed point.

Represents a function declaration or definition.

bool isReservedGlobalPlacementOperator() const

Determines whether this operator new or delete is one of the reserved global placement operators: voi...

bool isReplaceableGlobalAllocationFunction(std::optional< unsigned > *AlignmentParam=nullptr, bool *IsNothrow=nullptr) const

Determines whether this function is one of the replaceable global allocation functions: void *operato...

Represents a prototype with parameter type info, e.g.

A C++ lambda expression, which produces a function object (of unspecified type) that can be invoked l...

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

const Decl * getDecl() const

const ParentMap & getParentMap() const

LLVM_ATTRIBUTE_RETURNS_NONNULL AnalysisDeclContext * getAnalysisDeclContext() const

const LocationContext * getParent() const

It might return null.

const StackFrameContext * getStackFrame() const

Represents a prvalue temporary that is written into memory so that a reference can bind to it.

StorageDuration getStorageDuration() const

Retrieve the storage duration for the materialized temporary.

Expr * getSubExpr() const

Retrieve the temporary-generating subexpression whose value will be materialized into a glvalue.

ValueDecl * getExtendingDecl()

Get the declaration which triggered the lifetime-extension of this temporary, if any.

Expr * getSourceExpr() const

The source expression of an opaque value expression is the expression which originally generated the ...

Stmt * getParent(Stmt *) const

Represents a program point just after an implicit call event.

If a crash happens while one of these objects are live, the message is printed out along with the spe...

ProgramPoint withTag(const ProgramPointTag *tag) const

Create a new ProgramPoint object that is the same as the original except for using the specified tag ...

A (possibly-)qualified type.

Represents a struct/union/class.

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.

CXXRecordDecl * getAsCXXRecordDecl() const

Retrieves the CXXRecordDecl that this type refers to, either because the type is a RecordType or beca...

QualType getPointeeType() const

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

const T * getAs() const

Member-template getAs<specific type>'.

Represent the declaration of a variable (in which case it is an lvalue) a function (in which case it ...

Represents a variable declaration or definition.

AnalyzerOptions & getAnalyzerOptions() override

Represents a call to a C++ constructor.

Manages the lifetime of CallEvent objects.

CallEventRef< CXXDestructorCall > getCXXDestructorCall(const CXXDestructorDecl *DD, const Stmt *Trigger, const MemRegion *Target, bool IsBase, ProgramStateRef State, const LocationContext *LCtx, CFGBlock::ConstCFGElementRef ElemRef)

CallEventRef< CXXDeallocatorCall > getCXXDeallocatorCall(const CXXDeleteExpr *E, ProgramStateRef State, const LocationContext *LCtx, CFGBlock::ConstCFGElementRef ElemRef)

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

CallEventRef< ObjCMethodCall > getObjCMethodCall(const ObjCMessageExpr *E, ProgramStateRef State, const LocationContext *LCtx, CFGBlock::ConstCFGElementRef ElemRef)

CallEventRef< CXXAllocatorCall > getCXXAllocatorCall(const CXXNewExpr *E, ProgramStateRef State, const LocationContext *LCtx, CFGBlock::ConstCFGElementRef ElemRef)

CallEventRef< CXXConstructorCall > getCXXConstructorCall(const CXXConstructExpr *E, const MemRegion *Target, ProgramStateRef State, const LocationContext *LCtx, CFGBlock::ConstCFGElementRef ElemRef)

CallEventRef< CXXInheritedConstructorCall > getCXXInheritedConstructorCall(const CXXInheritedCtorInitExpr *E, const MemRegion *Target, ProgramStateRef State, const LocationContext *LCtx, CFGBlock::ConstCFGElementRef ElemRef)

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

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 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.

ElementRegion is used to represent both array elements and casts.

void Add(ExplodedNode *N)

const ProgramStateRef & getState() const

ProgramPoint getLocation() const

getLocation - Returns the edge associated with the given node.

const LocationContext * getLocationContext() const

ProgramStateManager & getStateManager()

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 VisitCXXDestructor(QualType ObjectType, const MemRegion *Dest, const Stmt *S, bool IsBaseDtor, ExplodedNode *Pred, ExplodedNodeSet &Dst, EvalCallOptions &Options)

const CoreEngine & getCoreEngine() const

void VisitCXXNewExpr(const CXXNewExpr *CNE, ExplodedNode *Pred, ExplodedNodeSet &Dst)

void VisitLambdaExpr(const LambdaExpr *LE, ExplodedNode *Pred, ExplodedNodeSet &Dst)

VisitLambdaExpr - Transfer function logic for LambdaExprs.

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...

SVal computeObjectUnderConstruction(const Expr *E, ProgramStateRef State, const NodeBuilderContext *BldrCtx, const LocationContext *LCtx, const ConstructionContext *CC, EvalCallOptions &CallOpts, unsigned Idx=0)

Find location of the object that is being constructed by a given constructor.

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.

ASTContext & getContext() const

getContext - Return the ASTContext associated with this analysis.

StoreManager & getStoreManager()

void VisitCXXNewAllocatorCall(const CXXNewExpr *CNE, ExplodedNode *Pred, ExplodedNodeSet &Dst)

void CreateCXXTemporaryObject(const MaterializeTemporaryExpr *ME, ExplodedNode *Pred, ExplodedNodeSet &Dst)

Create a C++ temporary object for an rvalue.

CFGBlock::ConstCFGElementRef getCFGElementRef() const

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 VisitCXXThisExpr(const CXXThisExpr *TE, ExplodedNode *Pred, ExplodedNodeSet &Dst)

void VisitCXXDeleteExpr(const CXXDeleteExpr *CDE, ExplodedNode *Pred, ExplodedNodeSet &Dst)

void VisitCXXConstructExpr(const CXXConstructExpr *E, ExplodedNode *Pred, ExplodedNodeSet &Dst)

void VisitCXXInheritedCtorInitExpr(const CXXInheritedCtorInitExpr *E, ExplodedNode *Pred, ExplodedNodeSet &Dst)

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

Default implementation of call evaluation.

void VisitCXXCatchStmt(const CXXCatchStmt *CS, ExplodedNode *Pred, ExplodedNodeSet &Dst)

SValBuilder & getSValBuilder()

ProgramStateRef updateObjectsUnderConstruction(SVal V, const Expr *E, ProgramStateRef State, const LocationContext *LCtx, const ConstructionContext *CC, const EvalCallOptions &CallOpts)

Update the program state with all the path-sensitive information that's necessary to perform construc...

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

Retreives the size of the array in the pending ArrayInitLoopExpr.

const CXXThisRegion * getCXXThisRegion(QualType thisPointerTy, const LocationContext *LC)

getCXXThisRegion - Retrieve the [artificial] region associated with the parameter 'this'.

const ElementRegion * getElementRegion(QualType elementType, NonLoc Idx, const SubRegion *superRegion, const ASTContext &Ctx)

getElementRegion - Retrieve the memory region associated with the associated element type,...

const CXXLifetimeExtendedObjectRegion * getCXXLifetimeExtendedObjectRegion(Expr const *Ex, ValueDecl const *VD, LocationContext const *LC)

Create a CXXLifetimeExtendedObjectRegion for temporaries which are lifetime-extended by local referen...

const CXXTempObjectRegion * getCXXTempObjectRegion(Expr const *Ex, LocationContext const *LC)

const CXXBaseObjectRegion * getCXXBaseObjectRegion(const CXXRecordDecl *BaseClass, const SubRegion *Super, bool IsVirtual)

Create a CXXBaseObjectRegion with the given base class for region Super.

const CXXLifetimeExtendedObjectRegion * getCXXStaticLifetimeExtendedObjectRegion(const Expr *Ex, ValueDecl const *VD)

Create a CXXLifetimeExtendedObjectRegion for temporaries which are lifetime-extended by static refere...

MemRegion - The root abstract class for all memory regions.

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)

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

Generates a sink in the ExplodedGraph.

void addNodes(const ExplodedNodeSet &S)

const ExplodedNodeSet & getResults()

CallEventManager & getCallEventManager()

MemRegionManager & getRegionManager()

NonLoc makeArrayIndex(uint64_t idx)

ASTContext & getContext()

loc::MemRegionVal makeLoc(SymbolRef sym)

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.

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.

std::optional< T > getAs() const

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

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.

SubRegion - A region that subsets another larger region.

TypedValueRegion - An abstract class representing regions having a typed value.

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

StorageDuration

The storage duration for an object (per C++ [basic.stc]).

@ SD_Thread

Thread storage duration.

@ SD_Static

Static storage duration.

@ SD_FullExpression

Full-expression storage duration (for temporaries).

@ Result

The result type of a method or function.

const FunctionProtoType * T

Expr * extractElementInitializerFromNestedAILE(const ArrayInitLoopExpr *AILE)

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 IsElidableCtorThatHasNotBeenElided

This call is a pre-C++17 elidable constructor that we failed to elide because we failed to compute th...

bool IsCtorOrDtorWithImproperlyModeledTargetRegion

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


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