]> granicus.if.org Git - clang/commitdiff
Replace guarded calls in RegionStoreManager to
authorTed Kremenek <kremenek@apple.com>
Thu, 2 Jul 2009 22:16:42 +0000 (22:16 +0000)
committerTed Kremenek <kremenek@apple.com>
Thu, 2 Jul 2009 22:16:42 +0000 (22:16 +0000)
ValueManager::getRegionValueSymbolVal() with unguarded calls to
ValueManager::getRegionValueSymbolValOrUnknown(). This changes centralizes the
decision of what values to symbolicate in SymbolManager rather than having it
scatter in RegionStoreManager.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@74730 91177308-0d34-0410-b5e6-96231b3b80d8

include/clang/Analysis/PathSensitive/ValueManager.h
lib/Analysis/RegionStore.cpp

index fdb5be8a0033b69ec03c7e4d8abc02cf8a8abf79..886567039cf954b29d5edb571ee9f8e6b27b3df8 100644 (file)
@@ -74,8 +74,13 @@ public:
   /// makeZeroVal - Construct an SVal representing '0' for the specified type.
   SVal makeZeroVal(QualType T);
 
-  /// GetRegionValueSymbolVal - make a unique symbol for value of R.
-  SVal getRegionValueSymbolVal(const MemRegion* R, QualType T = QualType());
+  /// getRegionValueSymbolVal - make a unique symbol for value of R.
+  SVal getRegionValueSymbolVal(const MemRegion *R, QualType T = QualType());
+  
+  SVal getRegionValueSymbolValOrUnknown(const MemRegion *R, QualType T) {
+    return SymMgr.canSymbolicate(T) ? getRegionValueSymbolVal(R, T) 
+                                    : UnknownVal();    
+  }
   
   SVal getConjuredSymbolVal(const Expr *E, unsigned Count);  
   SVal getConjuredSymbolVal(const Expr* E, QualType T, unsigned Count);
index 5729103fd3ac31c5a69503c82815481cfc0fc075..7351d9fd4ad67c494596a29c6d1a51f02b845794 100644 (file)
@@ -882,13 +882,8 @@ SVal RegionStoreManager::Retrieve(const GRState *state, Loc L, QualType T) {
     if (VD == SelfDecl)
       return loc::MemRegionVal(getSelfRegion(0));
     
-    if (VR->hasGlobalsOrParametersStorage()) {
-      QualType VTy = VD->getType();
-      if (Loc::IsLocType(VTy) || VTy->isIntegerType())
-        return ValMgr.getRegionValueSymbolVal(VR);
-      else
-        return UnknownVal();
-    }
+    if (VR->hasGlobalsOrParametersStorage())
+      return ValMgr.getRegionValueSymbolValOrUnknown(VR, VD->getType());
   }  
 
   if (R->hasHeapOrStackStorage()) {
@@ -906,11 +901,8 @@ SVal RegionStoreManager::Retrieve(const GRState *state, Loc L, QualType T) {
     RTy = T->getAsPointerType()->getPointeeType();
   }
 
-  // All other integer values are symbolic.
-  if (Loc::IsLocType(RTy) || RTy->isIntegerType())
-    return ValMgr.getRegionValueSymbolVal(R, RTy);
-  else
-    return UnknownVal();
+  // All other values are symbolic.
+  return ValMgr.getRegionValueSymbolValOrUnknown(R, RTy);
 }
 
 SVal RegionStoreManager::RetrieveElement(const GRState* state,
@@ -977,10 +969,7 @@ SVal RegionStoreManager::RetrieveElement(const GRState* state,
   if (const QualType *p = state->get<RegionCasts>(R))
     Ty = (*p)->getAsPointerType()->getPointeeType();
 
-  if (Loc::IsLocType(Ty) || Ty->isIntegerType())
-    return ValMgr.getRegionValueSymbolVal(R, Ty);
-  else
-    return UnknownVal();
+  return ValMgr.getRegionValueSymbolValOrUnknown(R, Ty);
 }
 
 SVal RegionStoreManager::RetrieveField(const GRState* state, 
@@ -1020,11 +1009,8 @@ SVal RegionStoreManager::RetrieveField(const GRState* state,
     Ty = tmp->getAsPointerType()->getPointeeType();
   }
 
-  // All other integer values are symbolic.
-  if (Loc::IsLocType(Ty) || Ty->isIntegerType())
-    return ValMgr.getRegionValueSymbolVal(R, Ty);
-  else
-    return UnknownVal();
+  // All other values are symbolic.
+  return ValMgr.getRegionValueSymbolValOrUnknown(R, Ty);
 }
 
 SVal RegionStoreManager::RetrieveStruct(const GRState *state,