]> granicus.if.org Git - clang/commitdiff
Completely remove ObjCObjectRegion (tests pass this time).
authorTed Kremenek <kremenek@apple.com>
Wed, 16 Dec 2009 23:53:37 +0000 (23:53 +0000)
committerTed Kremenek <kremenek@apple.com>
Wed, 16 Dec 2009 23:53:37 +0000 (23:53 +0000)
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@91572 91177308-0d34-0410-b5e6-96231b3b80d8

include/clang/Analysis/PathSensitive/MemRegion.h
lib/Analysis/BasicStore.cpp
lib/Analysis/MemRegion.cpp
lib/Analysis/RegionStore.cpp
lib/Analysis/Store.cpp

index f0ae39498ec8999a95df79b233263299f72dc912..b57cfd7b5205bc65bdefbfd811412eb93424e03a 100644 (file)
@@ -72,7 +72,6 @@ public:
     VarRegionKind = BEG_DECL_REGIONS,
     FieldRegionKind,
     ObjCIvarRegionKind,
-    ObjCObjectRegionKind,
     CXXObjectRegionKind,
     END_DECL_REGIONS = CXXObjectRegionKind,
     END_TYPED_REGIONS = END_DECL_REGIONS
@@ -663,33 +662,6 @@ public:
   }
 };
 
-class ObjCObjectRegion : public DeclRegion {
-
-  friend class MemRegionManager;
-
-  ObjCObjectRegion(const ObjCInterfaceDecl* ivd, const MemRegion* sReg)
-  : DeclRegion(ivd, sReg, ObjCObjectRegionKind) {}
-
-  static void ProfileRegion(llvm::FoldingSetNodeID& ID,
-                            const ObjCInterfaceDecl* ivd,
-                            const MemRegion* superRegion) {
-    DeclRegion::ProfileRegion(ID, ivd, superRegion, ObjCObjectRegionKind);
-  }
-
-public:
-  const ObjCInterfaceDecl* getInterface() const {
-    return cast<ObjCInterfaceDecl>(D);
-  }
-
-  QualType getValueType(ASTContext& C) const {
-    return C.getObjCInterfaceType(getInterface());
-  }
-
-  static bool classof(const MemRegion* R) {
-    return R->getKind() == ObjCObjectRegionKind;
-  }
-};
-
 class ObjCIvarRegion : public DeclRegion {
 
   friend class MemRegionManager;
@@ -890,11 +862,6 @@ public:
     return getFieldRegion(FR->getDecl(), superRegion);
   }
 
-  /// getObjCObjectRegion - Retrieve or create the memory region associated with
-  ///  the instance of a specified Objective-C class.
-  const ObjCObjectRegion* getObjCObjectRegion(const ObjCInterfaceDecl* ID,
-                                              const MemRegion* superRegion);
-
   /// getObjCIvarRegion - Retrieve or create the memory region associated with
   ///   a specified Objective-c instance variable.  'superRegion' corresponds
   ///   to the containing region (which typically represents the Objective-C
index a38aaa7eb268cc53ea9dca79575adc9ef24e8016..224281b177706e0c7ca070fe09272071f66c8dcd 100644 (file)
@@ -479,15 +479,14 @@ Store BasicStoreManager::getInitialStore(const LocationContext *InitLoc) {
       const Decl& CD = *InitLoc->getDecl();
       if (const ObjCMethodDecl* MD = dyn_cast<ObjCMethodDecl>(&CD)) {
         if (MD->getSelfDecl() == PD) {
-          // FIXME: Just use a symbolic region, and remove ObjCObjectRegion
-          // entirely.
-          const ObjCObjectRegion *SelfRegion =
-            MRMgr.getObjCObjectRegion(MD->getClassInterface(),
-                                      MRMgr.getHeapRegion());
-
-          St = BindInternal(St, ValMgr.makeLoc(MRMgr.getVarRegion(PD, InitLoc)),
-                            ValMgr.makeLoc(SelfRegion));
-
+          // FIXME: Add type constraints (when they become available) to
+          // SelfRegion?  (i.e., it implements MD->getClassInterface()).
+          const MemRegion *VR = MRMgr.getVarRegion(PD, InitLoc);
+          const MemRegion *SelfRegion =
+            ValMgr.getRegionValueSymbolVal(VR).getAsRegion();          
+          assert(SelfRegion);          
+          St = BindInternal(St, ValMgr.makeLoc(VR),
+                            loc::MemRegionVal(SelfRegion));
           // Scan the method for ivar references.  While this requires an
           // entire AST scan, the cost should not be high in practice.
           St = scanForIvars(MD->getBody(), PD, SelfRegion, St);
index 04d730c5c80fb9a2339b605ec22558f83067899a..74fe3bf5ee5c11623ad84a9816fc121aa70ba613 100644 (file)
@@ -563,12 +563,6 @@ MemRegionManager::getObjCIvarRegion(const ObjCIvarDecl* d,
   return getSubRegion<ObjCIvarRegion>(d, superRegion);
 }
 
-const ObjCObjectRegion*
-MemRegionManager::getObjCObjectRegion(const ObjCInterfaceDecl* d,
-                                      const MemRegion* superRegion) {
-  return getSubRegion<ObjCObjectRegion>(d, superRegion);
-}
-
 const CXXObjectRegion *
 MemRegionManager::getCXXObjectRegion(QualType T) {
   return getSubRegion<CXXObjectRegion>(T, getUnknownRegion());
index b83ddf224bb28aad18641009c72abb714f1161b7..d825299760f7535dfead3e7d4f90446dc73e7671 100644 (file)
@@ -539,8 +539,7 @@ const GRState *RegionStoreManager::InvalidateRegions(const GRState *state,
     }
 
     // Handle the region itself.
-    if (isa<AllocaRegion>(R) || isa<SymbolicRegion>(R) ||
-        isa<ObjCObjectRegion>(R)) {
+    if (isa<AllocaRegion>(R) || isa<SymbolicRegion>(R)) {
       // Invalidate the region by setting its default value to
       // conjured symbol. The type of the symbol is irrelavant.
       DefinedOrUnknownSVal V = ValMgr.getConjuredSymbolVal(R, Ex, Ctx.IntTy,
@@ -744,7 +743,6 @@ DefinedOrUnknownSVal RegionStoreManager::getSizeInElements(const GRState *state,
     case MemRegion::ElementRegionKind:
     case MemRegion::FieldRegionKind:
     case MemRegion::ObjCIvarRegionKind:
-    case MemRegion::ObjCObjectRegionKind:
     case MemRegion::SymbolicRegionKind:
     case MemRegion::CXXObjectRegionKind:
       return UnknownVal();
@@ -868,7 +866,6 @@ SVal RegionStoreManager::EvalBinOp(const GRState *state,
     // Fall-through.
     case MemRegion::CompoundLiteralRegionKind:
     case MemRegion::FieldRegionKind:
-    case MemRegion::ObjCObjectRegionKind:
     case MemRegion::ObjCIvarRegionKind:
     case MemRegion::CXXObjectRegionKind:
       return UnknownVal();
index 0479c684d71113d605bfd1f37d0e325fd10eb1e2..8d911b844fc04183fba11a57437660ae8403c02c 100644 (file)
@@ -98,7 +98,6 @@ const MemRegion *StoreManager::CastRegion(const MemRegion *R, QualType CastToTy)
     }
 
     case MemRegion::StringRegionKind:
-    case MemRegion::ObjCObjectRegionKind:
       // FIXME: Need to handle arbitrary downcasts.
     case MemRegion::SymbolicRegionKind:
     case MemRegion::AllocaRegionKind: