summaryrefslogtreecommitdiffstats
path: root/clang/Analysis/DataflowSolver.h
diff options
context:
space:
mode:
authorTed Kremenek <kremenek@apple.com>2007-09-17 20:49:30 +0000
committerTed Kremenek <kremenek@apple.com>2007-09-17 20:49:30 +0000
commit7e61e81bbfeed1f76c617de51a3b5cc8facd6b5f (patch)
tree0be6d39c68b73d2b22846fafb6ee6c60db6cc5ba /clang/Analysis/DataflowSolver.h
parent712dbe9d139af9655009269bf802a39009cb9bc6 (diff)
downloadbcm5719-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.h14
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(),
OpenPOWER on IntegriCloud