[cfe-commits] r50689 - /cfe/trunk/lib/Analysis/CFRefCount.cpp

Ted Kremenek kremenek at apple.com
Mon May 5 17:30:21 PDT 2008


Author: kremenek
Date: Mon May  5 19:30:21 2008
New Revision: 50689

URL: http://llvm.org/viewvc/llvm-project?rev=50689&view=rev
Log:
Added code to generate initial set of summaries for instance methods.

Modified:
    cfe/trunk/lib/Analysis/CFRefCount.cpp

Modified: cfe/trunk/lib/Analysis/CFRefCount.cpp
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Analysis/CFRefCount.cpp?rev=50689&r1=50688&r2=50689&view=diff

==============================================================================
--- cfe/trunk/lib/Analysis/CFRefCount.cpp (original)
+++ cfe/trunk/lib/Analysis/CFRefCount.cpp Mon May  5 19:30:21 2008
@@ -38,6 +38,11 @@
   return Ctx.Selectors.getSelector(0, &II);
 }
 
+static inline Selector GetUnarySelector(const char* name, ASTContext& Ctx) {
+  IdentifierInfo* II = &Ctx.Idents.get(name);
+  return Ctx.Selectors.getSelector(1, &II);
+}
+
 //===----------------------------------------------------------------------===//
 // Symbolic Evaluation of Reference Counting Logic
 //===----------------------------------------------------------------------===//
@@ -161,7 +166,7 @@
           FuncSummariesTy;
   
   typedef llvm::DenseMap<Selector, RetainSummary*>
-          ObjCMethodSummariesTy;
+          ObjCMethSummariesTy;
     
   //==-----------------------------------------------------------------==//
   //  Data.
@@ -179,12 +184,12 @@
   // FuncSummaries - A map from FunctionDecls to summaries.
   FuncSummariesTy FuncSummaries; 
   
-  // ObjCInstanceMethodSummaries - A map from selectors (for instance methods)
+  // ObjCInstMethSummaries - A map from selectors (for instance methods)
   //  to summaries.
-  ObjCMethodSummariesTy ObjCInstanceMethodSummaries;
+  ObjCMethSummariesTy ObjCInstMethSummaries;
 
-  // ObjCMethodSummaries - A map from selectors to summaries.
-  ObjCMethodSummariesTy ObjCMethodSummaries;
+  // ObjCMethSummaries - A map from selectors to summaries.
+  ObjCMethSummariesTy ObjCMethSummaries;
 
   // ArgEffectsSet - A FoldingSet of uniqued ArgEffects.
   ArgEffectsSetTy ArgEffectsSet;
@@ -214,16 +219,25 @@
   RetainSummary* getCFSummaryGetRule(FunctionDecl* FD);  
   
   RetainSummary* getPersistentSummary(ArgEffects* AE, RetEffect RE);
+
+  RetainSummary* getPersistentSummary(RetEffect RE) {
+    return getPersistentSummary(getArgEffects(), RE);
+  }
   
   RetainSummary* getInstanceMethodSummary(Selector S);
   
   RetainSummary* getMethodSummary(Selector S);    
   RetainSummary* getInitMethodSummary(Selector S);
 
+  void InitializeInstanceSummaries();
+    
 public:
   
   RetainSummaryManager(ASTContext& ctx, bool gcenabled)
-   : Ctx(ctx), GCEnabled(gcenabled) {}
+   : Ctx(ctx), GCEnabled(gcenabled) {
+    
+     InitializeInstanceSummaries();
+   }
   
   ~RetainSummaryManager();
   
@@ -393,19 +407,19 @@
   switch (func) {
     case cfretain: {
       ScratchArgs.push_back(std::make_pair(0, IncRef));
-      return getPersistentSummary(getArgEffects(), RetEffect::MakeAlias(0));
+      return getPersistentSummary(RetEffect::MakeAlias(0));
     }
       
     case cfrelease: {
       ScratchArgs.push_back(std::make_pair(0, DecRef));
-      return getPersistentSummary(getArgEffects(), RetEffect::MakeNoRet());
+      return getPersistentSummary(RetEffect::MakeNoRet());
     }
       
     case cfmakecollectable: {
       if (GCEnabled)
         ScratchArgs.push_back(std::make_pair(0, DecRef));
       
-      return getPersistentSummary(getArgEffects(), RetEffect::MakeAlias(0));    
+      return getPersistentSummary(RetEffect::MakeAlias(0));    
     }
       
     default:
@@ -449,7 +463,7 @@
   //  just handle the default case.
 
   assert (ScratchArgs.empty());
-  return getPersistentSummary(getArgEffects(), RetEffect::MakeOwned());
+  return getPersistentSummary(RetEffect::MakeOwned());
 }
 
 RetainSummary* RetainSummaryManager::getCFSummaryGetRule(FunctionDecl* FD) {
@@ -474,7 +488,7 @@
   //  just handle the default case.
   
   assert (ScratchArgs.empty());  
-  return getPersistentSummary(getArgEffects(), RetEffect::MakeNotOwned());
+  return getPersistentSummary(RetEffect::MakeNotOwned());
 }
 
 //===----------------------------------------------------------------------===//
@@ -485,18 +499,18 @@
   assert(ScratchArgs.empty());
     
   RetainSummary* Summ =
-    getPersistentSummary(getArgEffects(), RetEffect::MakeReceiverAlias());
+    getPersistentSummary(RetEffect::MakeReceiverAlias());
   
-  ObjCMethodSummaries[S] = Summ;
+  ObjCMethSummaries[S] = Summ;
   return Summ;
 }
 
 RetainSummary* RetainSummaryManager::getMethodSummary(Selector S) {
   
   // Look up a summary in our cache of Selectors -> Summaries.
-  ObjCMethodSummariesTy::iterator I = ObjCMethodSummaries.find(S);
+  ObjCMethSummariesTy::iterator I = ObjCMethSummaries.find(S);
   
-  if (I != ObjCMethodSummaries.end())
+  if (I != ObjCMethSummaries.end())
     return I->second;
 
   // "initXXX": pass-through for receiver.
@@ -509,12 +523,36 @@
   return 0;
 }
 
+void RetainSummaryManager::InitializeInstanceSummaries() {
+  
+  assert (ScratchArgs.empty());
+  
+  RetEffect E = isGCEnabled() ? RetEffect::MakeNoRet() : RetEffect::MakeOwned();  
+  RetainSummary* Summ = getPersistentSummary(E);
+  
+  // Create the "alloc" selector.
+  ObjCInstMethSummaries[ GetNullarySelector("alloc", Ctx) ] = Summ;
+  
+  // Create the "new" selector.
+  ObjCInstMethSummaries[ GetNullarySelector("new", Ctx) ] = Summ;
+  
+  // Create the "allocWithZone:" selector.
+  ObjCInstMethSummaries[ GetUnarySelector("allocWithZone", Ctx) ] = Summ;
+  
+  // Create the "copyWithZone:" selector.
+  ObjCInstMethSummaries[ GetUnarySelector("copyWithZone", Ctx) ] = Summ;
+    
+  // Create the "mutableCopyWithZone:" selector.
+  ObjCInstMethSummaries[ GetUnarySelector("mutableCopyWithZone", Ctx) ] = Summ;
+}
+
+
 RetainSummary* RetainSummaryManager::getInstanceMethodSummary(Selector S) {
     
   // Look up a summary in our cache of Selectors -> Summaries.
-  ObjCMethodSummariesTy::iterator I = ObjCInstanceMethodSummaries.find(S);
+  ObjCMethSummariesTy::iterator I = ObjCInstMethSummaries.find(S);
   
-  if (I != ObjCInstanceMethodSummaries.end())
+  if (I != ObjCInstMethSummaries.end())
     return I->second;
     
   return 0;





More information about the cfe-commits mailing list