]> granicus.if.org Git - clang/commitdiff
Cache ObjC summaries by IdentifierInfo*, not by ObjCInterfaceDecl.
authorTed Kremenek <kremenek@apple.com>
Tue, 24 Jun 2008 03:49:48 +0000 (03:49 +0000)
committerTed Kremenek <kremenek@apple.com>
Tue, 24 Jun 2008 03:49:48 +0000 (03:49 +0000)
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@52667 91177308-0d34-0410-b5e6-96231b3b80d8

lib/Analysis/CFRefCount.cpp

index aafef03a5f2e6adb02c6c078d1a8d50f0c91e612..d1d58cb9090268f62addfa11be9a90e2c095d710 100644 (file)
@@ -218,12 +218,19 @@ public:
 
 namespace {
   class VISIBILITY_HIDDEN ObjCSummaryKey {
-    ObjCInterfaceDecl* D;
+    IdentifierInfo* II;
     Selector S;
   public:    
-    ObjCSummaryKey(ObjCInterfaceDecl* d, Selector s) : D(d), S(s) {}
+    ObjCSummaryKey(IdentifierInfo* ii, Selector s)
+      : II(ii), S(s) {}
+
+    ObjCSummaryKey(ObjCInterfaceDecl* d, Selector s)
+      : II(d ? d->getIdentifier() : 0), S(s) {}
+    
+    ObjCSummaryKey(Selector s)
+      : II(0), S(s) {}
     
-    ObjCInterfaceDecl* getDecl() const { return D; }
+    IdentifierInfo* getIdentifier() const { return II; }
     Selector getSelector() const { return S; }
   };
 }
@@ -231,25 +238,27 @@ namespace {
 namespace llvm {
   template <> struct DenseMapInfo<ObjCSummaryKey> {
     static inline ObjCSummaryKey getEmptyKey() {
-      return ObjCSummaryKey(DenseMapInfo<ObjCInterfaceDecl*>::getEmptyKey(),
+      return ObjCSummaryKey(DenseMapInfo<IdentifierInfo*>::getEmptyKey(),
                             DenseMapInfo<Selector>::getEmptyKey());
     }
       
     static inline ObjCSummaryKey getTombstoneKey() {
-      return ObjCSummaryKey(DenseMapInfo<ObjCInterfaceDecl*>::getTombstoneKey(),
+      return ObjCSummaryKey(DenseMapInfo<IdentifierInfo*>::getTombstoneKey(),
                             DenseMapInfo<Selector>::getTombstoneKey());      
     }
     
     static unsigned getHashValue(const ObjCSummaryKey &V) {
-      return 
-        (DenseMapInfo<ObjCInterfaceDecl*>::getHashValue(V.getDecl())&0x88888888)
-        |(DenseMapInfo<Selector>::getHashValue(V.getSelector()) & 0x55555555);
+      return (DenseMapInfo<IdentifierInfo*>::getHashValue(V.getIdentifier())
+              & 0x88888888) 
+          | (DenseMapInfo<Selector>::getHashValue(V.getSelector())
+              & 0x55555555);
     }
     
     static bool isEqual(const ObjCSummaryKey& LHS, const ObjCSummaryKey& RHS) {
-      return
-        DenseMapInfo<ObjCInterfaceDecl*>::isEqual(LHS.getDecl(), RHS.getDecl())
-        && DenseMapInfo<Selector>::isEqual(LHS.getSelector(),RHS.getSelector());
+      return DenseMapInfo<IdentifierInfo*>::isEqual(LHS.getIdentifier(),
+                                                    RHS.getIdentifier()) &&
+             DenseMapInfo<Selector>::isEqual(LHS.getSelector(),
+                                             RHS.getSelector());
     }
     
     static bool isPod() {
@@ -324,7 +333,7 @@ class RetainSummaryManager {
     }
     
     RetainSummary*& operator[](Selector S) {
-      return M[ ObjCSummaryKey(0,S) ];
+      return M[ ObjCSummaryKey(S) ];
     }    
   };