StoreManager::RemoveDeadBindings() can take a Store instead of an entire GRState now.

llvm-svn: 111103
This commit is contained in:
Zhongxing Xu 2010-08-15 12:45:09 +00:00
parent d0fcc9a818
commit ee770d40fd
5 changed files with 18 additions and 25 deletions

View File

@ -149,9 +149,8 @@ public:
return UnknownVal();
}
virtual const GRState *RemoveDeadBindings(GRState &state,
const StackFrameContext *LCtx,
SymbolReaper& SymReaper,
virtual Store RemoveDeadBindings(Store store, const StackFrameContext *LCtx,
SymbolReaper& SymReaper,
llvm::SmallVectorImpl<const MemRegion*>& RegionRoots) = 0;
virtual Store BindDecl(Store store, const VarRegion *VR, SVal initVal) = 0;

View File

@ -77,9 +77,8 @@ public:
/// RemoveDeadBindings - Scans a BasicStore of 'state' for dead values.
/// It updatees the GRState object in place with the values removed.
const GRState *RemoveDeadBindings(GRState &state,
const StackFrameContext *LCtx,
SymbolReaper& SymReaper,
Store RemoveDeadBindings(Store store, const StackFrameContext *LCtx,
SymbolReaper& SymReaper,
llvm::SmallVectorImpl<const MemRegion*>& RegionRoots);
void iterBindings(Store store, BindingsHandler& f);
@ -281,12 +280,11 @@ Store BasicStoreManager::Remove(Store store, Loc loc) {
}
}
const GRState *BasicStoreManager::RemoveDeadBindings(GRState &state,
Store BasicStoreManager::RemoveDeadBindings(Store store,
const StackFrameContext *LCtx,
SymbolReaper& SymReaper,
llvm::SmallVectorImpl<const MemRegion*>& RegionRoots)
{
Store store = state.getStore();
BindingsTy B = GetBindings(store);
typedef SVal::symbol_iterator symbol_iterator;
@ -361,8 +359,7 @@ const GRState *BasicStoreManager::RemoveDeadBindings(GRState &state,
}
}
state.setStore(store);
return StateMgr.getPersistentState(state);
return store;
}
Store BasicStoreManager::scanForIvars(Stmt *B, const Decl* SelfDecl,

View File

@ -44,11 +44,10 @@ public:
}
SVal ArrayToPointer(Loc Array);
const GRState *RemoveDeadBindings(GRState &state,
const StackFrameContext *LCtx,
Store RemoveDeadBindings(Store store, const StackFrameContext *LCtx,
SymbolReaper& SymReaper,
llvm::SmallVectorImpl<const MemRegion*>& RegionRoots){
return StateMgr.getPersistentState(state);
return store;
}
Store BindDecl(Store store, const VarRegion *VR, SVal initVal);

View File

@ -51,10 +51,10 @@ GRStateManager::RemoveDeadBindings(const GRState* state,
state, RegionRoots);
// Clean up the store.
const GRState *s = StoreMgr->RemoveDeadBindings(NewState, LCtx,
SymReaper, RegionRoots);
return ConstraintMgr->RemoveDeadBindings(s, SymReaper);
NewState.St = StoreMgr->RemoveDeadBindings(NewState.St, LCtx,
SymReaper, RegionRoots);
state = getPersistentState(NewState);
return ConstraintMgr->RemoveDeadBindings(state, SymReaper);
}
const GRState *GRStateManager::MarshalState(const GRState *state,

View File

@ -347,9 +347,8 @@ public: // Part of public interface to class.
/// RemoveDeadBindings - Scans the RegionStore of 'state' for dead values.
/// It returns a new Store with these values removed.
const GRState *RemoveDeadBindings(GRState &state,
const StackFrameContext *LCtx,
SymbolReaper& SymReaper,
Store RemoveDeadBindings(Store store, const StackFrameContext *LCtx,
SymbolReaper& SymReaper,
llvm::SmallVectorImpl<const MemRegion*>& RegionRoots);
Store EnterStackFrame(const GRState *state, const StackFrameContext *frame);
@ -1792,12 +1791,12 @@ bool RemoveDeadBindingsWorker::UpdatePostponed() {
return changed;
}
const GRState *RegionStoreManager::RemoveDeadBindings(GRState &state,
Store RegionStoreManager::RemoveDeadBindings(Store store,
const StackFrameContext *LCtx,
SymbolReaper& SymReaper,
llvm::SmallVectorImpl<const MemRegion*>& RegionRoots)
{
RegionBindings B = GetRegionBindings(state.getStore());
RegionBindings B = GetRegionBindings(store);
RemoveDeadBindingsWorker W(*this, StateMgr, B, SymReaper, LCtx);
W.GenerateClusters();
@ -1830,9 +1829,8 @@ const GRState *RegionStoreManager::RemoveDeadBindings(GRState &state,
for (; SI != SE; ++SI)
SymReaper.maybeDead(*SI);
}
state.setStore(B.getRoot());
const GRState *s = StateMgr.getPersistentState(state);
return s;
return B.getRoot();
}