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

Ted Kremenek kremenek at apple.com
Mon Jun 15 13:36:07 PDT 2009


Author: kremenek
Date: Mon Jun 15 15:36:07 2009
New Revision: 73411

URL: http://llvm.org/viewvc/llvm-project?rev=73411&view=rev
Log:
Fix: <rdar://problem/6961230> add knowledge of IOKit functions to retain/release checker

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=73411&r1=73410&r2=73411&view=diff

==============================================================================
--- cfe/trunk/lib/Analysis/CFRefCount.cpp (original)
+++ cfe/trunk/lib/Analysis/CFRefCount.cpp Mon Jun 15 15:36:07 2009
@@ -971,8 +971,12 @@
     
     // FIXME: This should all be refactored into a chain of "summary lookup"
     //  filters.
+    assert (ScratchArgs.isEmpty());
+    
     switch (strlen(FName)) {
       default: break;
+        
+
       case 17:
         // Handle: id NSMakeCollectable(CFTypeRef)
         if (!memcmp(FName, "NSMakeCollectable", 17)) {
@@ -980,13 +984,55 @@
               ? getUnarySummary(FT, cfmakecollectable)
               : getPersistentStopSummary();
         }
+        else if (!memcmp(FName, "IOBSDNameMatching", 17) ||
+                 !memcmp(FName, "IOServiceMatching", 17)) {
+          // Part of <rdar://problem/6961230>. (IOKit)
+          // This should be addressed using a API table.
+          S = getPersistentSummary(RetEffect::MakeOwned(RetEffect::CF, true),
+                                   DoNothing, DoNothing);
+        }
         break;
-      
+
+      case 21:
+        if (!memcmp(FName, "IOServiceNameMatching", 21)) {
+          // Part of <rdar://problem/6961230>. (IOKit)
+          // This should be addressed using a API table.
+          S = getPersistentSummary(RetEffect::MakeOwned(RetEffect::CF, true),
+                                   DoNothing, DoNothing);
+        }
+        break;
+
+      case 24:
+        if (!memcmp(FName, "IOServiceAddNotification", 24)) {
+          // Part of <rdar://problem/6961230>. (IOKit)
+          // This should be addressed using a API table.
+          ScratchArgs = AF.Add(ScratchArgs, 2, DecRef);
+          S = getPersistentSummary(RetEffect::MakeNoRet(), DoNothing, DoNothing);         
+        }
+        break;
+        
+      case 25:
+        if (!memcmp(FName, "IORegistryEntryIDMatching", 25)) {
+          // Part of <rdar://problem/6961230>. (IOKit)
+          // This should be addressed using a API table.
+          S = getPersistentSummary(RetEffect::MakeOwned(RetEffect::CF, true),
+                                   DoNothing, DoNothing);
+        }
+        break;
+        
+      case 26:
+        if (!memcmp(FName, "IOOpenFirmwarePathMatching", 26)) {
+          // Part of <rdar://problem/6961230>. (IOKit)
+          // This should be addressed using a API table.
+          S = getPersistentSummary(RetEffect::MakeOwned(RetEffect::CF, true),
+                                   DoNothing, DoNothing);          
+        }
+        break;
+
       case 27:
         if (!memcmp(FName, "IOServiceGetMatchingService", 27)) {
           // Part of <rdar://problem/6961230>.
           // This should be addressed using a API table.
-          assert (ScratchArgs.isEmpty());
           ScratchArgs = AF.Add(ScratchArgs, 1, DecRef);
           S = getPersistentSummary(RetEffect::MakeNoRet(), DoNothing, DoNothing);         
         }
@@ -997,11 +1043,19 @@
           // FIXES: <rdar://problem/6326900>
           // This should be addressed using a API table.  This strcmp is also
           // a little gross, but there is no need to super optimize here.
-          assert (ScratchArgs.isEmpty());
           ScratchArgs = AF.Add(ScratchArgs, 1, DecRef);
           S = getPersistentSummary(RetEffect::MakeNoRet(), DoNothing, DoNothing);
         }
         break;
+        
+      case 32:
+        if (!memcmp(FName, "IOServiceAddMatchingNotification", 32)) {
+          // Part of <rdar://problem/6961230>.
+          // This should be addressed using a API table.
+          ScratchArgs = AF.Add(ScratchArgs, 2, DecRef);
+          S = getPersistentSummary(RetEffect::MakeNoRet(), DoNothing, DoNothing);         
+        }
+        break;
     }
     
     // Did we get a summary?





More information about the cfe-commits mailing list