aboutsummaryrefslogtreecommitdiff
path: root/lib/Analysis/UninitializedValues.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'lib/Analysis/UninitializedValues.cpp')
-rw-r--r--lib/Analysis/UninitializedValues.cpp22
1 files changed, 17 insertions, 5 deletions
diff --git a/lib/Analysis/UninitializedValues.cpp b/lib/Analysis/UninitializedValues.cpp
index 5dd4c236aa..ecd9d494f9 100644
--- a/lib/Analysis/UninitializedValues.cpp
+++ b/lib/Analysis/UninitializedValues.cpp
@@ -74,7 +74,22 @@ llvm::Optional<unsigned> DeclToIndex::getValueIndex(const VarDecl *d) {
// CFGBlockValues: dataflow values for CFG blocks.
//====------------------------------------------------------------------------//
-typedef llvm::BitVector ValueVector;
+static const bool Initialized = false;
+static const bool Uninitialized = true;
+
+class ValueVector {
+ llvm::BitVector vec;
+public:
+ ValueVector() {}
+ ValueVector(unsigned size) : vec(size) {}
+ typedef llvm::BitVector::reference reference;
+ void resize(unsigned n) { vec.resize(n); }
+ void merge(const ValueVector &rhs) { vec |= rhs.vec; }
+ bool operator!=(const ValueVector &rhs) const { return vec != rhs.vec; }
+ reference operator[](unsigned idx) { return vec[idx]; }
+ void reset() { vec.reset(); }
+};
+
typedef std::pair<ValueVector *, ValueVector *> BVPair;
namespace {
@@ -189,7 +204,7 @@ void CFGBlockValues::mergeIntoScratch(ValueVector const &source,
if (isFirst)
scratch = source;
else
- scratch |= source;
+ scratch.merge(source);
}
#if 0
static void printVector(const CFGBlock *block, ValueVector &bv,
@@ -286,9 +301,6 @@ const CFGBlock *DataflowWorklist::dequeue() {
// Transfer function for uninitialized values analysis.
//====------------------------------------------------------------------------//
-static const bool Initialized = false;
-static const bool Uninitialized = true;
-
namespace {
class FindVarResult {
const VarDecl *vd;