]> granicus.if.org Git - clang/commitdiff
Enable the GRStateManager to do something when we finish a path. For example,
authorZhongxing Xu <xuzhongxing@gmail.com>
Fri, 28 Nov 2008 03:07:05 +0000 (03:07 +0000)
committerZhongxing Xu <xuzhongxing@gmail.com>
Fri, 28 Nov 2008 03:07:05 +0000 (03:07 +0000)
the ConstraintManager can print its internal state before its solver instance is
destroyed.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@60204 91177308-0d34-0410-b5e6-96231b3b80d8

include/clang/Analysis/PathSensitive/ConstraintManager.h
include/clang/Analysis/PathSensitive/GRExprEngine.h
include/clang/Analysis/PathSensitive/GRState.h

index 3f2e60d3ef9bea1728a6f6d59ee8a8ae0f659a8c..54cdecbf212fdbb426238033d3667394cc9801f8 100644 (file)
@@ -51,6 +51,8 @@ public:
 
   virtual void print(const GRState* St, std::ostream& Out, 
                      const char* nl, const char *sep) = 0;
+
+  virtual void EndPath(const GRState* St) {}
 };
 
 ConstraintManager* CreateBasicConstraintManager(GRStateManager& statemgr);
index 17be0370dece5d3501ce5a1d3bb2c0d77e46508a..6b9dc0367950e84aba20d30b6454e6dcfd0b3b19 100644 (file)
@@ -414,6 +414,7 @@ public:
   ///  nodes when the control reaches the end of a function.
   void ProcessEndPath(EndPathNodeBuilder& builder) {
     getTF().EvalEndPath(*this, builder);
+    StateMgr.EndPath(builder.getState());
   }
   
   GRStateManager& getStateManager() { return StateMgr; }
index c3ef35b460de2baf9808c0940d215a6d5549bf4b..b1e866c67c884e0b57becf58fd3021924d34ea9d 100644 (file)
@@ -536,6 +536,10 @@ public:
   const llvm::APSInt* getSymVal(const GRState* St, SymbolID sym) {
     return ConstraintMgr->getSymVal(St, sym);
   }
+
+  void EndPath(const GRState* St) {
+    ConstraintMgr->EndPath(St);
+  }
 };
   
 //===----------------------------------------------------------------------===//