diff options
author | Zhongxing Xu <xuzhongxing@gmail.com> | 2009-06-23 02:51:21 +0000 |
---|---|---|
committer | Zhongxing Xu <xuzhongxing@gmail.com> | 2009-06-23 02:51:21 +0000 |
commit | dd198f04897df87c52fef66398035cbf67fdc33d (patch) | |
tree | 708bbe74a31c3e9e7a1fc700a15fbdc943f40a3c | |
parent | 83298da65412ac607efe22664fdb51e05e3ae960 (diff) |
Remove duplicated methods.
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@73940 91177308-0d34-0410-b5e6-96231b3b80d8
-rw-r--r-- | include/clang/Analysis/PathSensitive/MemRegion.h | 22 | ||||
-rw-r--r-- | lib/Analysis/MemRegion.cpp | 36 | ||||
-rw-r--r-- | lib/Analysis/RegionStore.cpp | 2 |
3 files changed, 30 insertions, 30 deletions
diff --git a/include/clang/Analysis/PathSensitive/MemRegion.h b/include/clang/Analysis/PathSensitive/MemRegion.h index 605fa27cc1..c853a5fa86 100644 --- a/include/clang/Analysis/PathSensitive/MemRegion.h +++ b/include/clang/Analysis/PathSensitive/MemRegion.h @@ -608,19 +608,6 @@ public: MemSpaceRegion* getCodeRegion(); - bool isGlobalsRegion(const MemRegion* R) { - assert(R); - return R == globals; - } - - /// onStack - check if the region is allocated on the stack. - bool onStack(const MemRegion* R); - - /// onHeap - check if the region is allocated on the heap, usually by malloc. - bool onHeap(const MemRegion* R); - - bool hasStackStorage(const MemRegion* R); - /// getAllocaRegion - Retrieve a region associated with a call to alloca(). AllocaRegion* getAllocaRegion(const Expr* Ex, unsigned Cnt); @@ -677,6 +664,15 @@ public: template <typename RegionTy, typename A1, typename A2> RegionTy* getRegion(const A1 a1, const A2 a2); + bool isGlobalsRegion(const MemRegion* R) { + assert(R); + return R == globals; + } + + bool hasStackStorage(const MemRegion* R); + + bool hasHeapStorage(const MemRegion* R); + private: MemSpaceRegion* LazyAllocate(MemSpaceRegion*& region); }; diff --git a/lib/Analysis/MemRegion.cpp b/lib/Analysis/MemRegion.cpp index a923ac29eb..619d1617d0 100644 --- a/lib/Analysis/MemRegion.cpp +++ b/lib/Analysis/MemRegion.cpp @@ -234,20 +234,6 @@ MemSpaceRegion* MemRegionManager::getCodeRegion() { return LazyAllocate(code); } -bool MemRegionManager::onStack(const MemRegion* R) { - while (const SubRegion* SR = dyn_cast<SubRegion>(R)) - R = SR->getSuperRegion(); - - return (R != 0) && (R == stack); -} - -bool MemRegionManager::onHeap(const MemRegion* R) { - while (const SubRegion* SR = dyn_cast<SubRegion>(R)) - R = SR->getSuperRegion(); - - return (R != 0) && (R == heap); -} - //===----------------------------------------------------------------------===// // Constructing regions. //===----------------------------------------------------------------------===// @@ -352,7 +338,6 @@ AllocaRegion* MemRegionManager::getAllocaRegion(const Expr* E, unsigned cnt) { } bool MemRegionManager::hasStackStorage(const MemRegion* R) { - // Only subregions can have stack storage. const SubRegion* SR = dyn_cast<SubRegion>(R); @@ -368,10 +353,29 @@ bool MemRegionManager::hasStackStorage(const MemRegion* R) { SR = dyn_cast<SubRegion>(R); } - + return false; } +bool MemRegionManager::hasHeapStorage(const MemRegion* R) { + // Only subregions can have stack storage. + const SubRegion* SR = dyn_cast<SubRegion>(R); + + if (!SR) + return false; + + MemSpaceRegion* H = getHeapRegion(); + + while (SR) { + R = SR->getSuperRegion(); + if (R == H) + return true; + + SR = dyn_cast<SubRegion>(R); + } + + return false; +} //===----------------------------------------------------------------------===// // View handling. diff --git a/lib/Analysis/RegionStore.cpp b/lib/Analysis/RegionStore.cpp index 4b598a384f..564ffec6cf 100644 --- a/lib/Analysis/RegionStore.cpp +++ b/lib/Analysis/RegionStore.cpp @@ -939,7 +939,7 @@ SVal RegionStoreManager::Retrieve(const GRState *state, Loc L, QualType T) { } } - if (MRMgr.onStack(R) || MRMgr.onHeap(R)) { + if (MRMgr.hasStackStorage(R) || MRMgr.hasHeapStorage(R)) { // All stack variables are considered to have undefined values // upon creation. All heap allocated blocks are considered to // have undefined values as well unless they are explicitly bound |