15 #ifndef LLVM_CLANG_STATICANALYZER_CORE_PATHSENSITIVE_CALLEVENT_H 16 #define LLVM_CLANG_STATICANALYZER_CORE_PATHSENSITIVE_CALLEVENT_H 35 #include "llvm/ADT/ArrayRef.h" 36 #include "llvm/ADT/IntrusiveRefCntPtr.h" 37 #include "llvm/ADT/PointerIntPair.h" 38 #include "llvm/ADT/PointerUnion.h" 39 #include "llvm/ADT/STLExtras.h" 40 #include "llvm/ADT/SmallVector.h" 41 #include "llvm/ADT/StringRef.h" 42 #include "llvm/Support/Allocator.h" 43 #include "llvm/Support/Casting.h" 44 #include "llvm/Support/ErrorHandling.h" 51 class LocationContext;
53 class ProgramPointTag;
54 class StackFrameContext;
76 template<
typename T = CallEvent>
83 return this->
get()->
template cloneWithState<T>(State);
88 template <
typename SuperT>
104 const Decl *D =
nullptr;
145 llvm::PointerUnion<const Expr *, const Decl *> Origin;
159 mutable unsigned RefCount = 0;
161 void Retain()
const { ++RefCount; }
162 void Release()
const;
168 : State(
std::move(state)), LCtx(lctx), Origin(E) {}
171 : State(
std::move(state)), LCtx(lctx), Origin(D) {}
175 : State(Original.State), LCtx(Original.LCtx), Origin(Original.Origin),
176 Data(Original.Data), Location(Original.Location) {}
179 virtual void cloneTo(
void *Dest)
const = 0;
183 return getState()->getSVal(S, getLocationContext());
203 return Origin.dyn_cast<
const Decl *>();
223 return Origin.dyn_cast<
const Expr *>();
231 virtual unsigned getNumArgs()
const = 0;
235 const Decl *D = getDecl();
242 getState()->getStateManager().getContext().getSourceManager();
248 if (
const auto *FD = dyn_cast<FunctionDecl>(D))
249 return FD->isOverloadedOperator() && FD->isImplicit() && FD->isGlobal();
264 return getOriginExpr()->getSourceRange();
268 virtual SVal getArgSVal(
unsigned Index)
const;
277 virtual SourceRange getArgSourceRange(
unsigned Index)
const;
286 SVal getReturnValue()
const;
290 bool hasNonNullArgumentsWithType(
bool (*Condition)(
QualType))
const;
293 bool hasNonZeroCallbackArg()
const;
296 bool hasVoidPointerToNonConstArg()
const;
304 return hasNonZeroCallbackArg();
323 bool isGlobalCFunction(StringRef SpecificName = StringRef())
const;
333 const auto *ND = dyn_cast_or_null<NamedDecl>(getDecl());
336 return ND->getIdentifier();
359 template <
typename T>
364 return cloneWithState<CallEvent>(NewState);
369 static bool isCallStmt(
const Stmt *S);
379 static bool isVariadic(
const Decl *D);
393 const VarRegion *getParameterLocation(
unsigned Index,
394 unsigned BlockCount)
const;
405 getState(), {getOriginExpr(), Index}, getLocationContext()).hasValue();
414 return ASTArgumentIndex;
421 return CallArgumentIndex;
439 llvm::mapped_iterator<ArrayRef<ParmVarDecl *>::iterator, GetTypeFn>;
447 return llvm::map_iterator(parameters().begin(), GetTypeFn());
451 return llvm::map_iterator(parameters().end(), GetTypeFn());
455 void dump(raw_ostream &Out)
const;
480 bool argumentsMayEscape()
const override;
516 unsigned getNumArgs()
const override {
return getOriginExpr()->getNumArgs(); }
519 return getOriginExpr()->getArg(Index);
543 void getExtraInvalidatedValues(
ValueList &Values,
544 RegionAndSymbolInvalidationTraits *ETraits)
const override;
551 unsigned getNumArgs()
const override {
return getOriginExpr()->getNumArgs(); }
554 return getOriginExpr()->getArg(Index);
560 const BlockDataRegion *getBlockRegion()
const;
563 const BlockDataRegion *BR = getBlockRegion();
566 return BR->getDecl();
580 assert(isConversionFromLambda());
581 const BlockDataRegion *BR = getBlockRegion();
582 assert(BR &&
"Block converted from lambda must have a block region");
584 auto I = BR->referenced_vars_begin();
585 assert(I != BR->referenced_vars_end());
587 return I.getCapturedRegion();
591 if (!isConversionFromLambda())
592 return RuntimeDefinition(getDecl());
613 const VarDecl *LambdaVD = getRegionStoringCapturedLambda()->getDecl();
617 return RuntimeDefinition(LambdaCallOperator);
625 BindingsTy &Bindings)
const override;
648 void getExtraInvalidatedValues(
ValueList &Values,
649 RegionAndSymbolInvalidationTraits *ETraits)
const override;
656 virtual SVal getCXXThisVal()
const;
660 RuntimeDefinition getRuntimeDefinition()
const override;
663 BindingsTy &Bindings)
const override;
687 return cast<CXXMemberCallExpr>(CXXInstanceCall::getOriginExpr());
691 if (
const CallExpr *CE = getOriginExpr())
692 return CE->getNumArgs();
697 return getOriginExpr()->getArg(Index);
700 const Expr *getCXXThisExpr()
const override;
702 RuntimeDefinition getRuntimeDefinition()
const override;
730 return cast<CXXOperatorCallExpr>(CXXInstanceCall::getOriginExpr());
734 return getOriginExpr()->getNumArgs() - 1;
738 return getOriginExpr()->getArg(Index + 1);
741 const Expr *getCXXThisExpr()
const override;
760 return CallArgumentIndex + 1;
772 using DtorDataTy = llvm::PointerIntPair<const MemRegion *, 1, bool>;
782 const MemRegion *Target,
bool IsBaseDestructor,
785 Data =
DtorDataTy(Target, IsBaseDestructor).getOpaqueValue();
797 RuntimeDefinition getRuntimeDefinition()
const override;
800 SVal getCXXThisVal()
const override;
804 return DtorDataTy::getFromOpaqueValue(Data).getInt();
838 void getExtraInvalidatedValues(
ValueList &Values,
839 RegionAndSymbolInvalidationTraits *ETraits)
const override;
847 return getOriginExpr()->getConstructor();
850 unsigned getNumArgs()
const override {
return getOriginExpr()->getNumArgs(); }
853 return getOriginExpr()->getArg(Index);
857 SVal getCXXThisVal()
const;
860 BindingsTy &Bindings)
const override;
889 return getOriginExpr()->getOperatorNew();
896 return getOriginExpr()->passAlignment() ? 2 : 1;
900 return getOriginExpr()->getNumPlacementArgs() + getNumImplicitArgs();
905 if (Index < getNumImplicitArgs())
907 return getOriginExpr()->getPlacementArg(Index - getNumImplicitArgs());
915 return getOriginExpr()->getPlacementArg(Index);
954 void getExtraInvalidatedValues(
ValueList &Values,
955 RegionAndSymbolInvalidationTraits *ETraits)
const override;
967 return getOriginExpr()->getMethodDecl();
971 return getOriginExpr()->getNumArgs();
975 return getOriginExpr()->getArg(Index);
979 return getOriginExpr()->isInstanceMessage();
983 return getOriginExpr()->getMethodFamily();
987 return getOriginExpr()->getSelector();
993 SVal getReceiverSVal()
const;
996 SVal getSelfSVal()
const;
1003 return getOriginExpr()->getReceiverInterface();
1007 bool isReceiverSelfOrSuper()
const;
1016 switch (getMessageKind()) {
1018 llvm_unreachable(
"This is not a pseudo-object access!");
1020 return getNumArgs() > 0;
1022 return getNumArgs() > 1;
1024 llvm_unreachable(
"Unknown message kind");
1032 RuntimeDefinition getRuntimeDefinition()
const override;
1034 bool argumentsMayEscape()
const override;
1037 BindingsTy &Bindings)
const override;
1062 mutable bool IsLookupDone =
false;
1065 std::vector<const char *> QualifiedName;
1074 return RequiredParams;
1076 return static_cast<size_t>(*RequiredArgs);
1094 : QualifiedName(QualifiedName), RequiredArgs(RequiredArgs),
1095 RequiredParams(readRequiredParams(RequiredArgs, RequiredParams)),
1116 std::vector<std::pair<CallDescription, T>> LinearMap;
1120 std::initializer_list<std::pair<CallDescription, T>> &&List)
1121 : LinearMap(List) {}
1133 for (
const std::pair<CallDescription, T> &I : LinearMap)
1134 if (Call.isCalled(I.first))
1151 llvm::BumpPtrAllocator &Alloc;
1154 using CallEventTemplateTy = SimpleFunctionCall;
1156 void reclaim(
const void *Memory) {
1157 Cache.push_back(const_cast<void *>(Memory));
1163 return Alloc.Allocate<CallEventTemplateTy>();
1165 return Cache.pop_back_val();
1168 template <
typename T,
typename Arg>
1170 static_assert(
sizeof(T) ==
sizeof(CallEventTemplateTy),
1171 "CallEvent subclasses are not all the same size");
1172 return new (allocate()) T(A, St, LCtx);
1175 template <
typename T,
typename Arg1,
typename Arg2>
1177 static_assert(
sizeof(T) ==
sizeof(CallEventTemplateTy),
1178 "CallEvent subclasses are not all the same size");
1179 return new (allocate()) T(A1, A2, St, LCtx);
1182 template <
typename T,
typename Arg1,
typename Arg2,
typename Arg3>
1185 static_assert(
sizeof(T) ==
sizeof(CallEventTemplateTy),
1186 "CallEvent subclasses are not all the same size");
1187 return new (allocate()) T(A1, A2, A3, St, LCtx);
1190 template <
typename T,
typename Arg1,
typename Arg2,
typename Arg3,
1194 static_assert(
sizeof(T) ==
sizeof(CallEventTemplateTy),
1195 "CallEvent subclasses are not all the same size");
1196 return new (allocate()) T(A1, A2, A3, A4, St, LCtx);
1216 CallEventRef<ObjCMethodCall>
1219 return create<ObjCMethodCall>(E,
State, LCtx);
1222 CallEventRef<CXXConstructorCall>
1225 return create<CXXConstructorCall>(E, Target,
State, LCtx);
1228 CallEventRef<CXXDestructorCall>
1230 const MemRegion *Target,
bool IsBase,
1232 return create<CXXDestructorCall>(DD, Trigger, Target, IsBase,
State, LCtx);
1235 CallEventRef<CXXAllocatorCall>
1238 return create<CXXAllocatorCall>(E,
State, LCtx);
1242 template <
typename T>
1244 assert(isa<T>(*
this) &&
"Cloning to unrelated type");
1245 static_assert(
sizeof(T) ==
sizeof(
CallEvent),
1246 "Subclasses may not add fields");
1248 if (NewState ==
State)
1249 return cast<T>(
this);
1252 T *Copy =
static_cast<T *
>(Mgr.allocate());
1254 assert(Copy->getKind() == this->
getKind() &&
"Bad copy");
1256 Copy->State = NewState;
1260 inline void CallEvent::Release()
const {
1261 assert(RefCount > 0 &&
"Reference count is already zero.");
1280 template<
class T>
struct simplify_type<
clang::ento::CallEventRef<T>> {
1291 #endif // LLVM_CLANG_STATICANALYZER_CORE_PATHSENSITIVE_CALLEVENT_H A call to an overloaded operator written using operator syntax.
CallEvent(const CallEvent &Original)
Kind getKind() const override
Represents a function declaration or definition.
RuntimeDefinition(const Decl *InD, const MemRegion *InR)
Smart pointer class that efficiently represents Objective-C method names.
A (possibly-)qualified type.
MemRegion - The root abstract class for all memory regions.
CallEventRef< T > cloneWithState(ProgramStateRef NewState) const
Returns a copy of this CallEvent, but using the given state.
const CXXConstructorDecl * getDecl() const override
Specialize PointerLikeTypeTraits to allow LazyGenerationalUpdatePtr to be placed into a PointerUnion...
CXXInstanceCall(const FunctionDecl *D, ProgramStateRef St, const LocationContext *LCtx)
static SimpleType getSimplifiedValue(clang::ento::CallEventRef< T > Val)
TypePropertyCache< Private > Cache
void cloneTo(void *Dest) const override
Stmt - This represents one statement.
Information about invalidation for a particular region/symbol.
SimpleFunctionCall(const CallExpr *CE, ProgramStateRef St, const LocationContext *LCtx)
AnyFunctionCall(const Decl *D, ProgramStateRef St, const LocationContext *LCtx)
static bool classof(const CallEvent *CA)
C Language Family Type Representation.
Defines the SourceManager interface.
void cloneTo(void *Dest) const override
Decl - This represents one declaration (or definition), e.g.
CallDescription(int Flags, ArrayRef< const char *> QualifiedName, Optional< unsigned > RequiredArgs=None, Optional< size_t > RequiredParams=None)
Constructs a CallDescription object.
CXXMemberOperatorCall(const CXXOperatorCallExpr *CE, ProgramStateRef St, const LocationContext *LCtx)
Manages the lifetime of CallEvent objects.
IntrusiveRefCntPtr< const ProgramState > ProgramStateRef
static bool classof(const CallEvent *CA)
StringRef getFunctionName() const
Get the name of the function that this object matches.
ObjCMethodCall(const ObjCMessageExpr *Msg, ProgramStateRef St, const LocationContext *LCtx)
CallEventRef< CXXDestructorCall > getCXXDestructorCall(const CXXDestructorDecl *DD, const Stmt *Trigger, const MemRegion *Target, bool IsBase, ProgramStateRef State, const LocationContext *LCtx)
Represents a call to a C++ constructor.
Represents a C++ constructor within a class.
bool isBaseDestructor() const
Returns true if this is a call to a base class destructor.
const Expr * getOriginExpr() const
Returns the expression whose value will be the result of this call.
llvm::PointerIntPair< const MemRegion *, 1, bool > DtorDataTy
Represents a variable declaration or definition.
static bool classof(const CallEvent *CA)
const T * lookup(const CallEvent &Call) const
SVal getSVal(const Stmt *S) const
Get the value of arbitrary expressions at this point in the path.
static 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, retrieve such object's location.
ObjCMethodDecl - Represents an instance or class method declaration.
static bool classof(const CallEvent *CA)
Represents a C++ overloaded operator call where the operator is implemented as a non-static member fu...
Represents a parameter to a function.
Defines the clang::Expr interface and subclasses for C++ expressions.
unsigned getNumArgs() const override
Returns the number of arguments (explicit and implicit).
One of these records is kept for each identifier that is lexed.
unsigned getNumArgs() const override
param_type_iterator param_type_end() const
ObjCMethodFamily
A family of Objective-C methods.
virtual const CallExpr * getOriginExpr() const
AnalysisDeclContext contains the context data for the function or method under analysis.
const BlockDecl * getDecl() const override
const ObjCInterfaceDecl * getReceiverInterface() const
Get the interface for the receiver.
virtual const Expr * getArgExpr(unsigned Index) const
Returns the expression associated with a given argument.
i32 captured_struct **param SharedsTy A type which contains references the shared variables *param Shareds Context with the list of shared variables from the p *TaskFunction *param Data Additional data for task generation like final * state
bool argumentsMayEscape() const override
static bool classof(const CallEvent *CA)
Represents the memory allocation call in a C++ new-expression.
Kind getKind() const override
virtual const CXXOperatorCallExpr * getOriginExpr() const
This class represents a description of a function call using the number of arguments and the name of ...
Represents any expression that calls an Objective-C method.
static bool classof(const CallEvent *CA)
virtual Kind getKind() const =0
Returns the kind of call this is.
const FunctionDecl * getDecl() const override
static void dump(llvm::raw_ostream &OS, StringRef FunctionName, ArrayRef< CounterExpression > Expressions, ArrayRef< CounterMappingRegion > Regions)
Forward-declares and imports various common LLVM datatypes that clang wants to use unqualified...
bool isSetter() const
Returns true if this property access or subscript is a setter (has the form of an assignment)...
virtual const CXXConstructExpr * getOriginExpr() const
const FunctionDecl * getDecl() const override
Returns the declaration of the function or method that will be called.
param_type_iterator param_type_begin() const
Returns an iterator over the types of the call's formal parameters.
Represents an ObjC class declaration.
BlockCall(const CallExpr *CE, ProgramStateRef St, const LocationContext *LCtx)
Represents a non-static C++ member function call.
RuntimeDefinition getRuntimeDefinition() const override
ObjCMessageKind
Represents the ways an Objective-C message send can occur.
CXXRecordDecl * getAsCXXRecordDecl() const
Retrieves the CXXRecordDecl that this type refers to, either because the type is a RecordType or beca...
const Expr * getPlacementArgExpr(unsigned Index) const
Number of placement arguments to the operator new() call.
Represents a non-static C++ member function call, no matter how it is written.
const LocationContext * getLocationContext() const
The context in which the call is being evaluated.
std::pair< SVal, SVal > FrameBindingTy
CallEventManager(llvm::BumpPtrAllocator &alloc)
Represents a block literal declaration, which is like an unnamed FunctionDecl.
This represents one expression.
const Expr * getArgExpr(unsigned Index) const override
unsigned getNumArgs() const override
bool isInSystemHeader(SourceLocation Loc) const
Returns if a SourceLocation is in a system header.
unsigned getNumArgs() const override
Represents an implicit call to a C++ destructor.
Kind getKind() const override
Represents a C++ destructor within a class.
llvm::mapped_iterator< ArrayRef< ParmVarDecl * >::iterator, GetTypeFn > param_type_iterator
virtual const CXXNewExpr * getOriginExpr() const
Represents a call to any sort of function that might have a FunctionDecl.
bool isInSystemHeader() const
Returns true if the callee is known to be from a system header.
Optional< unsigned > getAdjustedParameterIndex(unsigned ASTArgumentIndex) const override
const IdentifierInfo * getCalleeIdentifier() const
Returns the name of the callee, if its name is a simple identifier.
Kind getKind() const override
Returns the kind of call this is.
virtual const CallExpr * getOriginExpr() const
Defines the clang::IdentifierInfo, clang::IdentifierTable, and clang::Selector interfaces.
virtual const Decl * getDecl() const
Returns the declaration of the function or method that will be called.
Kind getKind() const override
CallEvent(const Decl *D, ProgramStateRef state, const LocationContext *lctx)
An expression that sends a message to the given Objective-C object or class.
virtual const Expr * getCXXThisExpr() const
Returns the expression representing the implicit 'this' object.
CallEventRef< ObjCMethodCall > getObjCMethodCall(const ObjCMessageExpr *E, ProgramStateRef State, const LocationContext *LCtx)
Represents a C function or static C++ member function call.
const VarRegion * getRegionStoringCapturedLambda() const
For a block converted from a C++ lambda, returns the block VarRegion for the variable holding the cap...
unsigned getNumArgs() const override
virtual bool argumentsMayEscape() const
Returns true if any of the arguments are known to escape to long- term storage, even if this method w...
SourceLocation getEndLoc() const LLVM_READONLY
static bool classof(const CallEvent *CA)
const Expr * getArgExpr(unsigned Index) const override
virtual SourceRange getSourceRange() const
Returns a source range for the entire call, suitable for outputting in diagnostics.
void cloneTo(void *Dest) const override
Defines the runtime definition of the called function.
Kind getKind() const override
CXXMemberCall(const CXXMemberCallExpr *CE, ProgramStateRef St, const LocationContext *LCtx)
PseudoObjectExpr - An expression which accesses a pseudo-object l-value.
CallEventRef< CXXAllocatorCall > getCXXAllocatorCall(const CXXNewExpr *E, ProgramStateRef State, const LocationContext *LCtx)
Encodes a location in the source.
const Expr * getArgExpr(unsigned Index) const override
CallEventRef(const T *Call)
ProgramPoints can be "tagged" as representing points specific to a given analysis entity...
Represents a new-expression for memory allocation and constructor calls, e.g: "new CXXNewExpr(foo)"...
CXXAllocatorCall(const CXXNewExpr *E, ProgramStateRef St, const LocationContext *LCtx)
bool isArgumentConstructedDirectly(unsigned Index) const
Returns true if on the current path, the argument was constructed by calling a C++ constructor over i...
Represents a call to a member function that may be written either with member call syntax (e...
Represents a static or instance method of a struct/union/class.
const Expr * getArgExpr(unsigned Index) const override
Returns the expression associated with a given argument.
bool isConversionFromLambda() const
SVal - This represents a symbolic expression, which can be either an L-value or an R-value...
unsigned getNumImplicitArgs() const
Number of non-placement arguments to the call.
virtual Optional< unsigned > getAdjustedParameterIndex(unsigned ASTArgumentIndex) const
Some calls have parameter numbering mismatched from argument numbering.
Represents one property declaration in an Objective-C interface.
unsigned getNumArgs() const override
void cloneTo(void *Dest) const override
void cloneTo(void *Dest) const override
const Expr * getArgExpr(unsigned Index) const override
virtual void getExtraInvalidatedValues(ValueList &Values, RegionAndSymbolInvalidationTraits *ETraits) const
Used to specify non-argument regions that will be invalidated as a result of this call...
const MemRegion * getDispatchRegion()
When other definitions are possible, returns the region whose runtime type determines the method defi...
const ObjCMethodDecl * getDecl() const override
CXXConstructorCall(const CXXConstructExpr *CE, const MemRegion *Target, ProgramStateRef St, const LocationContext *LCtx)
Creates a constructor call.
CallDescriptionMap(std::initializer_list< std::pair< CallDescription, T >> &&List)
void cloneTo(void *Dest) const override
virtual const ObjCMessageExpr * getOriginExpr() const
Selector getSelector() const
Dataflow Directional Tag Classes.
bool isValid() const
Return true if this is a valid SourceLocation object.
CXXMethodDecl * getLambdaCallOperator() const
Retrieve the lambda call operator of the closure type if this is a closure type.
static bool classof(const CallEvent *CA)
bool isConversionFromLambda() const
CallDescription(ArrayRef< const char *> QualifiedName, Optional< unsigned > RequiredArgs=None, Optional< size_t > RequiredParams=None)
Construct a CallDescription with default flags.
static bool classof(const CallEvent *CA)
virtual const CXXMemberCallExpr * getOriginExpr() const
std::unique_ptr< DiagnosticConsumer > create(StringRef OutputFile, DiagnosticOptions *Diags, bool MergeChildRecords=false)
Returns a DiagnosticConsumer that serializes diagnostics to a bitcode file.
Kind getKind() const override
Describes a C standard function that is sometimes implemented as a macro that expands to a compiler b...
RuntimeDefinition(const Decl *InD)
bool mayHaveOtherDefinitions()
Check if the definition we have is precise.
Represents an abstract call to a function or method along a particular path.
SourceRange getSourceRange() const override
bool isInstanceMessage() const
CXXInstanceCall(const CallExpr *CE, ProgramStateRef St, const LocationContext *LCtx)
CallEventRef cloneWithState(ProgramStateRef NewState) const
Returns a copy of this CallEvent, but using the given state.
virtual unsigned getASTArgumentIndex(unsigned CallArgumentIndex) const
Some call event sub-classes conveniently adjust mismatching AST indices to match parameter indices...
ObjCMethodFamily getMethodFamily() const
const Expr * getArgExpr(unsigned Index) const override
unsigned getNumArgs() const override
unsigned getASTArgumentIndex(unsigned CallArgumentIndex) const override
void cloneTo(void *Dest) const override
static bool classof(const CallEvent *CE)
CallEventRef< CXXConstructorCall > getCXXConstructorCall(const CXXConstructExpr *E, const MemRegion *Target, ProgramStateRef State, const LocationContext *LCtx)
Defines the C++ Decl subclasses, other than those for templates (found in DeclTemplate.h) and friends (in DeclFriend.h).
const ProgramStateRef & getState() const
The state in which the call is being evaluated.
const Expr * getArgExpr(unsigned Index) const override
Defines the clang::SourceLocation class and associated facilities.
Represents a C++ struct/union/class.
unsigned getNumArgs() const override
CallEvent(const Expr *E, ProgramStateRef state, const LocationContext *lctx)
CallExpr - Represents a function call (C99 6.5.2.2, C++ [expr.call]).
static Decl::Kind getKind(const Decl *D)
An immutable map from CallDescriptions to arbitrary data.
AnyFunctionCall(const Expr *E, ProgramStateRef St, const LocationContext *LCtx)
A trivial tuple used to represent a source range.
CXXDestructorCall(const CXXDestructorDecl *DD, const Stmt *Trigger, const MemRegion *Target, bool IsBaseDestructor, ProgramStateRef St, const LocationContext *LCtx)
Creates an implicit destructor.
Represents a call to a C++ constructor.
This class handles loading and caching of source files into memory.
void cloneTo(void *Dest) const override
Copies this CallEvent, with vtable intact, into a new block of memory.
SourceLocation getLocation() const
CallEventRef(const CallEventRef &Orig)
Kind getKind() const override
CallEventRef< T > cloneWithState(ProgramStateRef State) const
ArrayRef< SVal > ValueList