aboutsummaryrefslogtreecommitdiff
path: root/lib/Analysis/RegionStore.cpp
diff options
context:
space:
mode:
authorZhongxing Xu <xuzhongxing@gmail.com>2008-12-16 02:36:30 +0000
committerZhongxing Xu <xuzhongxing@gmail.com>2008-12-16 02:36:30 +0000
commit9c9ca08fdd27fb0b025782aa41fae93612edf440 (patch)
tree4ec87bcc28d5057f993cf45ec85491e3e3c329fd /lib/Analysis/RegionStore.cpp
parent3281eff4c1fbf7e2e59cc5381d5270deaf06839e (diff)
Implement RegionStoreManager::Remove().
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@61069 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib/Analysis/RegionStore.cpp')
-rw-r--r--lib/Analysis/RegionStore.cpp18
1 files changed, 12 insertions, 6 deletions
diff --git a/lib/Analysis/RegionStore.cpp b/lib/Analysis/RegionStore.cpp
index b78c2edb14..98b408156f 100644
--- a/lib/Analysis/RegionStore.cpp
+++ b/lib/Analysis/RegionStore.cpp
@@ -111,10 +111,7 @@ public:
Store Bind(Store St, Loc LV, SVal V);
- Store Remove(Store store, Loc LV) {
- // FIXME: Implement.
- return store;
- }
+ Store Remove(Store store, Loc LV);
Store getInitialStore();
@@ -141,7 +138,7 @@ public:
const GRState* setExtent(const GRState* St, const MemRegion* R, SVal Extent);
static inline RegionBindingsTy GetRegionBindings(Store store) {
- return RegionBindingsTy(static_cast<const RegionBindingsTy::TreeTy*>(store));
+ return RegionBindingsTy(static_cast<const RegionBindingsTy::TreeTy*>(store));
}
void print(Store store, std::ostream& Out, const char* nl, const char *sep);
@@ -482,6 +479,15 @@ Store RegionStoreManager::Bind(Store store, Loc LV, SVal V) {
: RBFactory.Add(B, R, V).getRoot();
}
+Store RegionStoreManager::Remove(Store store, Loc L) {
+ RegionBindingsTy B = GetRegionBindings(store);
+
+ const MemRegion* R = cast<loc::MemRegionVal>(L).getRegion();
+ assert(R);
+
+ return RBFactory.Remove(B, R).getRoot();
+}
+
Store RegionStoreManager::BindStruct(Store store, const TypedRegion* R, SVal V){
// Verify we want getRValueType.
QualType T = R->getRValueType(getContext());
@@ -747,7 +753,7 @@ Store RegionStoreManager::RemoveDeadBindings(const GRState* state, Stmt* Loc,
continue;
// Remove this dead region from the store.
- store = Remove(store, loc::MemRegionVal(R));
+ store = Remove(store, Loc::MakeVal(R));
// Mark all non-live symbols that this region references as dead.
if (const SymbolicRegion* SymR = dyn_cast<SymbolicRegion>(R)) {