]> granicus.if.org Git - clang/commitdiff
Now we do not retrieve untyped regions.
authorZhongxing Xu <xuzhongxing@gmail.com>
Mon, 9 Mar 2009 09:15:51 +0000 (09:15 +0000)
committerZhongxing Xu <xuzhongxing@gmail.com>
Mon, 9 Mar 2009 09:15:51 +0000 (09:15 +0000)
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@66418 91177308-0d34-0410-b5e6-96231b3b80d8

lib/Analysis/RegionStore.cpp

index 9ef3fe84639843bf7b948dae97a7fed9e8b40f3f..433b05d996f3f90347feb31dd821e8dd29b13afc 100644 (file)
@@ -665,7 +665,8 @@ SVal RegionStoreManager::Retrieve(const GRState* St, Loc L, QualType T) {
 
   // 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 MemRegion* R = cast<loc::MemRegionVal>(L).getRegion();
+  const TypedRegion* R 
+    = cast<TypedRegion>(cast<loc::MemRegionVal>(L).getRegion());
   assert(R && "bad region");
 
   // FIXME: We should eventually handle funny addressing.  e.g.:
@@ -677,14 +678,12 @@ SVal RegionStoreManager::Retrieve(const GRState* St, Loc L, QualType T) {
   //
   // Such funny addressing will occur due to layering of regions.
 
-  if (const TypedRegion* TR = dyn_cast<TypedRegion>(R)) {
-    QualType T =TR->getRValueType(getContext());
-    if (T->isStructureType())
-      return RetrieveStruct(St, TR);
-    // FIXME: handle Vector types.
-    if (T->isVectorType())
+  QualType RTy = R->getRValueType(getContext());
+  if (RTy->isStructureType())
+    return RetrieveStruct(St, R);
+  // FIXME: handle Vector types.
+  if (RTy->isVectorType())
       return UnknownVal();
-  }
   
   RegionBindingsTy B = GetRegionBindings(St->getStore());
   RegionBindingsTy::data_type* V = B.lookup(R);