summaryrefslogtreecommitdiffstats
path: root/clang/lib/Analysis/BasicStore.cpp
diff options
context:
space:
mode:
authorTed Kremenek <kremenek@apple.com>2009-08-02 04:45:08 +0000
committerTed Kremenek <kremenek@apple.com>2009-08-02 04:45:08 +0000
commitcee28a4c4dd944d11a3336ab8ff782879adde3d0 (patch)
tree8330f6e56fd6cd07cdf7625bb6bc2498435e633b /clang/lib/Analysis/BasicStore.cpp
parentd45a7860ecbecc3db73d22859918e6e337ae4a53 (diff)
downloadbcm5719-llvm-cee28a4c4dd944d11a3336ab8ff782879adde3d0.tar.gz
bcm5719-llvm-cee28a4c4dd944d11a3336ab8ff782879adde3d0.zip
Generalize the interface of 'StoreManager::RemoveDeadBindings()' to manipulate the entire GRState, not just the Store.
llvm-svn: 77870
Diffstat (limited to 'clang/lib/Analysis/BasicStore.cpp')
-rw-r--r--clang/lib/Analysis/BasicStore.cpp23
1 files changed, 11 insertions, 12 deletions
diff --git a/clang/lib/Analysis/BasicStore.cpp b/clang/lib/Analysis/BasicStore.cpp
index 2b70a964267..b044d400ae7 100644
--- a/clang/lib/Analysis/BasicStore.cpp
+++ b/clang/lib/Analysis/BasicStore.cpp
@@ -93,10 +93,9 @@ public:
const MemRegion* getSelfRegion(Store) { return SelfRegion; }
/// RemoveDeadBindings - Scans a BasicStore of 'state' for dead values.
- /// It returns a new Store with these values removed.
- Store RemoveDeadBindings(const GRState *state, Stmt* Loc,
- SymbolReaper& SymReaper,
- llvm::SmallVectorImpl<const MemRegion*>& RegionRoots);
+ /// It updatees the GRState object in place with the values removed.
+ void RemoveDeadBindings(GRState &state, Stmt* Loc, SymbolReaper& SymReaper,
+ llvm::SmallVectorImpl<const MemRegion*>& RegionRoots);
void iterBindings(Store store, BindingsHandler& f);
@@ -379,13 +378,12 @@ Store BasicStoreManager::Remove(Store store, Loc loc) {
}
}
-Store
-BasicStoreManager::RemoveDeadBindings(const GRState *state, Stmt* Loc,
+void
+BasicStoreManager::RemoveDeadBindings(GRState &state, Stmt* Loc,
SymbolReaper& SymReaper,
- llvm::SmallVectorImpl<const MemRegion*>& RegionRoots)
-{
-
- Store store = state->getStore();
+ llvm::SmallVectorImpl<const MemRegion*>& RegionRoots)
+{
+ Store store = state.getStore();
BindingsTy B = GetBindings(store);
typedef SVal::symbol_iterator symbol_iterator;
@@ -426,7 +424,7 @@ BasicStoreManager::RemoveDeadBindings(const GRState *state, Stmt* Loc,
break;
Marked.insert(MR);
- SVal X = Retrieve(state, loc::MemRegionVal(MR)).getSVal();
+ SVal X = Retrieve(&state, loc::MemRegionVal(MR)).getSVal();
// FIXME: We need to handle symbols nested in region definitions.
for (symbol_iterator SI=X.symbol_begin(),SE=X.symbol_end();SI!=SE;++SI)
@@ -459,7 +457,8 @@ BasicStoreManager::RemoveDeadBindings(const GRState *state, Stmt* Loc,
}
}
- return store;
+ // Write the store back.
+ state.setStore(store);
}
Store BasicStoreManager::scanForIvars(Stmt *B, const Decl* SelfDecl, Store St) {
OpenPOWER on IntegriCloud