clang 20.0.0git
|
Represents a non-static C++ member function call, no matter how it is written. More...
#include "clang/StaticAnalyzer/Core/PathSensitive/CallEvent.h"
Public Member Functions | |
virtual const Expr * | getCXXThisExpr () const |
Returns the expression representing the implicit 'this' object. | |
virtual SVal | getCXXThisVal () const |
Returns the value of the implicit 'this' object. | |
const FunctionDecl * | getDecl () const override |
Returns the declaration of the function or method that will be called. | |
RuntimeDefinition | getRuntimeDefinition () const override |
Returns the definition of the function or method that will be called. | |
void | getInitialStackFrameContents (const StackFrameContext *CalleeCtx, BindingsTy &Bindings) const override |
Populates the given SmallVector with the bindings in the callee's stack frame at the start of this call. | |
Public Member Functions inherited from clang::ento::AnyFunctionCall | |
const FunctionDecl * | getDecl () const override |
Returns the declaration of the function or method that will be called. | |
RuntimeDefinition | getRuntimeDefinition () const override |
Returns the definition of the function or method that will be called. | |
bool | argumentsMayEscape () const override |
Returns true if any of the arguments are known to escape to long- term storage, even if this method will not modify them. | |
void | getInitialStackFrameContents (const StackFrameContext *CalleeCtx, BindingsTy &Bindings) const override |
Populates the given SmallVector with the bindings in the callee's stack frame at the start of this call. | |
ArrayRef< ParmVarDecl * > | parameters () const override |
Return call's formal parameters. | |
Public Member Functions inherited from clang::ento::CallEvent | |
CallEvent & | operator= (const CallEvent &)=delete |
virtual | ~CallEvent ()=default |
virtual Kind | getKind () const =0 |
Returns the kind of call this is. | |
virtual StringRef | getKindAsString () const =0 |
virtual const Decl * | getDecl () const |
Returns the declaration of the function or method that will be called. | |
bool | isForeign () const |
void | setForeign (bool B) const |
const ProgramStateRef & | getState () const |
The state in which the call is being evaluated. | |
const LocationContext * | getLocationContext () const |
The context in which the call is being evaluated. | |
const CFGBlock::ConstCFGElementRef & | getCFGElementRef () const |
virtual RuntimeDefinition | getRuntimeDefinition () const =0 |
Returns the definition of the function or method that will be called. | |
virtual const Expr * | getOriginExpr () const |
Returns the expression whose value will be the result of this call. | |
virtual unsigned | getNumArgs () const =0 |
Returns the number of arguments (explicit and implicit). | |
bool | isInSystemHeader () const |
Returns true if the callee is known to be from a system header. | |
virtual SourceRange | getSourceRange () const |
Returns a source range for the entire call, suitable for outputting in diagnostics. | |
virtual SVal | getArgSVal (unsigned Index) const |
Returns the value of a given argument at the time of the call. | |
virtual const Expr * | getArgExpr (unsigned Index) const |
Returns the expression associated with a given argument. | |
virtual SourceRange | getArgSourceRange (unsigned Index) const |
Returns the source range for errors associated with this argument. | |
QualType | getResultType () const |
Returns the result type, adjusted for references. | |
SVal | getReturnValue () const |
Returns the return value of the call. | |
bool | hasNonNullArgumentsWithType (bool(*Condition)(QualType)) const |
Returns true if the type of any of the non-null arguments satisfies the condition. | |
bool | hasNonZeroCallbackArg () const |
Returns true if any of the arguments appear to represent callbacks. | |
bool | hasVoidPointerToNonConstArg () const |
Returns true if any of the arguments is void*. | |
virtual bool | argumentsMayEscape () const |
Returns true if any of the arguments are known to escape to long- term storage, even if this method will not modify them. | |
bool | isGlobalCFunction (StringRef SpecificName=StringRef()) const |
Returns true if the callee is an externally-visible function in the top-level namespace, such as malloc . | |
const IdentifierInfo * | getCalleeIdentifier () const |
Returns the name of the callee, if its name is a simple identifier. | |
ProgramPoint | getProgramPoint (bool IsPreVisit=false, const ProgramPointTag *Tag=nullptr) const |
Returns an appropriate ProgramPoint for this call. | |
ProgramStateRef | invalidateRegions (unsigned BlockCount, ProgramStateRef Orig=nullptr) const |
Returns a new state with all argument regions invalidated. | |
virtual void | getInitialStackFrameContents (const StackFrameContext *CalleeCtx, BindingsTy &Bindings) const =0 |
Populates the given SmallVector with the bindings in the callee's stack frame at the start of this call. | |
template<typename T > | |
CallEventRef< T > | cloneWithState (ProgramStateRef NewState) const |
Returns a copy of this CallEvent, but using the given state. | |
CallEventRef | cloneWithState (ProgramStateRef NewState) const |
Returns a copy of this CallEvent, but using the given state. | |
AnalysisDeclContext * | getCalleeAnalysisDeclContext () const |
Returns AnalysisDeclContext for the callee stack frame. | |
const StackFrameContext * | getCalleeStackFrame (unsigned BlockCount) const |
Returns the callee stack frame. | |
const ParamVarRegion * | getParameterLocation (unsigned Index, unsigned BlockCount) const |
Returns memory location for a parameter variable within the callee stack frame. | |
bool | isArgumentConstructedDirectly (unsigned Index) const |
Returns true if on the current path, the argument was constructed by calling a C++ constructor over it. | |
virtual std::optional< unsigned > | getAdjustedParameterIndex (unsigned ASTArgumentIndex) const |
Some calls have parameter numbering mismatched from argument numbering. | |
virtual unsigned | getASTArgumentIndex (unsigned CallArgumentIndex) const |
Some call event sub-classes conveniently adjust mismatching AST indices to match parameter indices. | |
const ConstructionContext * | getConstructionContext () const |
Returns the construction context of the call, if it is a C++ constructor call or a call of a function returning a C++ class instance. | |
std::optional< SVal > | getReturnValueUnderConstruction () const |
If the call returns a C++ record type then the region of its return value can be retrieved from its construction context. | |
const CallEventRef | getCaller () const |
bool | isCalledFromSystemHeader () const |
virtual ArrayRef< ParmVarDecl * > | parameters () const =0 |
Return call's formal parameters. | |
param_type_iterator | param_type_begin () const |
Returns an iterator over the types of the call's formal parameters. | |
param_type_iterator | param_type_end () const |
void | dump (raw_ostream &Out) const |
void | dump () const |
Static Public Member Functions | |
static bool | classof (const CallEvent *CA) |
Static Public Member Functions inherited from clang::ento::AnyFunctionCall | |
static bool | classof (const CallEvent *CA) |
Static Public Member Functions inherited from clang::ento::CallEvent | |
static bool | isCallStmt (const Stmt *S) |
Returns true if this is a statement is a function or method call of some kind. | |
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. | |
Protected Member Functions | |
CXXInstanceCall (const CallExpr *CE, ProgramStateRef St, const LocationContext *LCtx, CFGBlock::ConstCFGElementRef ElemRef) | |
CXXInstanceCall (const FunctionDecl *D, ProgramStateRef St, const LocationContext *LCtx, CFGBlock::ConstCFGElementRef ElemRef) | |
CXXInstanceCall (const CXXInstanceCall &Other)=default | |
void | getExtraInvalidatedValues (ValueList &Values, RegionAndSymbolInvalidationTraits *ETraits) const override |
Used to specify non-argument regions that will be invalidated as a result of this call. | |
std::pair< const CXXRecordDecl *, bool > | getDeclForDynamicType () const |
Returns the decl refered to by the "dynamic type" of the current object and if the class can be a sub-class or not. | |
Protected Member Functions inherited from clang::ento::AnyFunctionCall | |
AnyFunctionCall (const Expr *E, ProgramStateRef St, const LocationContext *LCtx, CFGBlock::ConstCFGElementRef ElemRef) | |
AnyFunctionCall (const Decl *D, ProgramStateRef St, const LocationContext *LCtx, CFGBlock::ConstCFGElementRef ElemRef) | |
AnyFunctionCall (const AnyFunctionCall &Other)=default | |
Protected Member Functions inherited from clang::ento::CallEvent | |
CallEvent (const Expr *E, ProgramStateRef state, const LocationContext *lctx, CFGBlock::ConstCFGElementRef ElemRef) | |
CallEvent (const Decl *D, ProgramStateRef state, const LocationContext *lctx, CFGBlock::ConstCFGElementRef ElemRef) | |
CallEvent (const CallEvent &Original) | |
virtual void | cloneTo (void *Dest) const =0 |
Copies this CallEvent, with vtable intact, into a new block of memory. | |
SVal | getSVal (const Stmt *S) const |
Get the value of arbitrary expressions at this point in the path. | |
virtual void | getExtraInvalidatedValues (ValueList &Values, RegionAndSymbolInvalidationTraits *ETraits) const |
Used to specify non-argument regions that will be invalidated as a result of this call. | |
Additional Inherited Members | |
Public Types inherited from clang::ento::CallEvent | |
using | Kind = CallEventKind |
using | FrameBindingTy = std::pair< SVal, SVal > |
using | BindingsTy = SmallVectorImpl< FrameBindingTy > |
using | param_type_iterator = llvm::mapped_iterator< ArrayRef< ParmVarDecl * >::iterator, GetTypeFn > |
Protected Types inherited from clang::ento::CallEvent | |
using | ValueList = SmallVectorImpl< SVal > |
Protected Attributes inherited from clang::ento::CallEvent | |
const void * | Data |
SourceLocation | Location |
Represents a non-static C++ member function call, no matter how it is written.
Definition at line 677 of file CallEvent.h.
|
inlineprotected |
Definition at line 679 of file CallEvent.h.
|
inlineprotected |
Definition at line 683 of file CallEvent.h.
|
protecteddefault |
Definition at line 712 of file CallEvent.h.
References clang::ento::CE_BEG_CXX_INSTANCE_CALLS, clang::ento::CE_END_CXX_INSTANCE_CALLS, and clang::ento::CallEvent::getKind().
|
inlinevirtual |
Returns the expression representing the implicit 'this' object.
Reimplemented in clang::ento::CXXMemberCall, and clang::ento::CXXMemberOperatorCall.
Definition at line 700 of file CallEvent.h.
Referenced by getCXXThisVal().
|
virtual |
Returns the value of the implicit 'this' object.
Reimplemented in clang::ento::CXXDestructorCall.
Definition at line 735 of file CallEvent.cpp.
References clang::ento::SValBuilder::evalCast(), clang::ento::SValBuilder::getContext(), getCXXThisExpr(), clang::ento::CallEvent::getState(), clang::ento::CallEvent::getSVal(), clang::ento::SVal::getType(), and clang::ento::SVal::isUnknownOrUndef().
Referenced by getDeclForDynamicType(), getExtraInvalidatedValues(), getInitialStackFrameContents(), and getRuntimeDefinition().
|
overridevirtual |
Returns the declaration of the function or method that will be called.
May be null.
Reimplemented from clang::ento::AnyFunctionCall.
Definition at line 693 of file CallEvent.cpp.
References D, clang::ento::SVal::getAsFunctionDecl(), clang::ento::AnyFunctionCall::getDecl(), clang::ento::CallEvent::getOriginExpr(), and clang::ento::CallEvent::getSVal().
Referenced by getExtraInvalidatedValues(), getInitialStackFrameContents(), getRuntimeDefinition(), and isTrivialObjectAssignment().
|
protected |
Returns the decl refered to by the "dynamic type" of the current object and if the class can be a sub-class or not.
If the Pointer is null, the flag has no meaning.
Definition at line 751 of file CallEvent.cpp.
References clang::ento::DynamicTypeInfo::canBeASubClass(), clang::ento::SVal::getAsRegion(), getCXXThisVal(), clang::ento::getDynamicTypeInfo(), clang::Type::getPointeeCXXRecordDecl(), clang::Type::getPointeeType(), clang::ento::CallEvent::getState(), clang::ento::DynamicTypeInfo::getType(), clang::QualType::isNull(), and clang::ento::DynamicTypeInfo::isValid().
Referenced by getExtraInvalidatedValues(), and getRuntimeDefinition().
|
overrideprotectedvirtual |
Used to specify non-argument regions that will be invalidated as a result of this call.
Reimplemented from clang::ento::CallEvent.
Definition at line 705 of file CallEvent.cpp.
References D, clang::ento::SVal::getAsRegion(), clang::ento::MemRegion::getBaseRegion(), getCXXThisVal(), getDecl(), getDeclForDynamicType(), clang::CXXRecordDecl::hasDefinition(), clang::CXXRecordDecl::hasMutableFields(), clang::ento::RegionAndSymbolInvalidationTraits::setTrait(), and clang::ento::RegionAndSymbolInvalidationTraits::TK_PreserveContents.
|
overridevirtual |
Populates the given SmallVector with the bindings in the callee's stack frame at the start of this call.
Reimplemented from clang::ento::AnyFunctionCall.
Definition at line 817 of file CallEvent.cpp.
References clang::Class, clang::ento::StoreManager::evalBaseToDerived(), clang::ento::SValBuilder::evalCast(), getCanonicalDecl(), clang::ento::SValBuilder::getContext(), clang::ento::SValBuilder::getCXXThis(), getCXXThisVal(), clang::LocationContext::getDecl(), getDecl(), clang::ento::AnyFunctionCall::getInitialStackFrameContents(), clang::CXXMethodDecl::getParent(), clang::ASTContext::getPointerType(), clang::ASTContext::getRecordType(), clang::ento::CallEvent::getState(), clang::ento::ProgramStateManager::getStoreManager(), clang::ento::ProgramStateManager::getSValBuilder(), clang::ento::SVal::isUnknown(), and V.
|
overridevirtual |
Returns the definition of the function or method that will be called.
Reimplemented from clang::ento::AnyFunctionCall.
Reimplemented in clang::ento::CXXMemberCall, and clang::ento::CXXDestructorCall.
Definition at line 765 of file CallEvent.cpp.
References D, clang::Definition, getCXXThisVal(), getDecl(), getDeclForDynamicType(), clang::ento::AnyFunctionCall::getRuntimeDefinition(), and clang::Result.
Referenced by clang::ento::CXXMemberCall::getRuntimeDefinition(), and clang::ento::CXXDestructorCall::getRuntimeDefinition().