diff options
Diffstat (limited to 'lib/Analysis/RegionStore.cpp')
-rw-r--r-- | lib/Analysis/RegionStore.cpp | 12 |
1 files changed, 10 insertions, 2 deletions
diff --git a/lib/Analysis/RegionStore.cpp b/lib/Analysis/RegionStore.cpp index bd3dd0911d..5c75ab369e 100644 --- a/lib/Analysis/RegionStore.cpp +++ b/lib/Analysis/RegionStore.cpp @@ -181,10 +181,18 @@ SVal RegionStoreManager::getLValueElement(const GRState* St, SVal RegionStoreManager::ArrayToPointer(SVal Array) { const MemRegion* ArrayR = cast<loc::MemRegionVal>(&Array)->getRegion(); - const VarDecl* D = cast<VarRegion>(ArrayR)->getDecl(); + const Decl* D = cast<DeclRegion>(ArrayR)->getDecl(); + + QualType ArrayTy; + if (const VarDecl* VD = dyn_cast<VarDecl>(D)) + ArrayTy = VD->getType(); + else if (const FieldDecl* FD = dyn_cast<FieldDecl>(D)) + ArrayTy = FD->getType(); + else + assert(0 && "unknown decl"); if (const ConstantArrayType* CAT = - dyn_cast<ConstantArrayType>(D->getType().getTypePtr())) { + dyn_cast<ConstantArrayType>(ArrayTy.getTypePtr())) { BasicValueFactory& BasicVals = StateMgr.getBasicVals(); |