diff options
author | Ted Kremenek <kremenek@apple.com> | 2009-08-25 20:51:30 +0000 |
---|---|---|
committer | Ted Kremenek <kremenek@apple.com> | 2009-08-25 20:51:30 +0000 |
commit | 1894dce96476dbe58c0e60d47f8987cbeb3d3869 (patch) | |
tree | 1968e5508a01c66260a9e35563bb1d96ae2aa379 /lib/Analysis/BasicStore.cpp | |
parent | 78ca7b3d34dda4ef584eb897985698ea062d07e1 (diff) |
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.
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@80026 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib/Analysis/BasicStore.cpp')
-rw-r--r-- | lib/Analysis/BasicStore.cpp | 10 |
1 files changed, 7 insertions, 3 deletions
diff --git a/lib/Analysis/BasicStore.cpp b/lib/Analysis/BasicStore.cpp index cb2af0f537..e211339658 100644 --- a/lib/Analysis/BasicStore.cpp +++ b/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: |