diff options
| -rw-r--r-- | clang/include/clang/Analysis/PathSensitive/Store.h | 11 | ||||
| -rw-r--r-- | clang/lib/Analysis/BasicStore.cpp | 6 | ||||
| -rw-r--r-- | clang/lib/Analysis/RegionStore.cpp | 8 | 
3 files changed, 15 insertions, 10 deletions
diff --git a/clang/include/clang/Analysis/PathSensitive/Store.h b/clang/include/clang/Analysis/PathSensitive/Store.h index 5425b6976b9..be8ee458cb9 100644 --- a/clang/include/clang/Analysis/PathSensitive/Store.h +++ b/clang/include/clang/Analysis/PathSensitive/Store.h @@ -37,7 +37,14 @@ class StoreManager {  public:    typedef llvm::SmallSet<SymbolRef, 20>      LiveSymbolsTy;    typedef llvm::DenseSet<SymbolRef>          DeadSymbolsTy; -   + +protected: +  /// MRMgr - Manages region objects associated with this StoreManager. +  MemRegionManager MRMgr; + +  StoreManager(llvm::BumpPtrAllocator& Alloc) : MRMgr(Alloc) {} + +public:      virtual ~StoreManager() {}    /// Retrieve - Retrieves the value bound to specified location.  The optional @@ -64,7 +71,7 @@ public:                                               SVal V) = 0;    virtual Store getInitialStore() = 0; -  virtual MemRegionManager& getRegionManager() = 0; +  MemRegionManager& getRegionManager() { return MRMgr; }    virtual SVal getLValueVar(const GRState* St, const VarDecl* VD) = 0; diff --git a/clang/lib/Analysis/BasicStore.cpp b/clang/lib/Analysis/BasicStore.cpp index fe14a9effc1..9e469c0b5dc 100644 --- a/clang/lib/Analysis/BasicStore.cpp +++ b/clang/lib/Analysis/BasicStore.cpp @@ -26,14 +26,13 @@ namespace {  class VISIBILITY_HIDDEN BasicStoreManager : public StoreManager {    VarBindingsTy::Factory VBFactory;    GRStateManager& StateMgr; -  MemRegionManager MRMgr;    const MemRegion* SelfRegion;  public:    BasicStoreManager(GRStateManager& mgr) -    : VBFactory(mgr.getAllocator()),  +    : StoreManager(mgr.getAllocator()), +      VBFactory(mgr.getAllocator()),         StateMgr(mgr),  -      MRMgr(StateMgr.getAllocator()),         SelfRegion(0) {}    ~BasicStoreManager() {} @@ -49,7 +48,6 @@ public:    Store BindInternal(Store St, Loc LV, SVal V);      Store Remove(Store St, Loc LV);    Store getInitialStore(); -  MemRegionManager& getRegionManager() { return MRMgr; }    // FIXME: Investigate what is using this. This method should be removed.    virtual Loc getLoc(const VarDecl* VD) { diff --git a/clang/lib/Analysis/RegionStore.cpp b/clang/lib/Analysis/RegionStore.cpp index 4e0215b997e..598107c1ea5 100644 --- a/clang/lib/Analysis/RegionStore.cpp +++ b/clang/lib/Analysis/RegionStore.cpp @@ -54,6 +54,7 @@ namespace clang {  //  //  MemRegions represent chunks of memory with a size (their "extent").  This  //  GDM entry tracks the extents for regions.  Extents are in bytes. +//  namespace { class VISIBILITY_HIDDEN RegionExtents {}; }  static int RegionExtentsIndex = 0;  namespace clang { @@ -108,14 +109,13 @@ class VISIBILITY_HIDDEN RegionStoreManager : public StoreManager {    RegionViews::Factory RVFactory;    GRStateManager& StateMgr; -  MemRegionManager MRMgr;  public:    RegionStoreManager(GRStateManager& mgr)  -    : RBFactory(mgr.getAllocator()), +    : StoreManager(mgr.getAllocator()), +      RBFactory(mgr.getAllocator()),        RVFactory(mgr.getAllocator()), -      StateMgr(mgr),  -      MRMgr(StateMgr.getAllocator()) {} +      StateMgr(mgr) {}    virtual ~RegionStoreManager() {}  | 

