aboutsummaryrefslogtreecommitdiff
path: root/lib/Analysis/RegionStore.cpp
diff options
context:
space:
mode:
authorTed Kremenek <kremenek@apple.com>2009-08-21 23:25:54 +0000
committerTed Kremenek <kremenek@apple.com>2009-08-21 23:25:54 +0000
commit82cd37cf1cccde162d1f13eda6cdfe1398216f36 (patch)
treea336b44258a5903d99874ca963b297c178b8fcea /lib/Analysis/RegionStore.cpp
parent65ec1fda479688d143fe2403242cd9c730c800a1 (diff)
Remove 'SelfRegion' field from both BasicStoreManager and RegionStoreManager.
SelfRegion represented the object bound to 'self' (when analyzing Objective-C methods) upon entry to a method. Having this region stored on the side ignores the current stack frame that we might be analyzing (among other things), and is a problem for interprocedural analysis. For RegionStoreManager, the value for SelfRegion is just lazily created. For BasicStoreManager, the value for SelfRegion is bound eagerly to 'self', but no explicit tracking of SelfRegion on the side is made. As part of this change, remove the restriction in BasicStoreManager that we only track ivars for 'self'. This shouldn't actually change anything in terms of precision, and simplifies the logic. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@79694 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib/Analysis/RegionStore.cpp')
-rw-r--r--lib/Analysis/RegionStore.cpp39
1 files changed, 3 insertions, 36 deletions
diff --git a/lib/Analysis/RegionStore.cpp b/lib/Analysis/RegionStore.cpp
index 13768eca8c..53ef054c53 100644
--- a/lib/Analysis/RegionStore.cpp
+++ b/lib/Analysis/RegionStore.cpp
@@ -168,15 +168,11 @@ public:
class VISIBILITY_HIDDEN RegionStoreManager : public StoreManager {
const RegionStoreFeatures Features;
RegionBindings::Factory RBFactory;
-
- const MemRegion* SelfRegion;
-
public:
RegionStoreManager(GRStateManager& mgr, const RegionStoreFeatures &f)
: StoreManager(mgr),
Features(f),
- RBFactory(mgr.getAllocator()),
- SelfRegion(0) {}
+ RBFactory(mgr.getAllocator()) {}
virtual ~RegionStoreManager() {}
@@ -229,38 +225,9 @@ public:
NonLoc R, QualType resultTy);
Store getInitialStore(const LocationContext *InitLoc) {
- RegionBindings B = RBFactory.GetEmptyMap();
-
- // Eagerly bind 'self' to SelfRegion, because this is the only place we can
- // get the ObjCMethodDecl.
- typedef LiveVariables::AnalysisDataTy LVDataTy;
- LVDataTy &D = InitLoc->getLiveVariables()->getAnalysisData();
- for (LVDataTy::decl_iterator I=D.begin_decl(), E=D.end_decl(); I!=E; ++I){
- const NamedDecl *ND = I->first;
-
- if (const ImplicitParamDecl *PD = dyn_cast<ImplicitParamDecl>(ND)) {
- const Decl &CD = *InitLoc->getDecl();
- if (const ObjCMethodDecl *MD = dyn_cast<ObjCMethodDecl>(&CD)) {
- if (MD->getSelfDecl() == PD) {
- SelfRegion = MRMgr.getObjCObjectRegion(MD->getClassInterface(),
- MRMgr.getHeapRegion());
- B = RBFactory.Add(B, MRMgr.getVarRegion(PD, InitLoc),
- ValMgr.makeLoc(SelfRegion));
- }
- }
- }
- }
-
- return B.getRoot();
- }
-
- /// getSelfRegion - Returns the region for the 'self' (Objective-C) or
- /// 'this' object (C++). When used when analyzing a normal function this
- /// method returns NULL.
- const MemRegion* getSelfRegion(Store) {
- return SelfRegion;
+ return RBFactory.GetEmptyMap().getRoot();
}
-
+
//===-------------------------------------------------------------------===//
// Binding values to regions.
//===-------------------------------------------------------------------===//