diff options
Diffstat (limited to 'include/clang/StaticAnalyzer')
-rw-r--r-- | include/clang/StaticAnalyzer/Core/CheckerManager.h | 18 | ||||
-rw-r--r-- | include/clang/StaticAnalyzer/Core/PathSensitive/CallEvent.h | 24 |
2 files changed, 36 insertions, 6 deletions
diff --git a/include/clang/StaticAnalyzer/Core/CheckerManager.h b/include/clang/StaticAnalyzer/Core/CheckerManager.h index 7e1b07a584..aef9e71297 100644 --- a/include/clang/StaticAnalyzer/Core/CheckerManager.h +++ b/include/clang/StaticAnalyzer/Core/CheckerManager.h @@ -211,15 +211,18 @@ public: void runCheckersForPostObjCMessage(ExplodedNodeSet &Dst, const ExplodedNodeSet &Src, const ObjCMethodCall &msg, - ExprEngine &Eng) { - runCheckersForObjCMessage(/*isPreVisit=*/false, Dst, Src, msg, Eng); + ExprEngine &Eng, + bool wasInlined = false) { + runCheckersForObjCMessage(/*isPreVisit=*/false, Dst, Src, msg, Eng, + wasInlined); } /// \brief Run checkers for visiting obj-c messages. void runCheckersForObjCMessage(bool isPreVisit, ExplodedNodeSet &Dst, const ExplodedNodeSet &Src, - const ObjCMethodCall &msg, ExprEngine &Eng); + const ObjCMethodCall &msg, ExprEngine &Eng, + bool wasInlined = false); /// \brief Run checkers for pre-visiting obj-c messages. void runCheckersForPreCall(ExplodedNodeSet &Dst, const ExplodedNodeSet &Src, @@ -229,14 +232,17 @@ public: /// \brief Run checkers for post-visiting obj-c messages. void runCheckersForPostCall(ExplodedNodeSet &Dst, const ExplodedNodeSet &Src, - const CallEvent &Call, ExprEngine &Eng) { - runCheckersForCallEvent(/*isPreVisit=*/false, Dst, Src, Call, Eng); + const CallEvent &Call, ExprEngine &Eng, + bool wasInlined = false) { + runCheckersForCallEvent(/*isPreVisit=*/false, Dst, Src, Call, Eng, + wasInlined); } /// \brief Run checkers for visiting obj-c messages. void runCheckersForCallEvent(bool isPreVisit, ExplodedNodeSet &Dst, const ExplodedNodeSet &Src, - const CallEvent &Call, ExprEngine &Eng); + const CallEvent &Call, ExprEngine &Eng, + bool wasInlined = false); /// \brief Run checkers for load/store of a location. void runCheckersForLocation(ExplodedNodeSet &Dst, diff --git a/include/clang/StaticAnalyzer/Core/PathSensitive/CallEvent.h b/include/clang/StaticAnalyzer/Core/PathSensitive/CallEvent.h index 74ac253d99..bc9320f283 100644 --- a/include/clang/StaticAnalyzer/Core/PathSensitive/CallEvent.h +++ b/include/clang/StaticAnalyzer/Core/PathSensitive/CallEvent.h @@ -59,6 +59,13 @@ public: CallEventRef<T> cloneWithState(ProgramStateRef State) const { return this->getPtr()->template cloneWithState<T>(State); } + + // Allow implicit conversions to a superclass type, since CallEventRef + // behaves like a pointer-to-const. + template <typename SuperT> + operator CallEventRef<SuperT> () const { + return this->getPtr(); + } }; /// \brief Represents an abstract call to a function or method along a @@ -807,6 +814,11 @@ class CallEventManager { public: CallEventManager(llvm::BumpPtrAllocator &alloc) : Alloc(alloc) {} + + CallEventRef<> + getCaller(const StackFrameContext *CalleeCtx, ProgramStateRef State); + + CallEventRef<SimpleCall> getSimpleCall(const CallExpr *E, ProgramStateRef State, const LocationContext *LCtx); @@ -871,4 +883,16 @@ inline void CallEvent::Release() const { } // end namespace ento } // end namespace clang +namespace llvm { + // Support isa<>, cast<>, and dyn_cast<> for CallEventRef. + template<class T> struct simplify_type< clang::ento::CallEventRef<T> > { + typedef const T *SimpleType; + + static SimpleType + getSimplifiedValue(const clang::ento::CallEventRef<T>& Val) { + return Val.getPtr(); + } + }; +} + #endif |