Index: include/clang/StaticAnalyzer/Core/PathSensitive/GRState.h
===================================================================
--- include/clang/StaticAnalyzer/Core/PathSensitive/GRState.h	(revision 125281)
+++ include/clang/StaticAnalyzer/Core/PathSensitive/GRState.h	(working copy)
@@ -423,7 +423,7 @@
   friend class ExprEngine; // FIXME: Remove.
 private:
   /// Eng - The SubEngine that owns this state manager.
-  SubEngine &Eng;
+  SubEngine *Eng;
 
   EnvironmentManager                   EnvMgr;
   llvm::OwningPtr<StoreManager>        StoreMgr;
@@ -461,7 +461,7 @@
                  ConstraintManagerCreator CreateConstraintManager,
                  llvm::BumpPtrAllocator& alloc,
                  SubEngine &subeng)
-    : Eng(subeng),
+    : Eng(&subeng),
       EnvMgr(alloc),
       GDMFactory(alloc),
       svalBuilder(createSimpleSValBuilder(alloc, Ctx, *this)),
@@ -470,6 +470,19 @@
     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 @@
 
   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,
Index: lib/StaticAnalyzer/Core/GRState.cpp
===================================================================
--- lib/StaticAnalyzer/Core/GRState.cpp	(revision 125281)
+++ lib/StaticAnalyzer/Core/GRState.cpp	(working copy)
@@ -94,8 +94,8 @@
   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 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 @@
                                           StoreManager::InvalidatedSymbols *IS,
                                           bool invalidateGlobals) const {
   GRStateManager &Mgr = getStateManager();
-  SubEngine &Eng = Mgr.getOwningEngine();
-
-  if (Eng.wantsRegionChangeUpdate(this)) {
+  SubEngine* Eng = Mgr.getOwningEngine();
+ 
+  if (Eng && Eng->wantsRegionChangeUpdate(this)) {
     StoreManager::InvalidatedRegions Regions;
 
     Store new_store = Mgr.StoreMgr->InvalidateRegions(St, Begin, End,
@@ -125,9 +127,9 @@
                                                       &Regions);
     const GRState *new_state = makeWithStore(new_store);
 
-    return Eng.processRegionChanges(new_state,
-                                    &Regions.front(),
-                                    &Regions.back()+1);
+    return Eng->processRegionChanges(new_state,
+                                     &Regions.front(),
+                                     &Regions.back()+1);
   }
 
   Store new_store = Mgr.StoreMgr->InvalidateRegions(St, Begin, End,
