diff options
Diffstat (limited to 'lib/Analysis/UninitializedValues.cpp')
-rw-r--r-- | lib/Analysis/UninitializedValues.cpp | 16 |
1 files changed, 13 insertions, 3 deletions
diff --git a/lib/Analysis/UninitializedValues.cpp b/lib/Analysis/UninitializedValues.cpp index 6e7e915c47..f3cf905af2 100644 --- a/lib/Analysis/UninitializedValues.cpp +++ b/lib/Analysis/UninitializedValues.cpp @@ -51,7 +51,7 @@ public: unsigned size() const { return map.size(); } /// Returns the bit vector index for a given declaration. - llvm::Optional<unsigned> getValueIndex(const VarDecl *d); + llvm::Optional<unsigned> getValueIndex(const VarDecl *d) const; }; } @@ -66,8 +66,8 @@ void DeclToIndex::computeMap(const DeclContext &dc) { } } -llvm::Optional<unsigned> DeclToIndex::getValueIndex(const VarDecl *d) { - llvm::DenseMap<const VarDecl *, unsigned>::iterator I = map.find(d); +llvm::Optional<unsigned> DeclToIndex::getValueIndex(const VarDecl *d) const { + llvm::DenseMap<const VarDecl *, unsigned>::const_iterator I = map.find(d); if (I == map.end()) return llvm::Optional<unsigned>(); return I->second; @@ -152,6 +152,10 @@ public: return declToIndex.size() == 0; } + bool hasEntry(const VarDecl *vd) const { + return declToIndex.getValueIndex(vd).hasValue(); + } + void resetScratch(); ValueVector &getScratch() { return scratch; } @@ -379,7 +383,13 @@ public: void BlockStmt_VisitObjCForCollectionStmt(ObjCForCollectionStmt *fs); bool isTrackedVar(const VarDecl *vd) { +#if 1 + // FIXME: This is a temporary workaround to deal with the fact + // that DeclContext's do not always contain all of their variables! + return vals.hasEntry(vd); +#else return ::isTrackedVar(vd, cast<DeclContext>(ac.getDecl())); +#endif } FindVarResult findBlockVarDecl(Expr *ex); |