aboutsummaryrefslogtreecommitdiff
path: root/lib/StaticAnalyzer/Core/RegionStore.cpp
diff options
context:
space:
mode:
authorJordan Rose <jordan_rose@apple.com>2013-02-20 00:27:26 +0000
committerJordan Rose <jordan_rose@apple.com>2013-02-20 00:27:26 +0000
commit206f49966f66ad7cbfe3d37c14fa7e6e7410f3be (patch)
tree360ee9d59ea7408a0aa758ffa637df1b30300c83 /lib/StaticAnalyzer/Core/RegionStore.cpp
parent053214013990ad8ec096dafc64aa7c0ad2b05bc0 (diff)
[analyzer] Account for the "interesting values" hash table resizing.
RegionStoreManager::getInterestingValues() returns a pointer to a std::vector that lives inside a DenseMap, which is constructed on demand. However, constructing one such value can lead to constructing another value, which will invalidate the reference created earlier. Fixed by delaying the new entry creation until the function returns. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@175582 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib/StaticAnalyzer/Core/RegionStore.cpp')
-rw-r--r--lib/StaticAnalyzer/Core/RegionStore.cpp6
1 files changed, 3 insertions, 3 deletions
diff --git a/lib/StaticAnalyzer/Core/RegionStore.cpp b/lib/StaticAnalyzer/Core/RegionStore.cpp
index f75ab0280b..4d9a313a02 100644
--- a/lib/StaticAnalyzer/Core/RegionStore.cpp
+++ b/lib/StaticAnalyzer/Core/RegionStore.cpp
@@ -1629,7 +1629,7 @@ RegionStoreManager::getInterestingValues(nonloc::LazyCompoundVal LCV) {
return I->second;
// If we don't have a list of values cached, start constructing it.
- SValListTy &List = LazyBindingsMap[LCV.getCVData()];
+ SValListTy List;
const SubRegion *LazyR = LCV.getRegion();
RegionBindingsRef B = getRegionBindings(LCV.getStore());
@@ -1638,7 +1638,7 @@ RegionStoreManager::getInterestingValues(nonloc::LazyCompoundVal LCV) {
// values to return.
const ClusterBindings *Cluster = B.lookup(LazyR->getBaseRegion());
if (!Cluster)
- return List;
+ return (LazyBindingsMap[LCV.getCVData()] = llvm_move(List));
SmallVector<BindingKey, 32> Keys;
collectSubRegionKeys(Keys, svalBuilder, *Cluster, LazyR,
@@ -1661,7 +1661,7 @@ RegionStoreManager::getInterestingValues(nonloc::LazyCompoundVal LCV) {
List.push_back(V);
}
- return List;
+ return (LazyBindingsMap[LCV.getCVData()] = llvm_move(List));
}
NonLoc RegionStoreManager::createLazyBinding(RegionBindingsConstRef B,