diff options
Diffstat (limited to 'lib/StaticAnalyzer/Core/MemRegion.cpp')
-rw-r--r-- | lib/StaticAnalyzer/Core/MemRegion.cpp | 15 |
1 files changed, 8 insertions, 7 deletions
diff --git a/lib/StaticAnalyzer/Core/MemRegion.cpp b/lib/StaticAnalyzer/Core/MemRegion.cpp index 76cead6..1fa6754 100644 --- a/lib/StaticAnalyzer/Core/MemRegion.cpp +++ b/lib/StaticAnalyzer/Core/MemRegion.cpp @@ -1372,10 +1372,11 @@ void BlockDataRegion::LazyInitializeReferencedVars() { return; AnalysisDeclContext *AC = getCodeRegion()->getAnalysisDeclContext(); - AnalysisDeclContext::referenced_decls_iterator I, E; - std::tie(I, E) = AC->getReferencedBlockVars(BC->getDecl()); + const auto &ReferencedBlockVars = AC->getReferencedBlockVars(BC->getDecl()); + auto NumBlockVars = + std::distance(ReferencedBlockVars.begin(), ReferencedBlockVars.end()); - if (I == E) { + if (NumBlockVars == 0) { ReferencedVars = (void*) 0x1; return; } @@ -1386,14 +1387,14 @@ void BlockDataRegion::LazyInitializeReferencedVars() { typedef BumpVector<const MemRegion*> VarVec; VarVec *BV = (VarVec*) A.Allocate<VarVec>(); - new (BV) VarVec(BC, E - I); + new (BV) VarVec(BC, NumBlockVars); VarVec *BVOriginal = (VarVec*) A.Allocate<VarVec>(); - new (BVOriginal) VarVec(BC, E - I); + new (BVOriginal) VarVec(BC, NumBlockVars); - for ( ; I != E; ++I) { + for (const VarDecl *VD : ReferencedBlockVars) { const VarRegion *VR = nullptr; const VarRegion *OriginalVR = nullptr; - std::tie(VR, OriginalVR) = getCaptureRegions(*I); + std::tie(VR, OriginalVR) = getCaptureRegions(VD); assert(VR); assert(OriginalVR); BV->push_back(VR, BC); |