diff options
author | Ted Kremenek <kremenek@apple.com> | 2009-08-25 22:55:09 +0000 |
---|---|---|
committer | Ted Kremenek <kremenek@apple.com> | 2009-08-25 22:55:09 +0000 |
commit | bcf62a9f5b9baf4b02fce08144465e6b306af543 (patch) | |
tree | 1495c989228c53d7982e6912fbb83feebc0aaa65 /lib/Analysis/RegionStore.cpp | |
parent | bc047ba73376ac6ef78b3fba0efb8493f7843138 (diff) |
Handle pointer arithmetic in RegionStoreManager involving Objective-C pointers
when using the non-fragile Objective-C ABI. This fixes <rdar://problem/7168531>.
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@80047 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib/Analysis/RegionStore.cpp')
-rw-r--r-- | lib/Analysis/RegionStore.cpp | 10 |
1 files changed, 8 insertions, 2 deletions
diff --git a/lib/Analysis/RegionStore.cpp b/lib/Analysis/RegionStore.cpp index 9225bfbaae..4c8610734e 100644 --- a/lib/Analysis/RegionStore.cpp +++ b/lib/Analysis/RegionStore.cpp @@ -750,8 +750,14 @@ SVal RegionStoreManager::EvalBinOp(const GRState *state, case MemRegion::SymbolicRegionKind: { const SymbolicRegion *SR = cast<SymbolicRegion>(MR); SymbolRef Sym = SR->getSymbol(); - QualType T = Sym->getType(getContext()); - QualType EleTy = T->getAs<PointerType>()->getPointeeType(); + QualType T = Sym->getType(getContext()); + QualType EleTy; + + if (const PointerType *PT = T->getAs<PointerType>()) + EleTy = PT->getPointeeType(); + else + EleTy = T->getAsObjCObjectPointerType()->getPointeeType(); + SVal ZeroIdx = ValMgr.makeZeroArrayIndex(); ER = MRMgr.getElementRegion(EleTy, ZeroIdx, SR, getContext()); break; |