diff options
Diffstat (limited to 'include')
-rw-r--r-- | include/clang/StaticAnalyzer/Core/PathSensitive/Calls.h | 33 |
1 files changed, 32 insertions, 1 deletions
diff --git a/include/clang/StaticAnalyzer/Core/PathSensitive/Calls.h b/include/clang/StaticAnalyzer/Core/PathSensitive/Calls.h index 0d830c3ce9..e1d30e42c2 100644 --- a/include/clang/StaticAnalyzer/Core/PathSensitive/Calls.h +++ b/include/clang/StaticAnalyzer/Core/PathSensitive/Calls.h @@ -37,6 +37,7 @@ enum CallEventKind { CE_BEG_SIMPLE_CALLS = CE_Function, CE_END_SIMPLE_CALLS = CE_Block, CE_CXXConstructor, + CE_CXXDestructor, CE_CXXAllocator, CE_BEG_FUNCTION_CALLS = CE_Function, CE_END_FUNCTION_CALLS = CE_CXXAllocator, @@ -159,7 +160,7 @@ public: } /// \brief Returns an appropriate ProgramPoint for this call. - ProgramPoint getProgramPoint(bool IsPreVisit, + ProgramPoint getProgramPoint(bool IsPreVisit = false, const ProgramPointTag *Tag = 0) const; /// \brief Returns a new state with all argument regions invalidated. @@ -391,6 +392,36 @@ public: } }; +/// \brief Represents an implicit call to a C++ destructor. +/// +/// This can occur at the end of a scope (for automatic objects), at the end +/// of a full-expression (for temporaries), or as part of a delete. +class CXXDestructorCall : public AnyFunctionCall { + const CXXDestructorDecl *DD; + const MemRegion *Target; + SourceLocation Loc; + +protected: + void addExtraInvalidatedRegions(RegionList &Regions) const; + +public: + CXXDestructorCall(const CXXDestructorDecl *dd, const Stmt *Trigger, + const MemRegion *target, ProgramStateRef St, + const LocationContext *LCtx) + : AnyFunctionCall(St, LCtx, CE_CXXDestructor), DD(dd), Target(target), + Loc(Trigger->getLocEnd()) {} + + const Expr *getOriginExpr() const { return 0; } + SourceRange getSourceRange() const { return Loc; } + + const CXXDestructorDecl *getDecl() const { return DD; } + unsigned getNumArgs() const { return 0; } + + static bool classof(const CallEvent *CA) { + return CA->getKind() == CE_CXXDestructor; + } +}; + /// \brief Represents the memory allocation call in a C++ new-expression. /// /// This is a call to "operator new". |