]> granicus.if.org Git - clang/commitdiff
Make StoreManager::getSizeInElements() always return DefinedOrUnknownSVal.
authorZhongxing Xu <xuzhongxing@gmail.com>
Thu, 12 Nov 2009 02:48:32 +0000 (02:48 +0000)
committerZhongxing Xu <xuzhongxing@gmail.com>
Thu, 12 Nov 2009 02:48:32 +0000 (02:48 +0000)
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@86932 91177308-0d34-0410-b5e6-96231b3b80d8

include/clang/Analysis/PathSensitive/Store.h
lib/Analysis/ArrayBoundChecker.cpp
lib/Analysis/RegionStore.cpp
lib/Analysis/ReturnPointerRangeChecker.cpp

index 6ca2e9e9aa687d803e6dbf36c1f2fb4025e3ad52..6c6804bc3f6852d2ac1599aff214c22e7f673e5b 100644 (file)
@@ -102,7 +102,8 @@ public:
   virtual SVal getLValueElement(QualType elementType, SVal offset, SVal Base)=0;
 
   // FIXME: Make out-of-line.
-  virtual SVal getSizeInElements(const GRState *state, const MemRegion *region){
+  virtual DefinedOrUnknownSVal getSizeInElements(const GRState *state, 
+                                                 const MemRegion *region) {
     return UnknownVal();
   }
 
index ae8e1149c50812dabf56a5938b3e16e63aac42db..34a5631edd3e7e0c73e74028e8bd63b0504722dc 100644 (file)
@@ -56,9 +56,8 @@ void ArrayBoundChecker::VisitLocation(CheckerContext &C, const Stmt *S, SVal l){
   const GRState *state = C.getState();
 
   // Get the size of the array.
-  SVal NumVal = C.getStoreManager().getSizeInElements(state,
-                                                      ER->getSuperRegion());
-  DefinedOrUnknownSVal &NumElements = cast<DefinedOrUnknownSVal>(NumVal);
+  DefinedOrUnknownSVal NumElements 
+    = C.getStoreManager().getSizeInElements(state, ER->getSuperRegion());
 
   const GRState *StInBound = state->AssumeInBound(Idx, NumElements, true);
   const GRState *StOutBound = state->AssumeInBound(Idx, NumElements, false);
index 91769cd447cdad7ff7b073af38a905b44ac84726..46cddd0da1b3261a1b95846fc3136d424c6ea844 100644 (file)
@@ -360,7 +360,8 @@ public:
   //===------------------------------------------------------------------===//
 
   const GRState *setExtent(const GRState *state, const MemRegion* R, SVal Extent);
-  SVal getSizeInElements(const GRState *state, const MemRegion* R);
+  DefinedOrUnknownSVal getSizeInElements(const GRState *state, 
+                                         const MemRegion* R);
 
   //===------------------------------------------------------------------===//
   // Utility methods.
@@ -696,8 +697,8 @@ SVal RegionStoreManager::getLValueElement(QualType elementType, SVal Offset,
 // Extents for regions.
 //===----------------------------------------------------------------------===//
 
-SVal RegionStoreManager::getSizeInElements(const GRState *state,
-                                           const MemRegion *R) {
+DefinedOrUnknownSVal RegionStoreManager::getSizeInElements(const GRState *state,
+                                                           const MemRegion *R) {
 
   switch (R->getKind()) {
     case MemRegion::MemSpaceRegionKind:
index 261081ebb41d7427b036d37df3b7d3fa2b04a3fc..f007d0e0d1ac062feb0905ab32d6ca6ec773b31a 100644 (file)
@@ -64,9 +64,8 @@ void ReturnPointerRangeChecker::PreVisitReturnStmt(CheckerContext &C,
   // FIXME: All of this out-of-bounds checking should eventually be refactored
   // into a common place.
 
-  SVal NumVal = C.getStoreManager().getSizeInElements(state,
-                                                      ER->getSuperRegion());
-  DefinedOrUnknownSVal &NumElements = cast<DefinedOrUnknownSVal>(NumVal);
+  DefinedOrUnknownSVal NumElements
+    = C.getStoreManager().getSizeInElements(state, ER->getSuperRegion());
 
   const GRState *StInBound = state->AssumeInBound(Idx, NumElements, true);
   const GRState *StOutBound = state->AssumeInBound(Idx, NumElements, false);