]> granicus.if.org Git - clang/commitdiff
Fix PR 2819: Compute dataflow values for all CFG blocks by not relying on having...
authorTed Kremenek <kremenek@apple.com>
Tue, 23 Sep 2008 18:02:10 +0000 (18:02 +0000)
committerTed Kremenek <kremenek@apple.com>
Tue, 23 Sep 2008 18:02:10 +0000 (18:02 +0000)
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@56492 91177308-0d34-0410-b5e6-96231b3b80d8

include/clang/Analysis/FlowSensitive/DataflowSolver.h

index 169417c3d2b51df0430782753c4a18cbeb69369b..0ed4c8667f16ffdb5e6fe5e1832bd97367f5ea7a 100644 (file)
@@ -187,7 +187,10 @@ private:
   /// SolveDataflowEquations - Perform the actual worklist algorithm
   ///  to compute dataflow values.
   void SolveDataflowEquations(CFG& cfg, bool recordStmtValues) {
-    EnqueueFirstBlock(cfg,AnalysisDirTag());
+    // Enqueue all blocks to ensure the dataflow values are computed
+    // for every block.  Not all blocks are guaranteed to reach the exit block.
+    for (CFG::iterator I=cfg.begin(), E=cfg.end(); I!=E; ++I)
+      WorkList.enqueue(&*I);
     
     while (!WorkList.isEmpty()) {
       const CFGBlock* B = WorkList.dequeue();
@@ -195,14 +198,6 @@ private:
       ProcessBlock(B, recordStmtValues, AnalysisDirTag());
       UpdateEdges(cfg,B,TF.getVal());
     }
-  }
-  
-  void EnqueueFirstBlock(const CFG& cfg, dataflow::forward_analysis_tag) {
-    WorkList.enqueue(&cfg.getEntry());
-  }
-  
-  void EnqueueFirstBlock(const CFG& cfg, dataflow::backward_analysis_tag) {
-    WorkList.enqueue(&cfg.getExit());
   }  
   
   void ResetValues(CFG& cfg, ValTy& V, const CFGBlock* B,