]> granicus.if.org Git - clang/commitdiff
Changed DataflowSolver to always associated recorded dataflow values with
authorTed Kremenek <kremenek@apple.com>
Fri, 18 Jan 2008 00:38:55 +0000 (00:38 +0000)
committerTed Kremenek <kremenek@apple.com>
Fri, 18 Jan 2008 00:38:55 +0000 (00:38 +0000)
the position *before* a statement, regardless of whether we are doing a
forward or backwards analysis.

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

include/clang/Analysis/FlowSensitive/DataflowSolver.h

index 24ef6bb0baff593e1302e45e4b11535bca646037..15f7107f26c88a89e4d25602105a896ca8e82d62 100644 (file)
@@ -235,10 +235,18 @@ private:
 
   /// ProcessBlock - Process the transfer functions for a given block.
   void ProcessBlock(const CFGBlock* B, bool recordStmtValues) {
-    for (StmtItr I=ItrTraits::StmtBegin(B), E=ItrTraits::StmtEnd(B); I!=E;++I) {
-      if (recordStmtValues) D.getStmtDataMap()[*I] = TF.getVal();
-      TF.BlockStmt_Visit(const_cast<Stmt*>(*I));
-    }      
+    for (StmtItr I=ItrTraits::StmtBegin(B), E=ItrTraits::StmtEnd(B); I!=E;++I)
+      ProcessStmt(*I, recordStmtValues, AnalysisDirTag());
+  }
+  
+  void ProcessStmt(const Stmt* S, bool record, dataflow::forward_analysis_tag) {
+    if (record) D.getStmtDataMap()[S] = TF.getVal();
+    TF.BlockStmt_Visit(const_cast<Stmt*>(S));  
+  }
+  
+  void ProcessStmt(const Stmt* S, bool record, dataflow::backward_analysis_tag){
+    TF.BlockStmt_Visit(const_cast<Stmt*>(S));
+    if (record) D.getStmtDataMap()[S] = TF.getVal();
   }
 
   /// UpdateEdges - After processing the transfer functions for a