diff options
Diffstat (limited to 'lib/Analysis/Store.cpp')
-rw-r--r-- | lib/Analysis/Store.cpp | 9 |
1 files changed, 8 insertions, 1 deletions
diff --git a/lib/Analysis/Store.cpp b/lib/Analysis/Store.cpp index 7101b34477..50d0767f61 100644 --- a/lib/Analysis/Store.cpp +++ b/lib/Analysis/Store.cpp @@ -235,7 +235,14 @@ const GRState *StoreManager::InvalidateRegion(const GRState *state, const TypedRegion *TR = cast<TypedRegion>(R); - QualType T = TR->getValueType(Ctx); + QualType T; + + // If the region is cast to another type, use that type. + if (const QualType *CastTy = getCastType(state, R)) { + assert(!(*CastTy)->isObjCObjectPointerType()); + T = (*CastTy)->getAsPointerType()->getPointeeType(); + } else + T = TR->getValueType(Ctx); if (Loc::IsLocType(T) || (T->isIntegerType() && T->isScalarType())) { SVal V = ValMgr.getConjuredSymbolVal(E, T, Count); |