diff options
| author | Ted Kremenek <kremenek@apple.com> | 2007-09-17 20:49:30 +0000 |
|---|---|---|
| committer | Ted Kremenek <kremenek@apple.com> | 2007-09-17 20:49:30 +0000 |
| commit | 7e61e81bbfeed1f76c617de51a3b5cc8facd6b5f (patch) | |
| tree | 0be6d39c68b73d2b22846fafb6ee6c60db6cc5ba /clang/Analysis/DataflowSolver.h | |
| parent | 712dbe9d139af9655009269bf802a39009cb9bc6 (diff) | |
| download | bcm5719-llvm-7e61e81bbfeed1f76c617de51a3b5cc8facd6b5f.tar.gz bcm5719-llvm-7e61e81bbfeed1f76c617de51a3b5cc8facd6b5f.zip | |
UninitialuzedValues now only tracks BlockVarDecls; obviating false positives with
globals and function parameters.
llvm-svn: 42055
Diffstat (limited to 'clang/Analysis/DataflowSolver.h')
| -rw-r--r-- | clang/Analysis/DataflowSolver.h | 14 |
1 files changed, 11 insertions, 3 deletions
diff --git a/clang/Analysis/DataflowSolver.h b/clang/Analysis/DataflowSolver.h index de5f9a3dddd..4a089dbcdc6 100644 --- a/clang/Analysis/DataflowSolver.h +++ b/clang/Analysis/DataflowSolver.h @@ -117,7 +117,15 @@ private: for (CFGBlock::const_succ_iterator I=B->succ_begin(), E=B->succ_end(); I != E; ++I) WorkList.enqueue(*I); - } + } + + // For blocks that have no associated dataflow value, instantiate a + // default value. + BlockDataMapTy& M = D.getBlockDataMap(); + + for (CFG::const_iterator I=cfg.begin(), E=cfg.end(); I!=E; ++I) + if (M.find(&*I) == M.end()) + M[&*I].resetValues(D.getAnalysisData()); } /// SolveDataflowEquations (BACKWARD ANALYSIS) - Perform the actual @@ -153,7 +161,7 @@ private: ValTy& V = TF.getVal(); // Merge dataflow values from all predecessors of this block. - V.resetValues(); + V.resetValues(D.getAnalysisData()); MergeOperatorTy Merge; for (CFGBlock::const_pred_iterator I=B->pred_begin(), @@ -175,7 +183,7 @@ private: ValTy& V = TF.getVal(); // Merge dataflow values from all predecessors of this block. - V.resetValues(); + V.resetValues(D.getAnalysisData()); MergeOperatorTy Merge; for (CFGBlock::const_succ_iterator I=B->succ_begin(), |

