UninitialuzedValues now only tracks BlockVarDecls; obviating false positives with
globals and function parameters.
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@42055 91177308-0d34-0410-b5e6-96231b3b80d8
diff --git a/Analysis/DataflowSolver.h b/Analysis/DataflowSolver.h
index de5f9a3..4a089db 100644
--- a/Analysis/DataflowSolver.h
+++ b/Analysis/DataflowSolver.h
@@ -117,7 +117,15 @@
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 @@
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 @@
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(),