forked from OSchip/llvm-project
Allow the 'Eng' entry in GRStateManager to be a (possibly null) pointer instead of a reference.
llvm-svn: 125362
This commit is contained in:
parent
4be2ab4894
commit
5662dfefad
|
@ -423,7 +423,7 @@ class GRStateManager {
|
|||
friend class ExprEngine; // FIXME: Remove.
|
||||
private:
|
||||
/// Eng - The SubEngine that owns this state manager.
|
||||
SubEngine &Eng;
|
||||
SubEngine *Eng; /* Can be null. */
|
||||
|
||||
EnvironmentManager EnvMgr;
|
||||
llvm::OwningPtr<StoreManager> StoreMgr;
|
||||
|
@ -461,7 +461,7 @@ public:
|
|||
ConstraintManagerCreator CreateConstraintManager,
|
||||
llvm::BumpPtrAllocator& alloc,
|
||||
SubEngine &subeng)
|
||||
: Eng(subeng),
|
||||
: Eng(&subeng),
|
||||
EnvMgr(alloc),
|
||||
GDMFactory(alloc),
|
||||
svalBuilder(createSimpleSValBuilder(alloc, Ctx, *this)),
|
||||
|
@ -470,6 +470,19 @@ public:
|
|||
ConstraintMgr.reset((*CreateConstraintManager)(*this, subeng));
|
||||
}
|
||||
|
||||
GRStateManager(ASTContext& Ctx,
|
||||
StoreManagerCreator CreateStoreManager,
|
||||
ConstraintManager* ConstraintManagerPtr,
|
||||
llvm::BumpPtrAllocator& alloc)
|
||||
: Eng(0),
|
||||
EnvMgr(alloc),
|
||||
GDMFactory(alloc),
|
||||
svalBuilder(createSimpleSValBuilder(alloc, Ctx, *this)),
|
||||
Alloc(alloc) {
|
||||
StoreMgr.reset((*CreateStoreManager)(*this));
|
||||
ConstraintMgr.reset(ConstraintManagerPtr);
|
||||
}
|
||||
|
||||
~GRStateManager();
|
||||
|
||||
const GRState *getInitialState(const LocationContext *InitLoc);
|
||||
|
@ -506,7 +519,7 @@ public:
|
|||
|
||||
StoreManager& getStoreManager() { return *StoreMgr; }
|
||||
ConstraintManager& getConstraintManager() { return *ConstraintMgr; }
|
||||
SubEngine& getOwningEngine() { return Eng; }
|
||||
SubEngine* getOwningEngine() { return Eng; }
|
||||
|
||||
const GRState* removeDeadBindings(const GRState* St,
|
||||
const StackFrameContext *LCtx,
|
||||
|
|
|
@ -94,8 +94,8 @@ const GRState *GRState::bindLoc(Loc LV, SVal V) const {
|
|||
const GRState *new_state = makeWithStore(new_store);
|
||||
|
||||
const MemRegion *MR = LV.getAsRegion();
|
||||
if (MR)
|
||||
return Mgr.getOwningEngine().processRegionChange(new_state, MR);
|
||||
if (MR && Mgr.getOwningEngine())
|
||||
return Mgr.getOwningEngine()->processRegionChange(new_state, MR);
|
||||
|
||||
return new_state;
|
||||
}
|
||||
|
@ -105,7 +105,9 @@ const GRState *GRState::bindDefault(SVal loc, SVal V) const {
|
|||
const MemRegion *R = cast<loc::MemRegionVal>(loc).getRegion();
|
||||
Store new_store = Mgr.StoreMgr->BindDefault(St, R, V);
|
||||
const GRState *new_state = makeWithStore(new_store);
|
||||
return Mgr.getOwningEngine().processRegionChange(new_state, R);
|
||||
return Mgr.getOwningEngine() ?
|
||||
Mgr.getOwningEngine()->processRegionChange(new_state, R) :
|
||||
new_state;
|
||||
}
|
||||
|
||||
const GRState *GRState::InvalidateRegions(const MemRegion * const *Begin,
|
||||
|
@ -114,9 +116,9 @@ const GRState *GRState::InvalidateRegions(const MemRegion * const *Begin,
|
|||
StoreManager::InvalidatedSymbols *IS,
|
||||
bool invalidateGlobals) const {
|
||||
GRStateManager &Mgr = getStateManager();
|
||||
SubEngine &Eng = Mgr.getOwningEngine();
|
||||
SubEngine* Eng = Mgr.getOwningEngine();
|
||||
|
||||
if (Eng.wantsRegionChangeUpdate(this)) {
|
||||
if (Eng && Eng->wantsRegionChangeUpdate(this)) {
|
||||
StoreManager::InvalidatedRegions Regions;
|
||||
|
||||
Store new_store = Mgr.StoreMgr->InvalidateRegions(St, Begin, End,
|
||||
|
@ -125,7 +127,7 @@ const GRState *GRState::InvalidateRegions(const MemRegion * const *Begin,
|
|||
&Regions);
|
||||
const GRState *new_state = makeWithStore(new_store);
|
||||
|
||||
return Eng.processRegionChanges(new_state,
|
||||
return Eng->processRegionChanges(new_state,
|
||||
&Regions.front(),
|
||||
&Regions.back()+1);
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue