summaryrefslogtreecommitdiffstats
path: root/clang/lib/Analysis/BasicStore.cpp
diff options
context:
space:
mode:
authorTed Kremenek <kremenek@apple.com>2009-08-25 20:51:30 +0000
committerTed Kremenek <kremenek@apple.com>2009-08-25 20:51:30 +0000
commit3ed9543ace0547681d018a4cbbe9c62fc0524e17 (patch)
tree8b2c03c60274f5397b68e258d317e4c2480e6e39 /clang/lib/Analysis/BasicStore.cpp
parent6d9d5a9c9477cba8825e571c3c86c77bfc2ea8d6 (diff)
downloadbcm5719-llvm-3ed9543ace0547681d018a4cbbe9c62fc0524e17.tar.gz
bcm5719-llvm-3ed9543ace0547681d018a4cbbe9c62fc0524e17.zip
Fix crash reported in <rdar://problem/7124210> by "back-porting" some of the
implicit cast logic in RegionStoreManager to BasicStoreManager. This involved moving CastRetriedVal from RegionStoreManager to StoreManager. llvm-svn: 80026
Diffstat (limited to 'clang/lib/Analysis/BasicStore.cpp')
-rw-r--r--clang/lib/Analysis/BasicStore.cpp10
1 files changed, 7 insertions, 3 deletions
diff --git a/clang/lib/Analysis/BasicStore.cpp b/clang/lib/Analysis/BasicStore.cpp
index cb2af0f537c..e2113396581 100644
--- a/clang/lib/Analysis/BasicStore.cpp
+++ b/clang/lib/Analysis/BasicStore.cpp
@@ -271,7 +271,7 @@ SValuator::CastResult BasicStoreManager::Retrieve(const GRState *state,
if (isa<UnknownVal>(loc))
return SValuator::CastResult(state, UnknownVal());
- assert (!isa<UndefinedVal>(loc));
+ assert(!isa<UndefinedVal>(loc));
switch (loc.getSubKind()) {
@@ -296,8 +296,12 @@ SValuator::CastResult BasicStoreManager::Retrieve(const GRState *state,
return SValuator::CastResult(state, UnknownVal());
BindingsTy B = GetBindings(state->getStore());
- BindingsTy::data_type* T = B.lookup(R);
- return SValuator::CastResult(state, T ? *T : UnknownVal());
+ BindingsTy::data_type *Val = B.lookup(R);
+
+ if (!Val)
+ break;
+
+ return CastRetrievedVal(*Val, state, cast<TypedRegion>(R), T);
}
case loc::ConcreteIntKind:
OpenPOWER on IntegriCloud