diff options
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 577ace306b..4e83720f9f 100644 --- a/lib/Analysis/RegionStore.cpp +++ b/lib/Analysis/RegionStore.cpp @@ -799,9 +799,15 @@ SVal RegionStoreManager::Retrieve(const GRState *state, Loc L, QualType T) { // char* p = alloca(); // read(p); // c = *p; - if (isa<SymbolicRegion>(MR) || isa<AllocaRegion>(MR)) + if (isa<AllocaRegion>(MR)) return UnknownVal(); - + + if (isa<SymbolicRegion>(MR)) { + ASTContext &Ctx = getContext(); + SVal idx = ValMgr.makeIntVal(0, Ctx.IntTy); + MR = MRMgr.getElementRegion(T, idx, MR, Ctx); + } + // FIXME: Perhaps this method should just take a 'const MemRegion*' argument // instead of 'Loc', and have the other Loc cases handled at a higher level. const TypedRegion *R = cast<TypedRegion>(MR); |