]> granicus.if.org Git - clang/commitdiff
retain/release checker: Use simpler utility method for creating class method summarie...
authorTed Kremenek <kremenek@apple.com>
Thu, 15 Oct 2009 22:25:12 +0000 (22:25 +0000)
committerTed Kremenek <kremenek@apple.com>
Thu, 15 Oct 2009 22:25:12 +0000 (22:25 +0000)
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@84210 91177308-0d34-0410-b5e6-96231b3b80d8

lib/Analysis/CFRefCount.cpp
test/Analysis/retain-release.m

index eb1265dda7ead915109d2c4e2d6ba97fdf28cda2..2da0297e41236abd81183b182cebcbc971659cfe 100644 (file)
@@ -1009,7 +1009,7 @@ RetainSummary* RetainSummaryManager::getSummary(FunctionDecl* FD) {
           // 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);
+          S = getPersistentSummary(RetEffect::MakeNoRet(), DoNothing,DoNothing);
         }
         break;
 
@@ -1432,16 +1432,14 @@ void RetainSummaryManager::InitializeClassMethodSummaries() {
   addNSObjectClsMethSummary(GetUnarySelector("allocWithZone", Ctx), Summ);
 
   // Create the [NSAssertionHandler currentHander] summary.
-  addClsMethSummary(&Ctx.Idents.get("NSAssertionHandler"),
-                GetNullarySelector("currentHandler", Ctx),
+  addClassMethSummary("NSAssertionHandler", "currentHandler",
                 getPersistentSummary(RetEffect::MakeNotOwned(RetEffect::ObjC)));
 
   // Create the [NSAutoreleasePool addObject:] summary.
   ScratchArgs = AF.Add(ScratchArgs, 0, Autorelease);
-  addClsMethSummary(&Ctx.Idents.get("NSAutoreleasePool"),
-                    GetUnarySelector("addObject", Ctx),
-                    getPersistentSummary(RetEffect::MakeNoRet(),
-                                         DoNothing, Autorelease));
+  addClassMethSummary("NSAutoreleasePool", "addObject",
+                      getPersistentSummary(RetEffect::MakeNoRet(),
+                                           DoNothing, Autorelease));
 
   // Create the summaries for [NSObject performSelector...].  We treat
   // these as 'stop tracking' for the arguments because they are often
index 7076bb294254214ff82f39d9257b784ca5acfea7..a14a50b0fb6c66615b0a3291ee61a35f23bdcb37 100644 (file)
@@ -1097,6 +1097,22 @@ CVReturn rdar_7283567_2(CFAllocatorRef allocator, size_t width, size_t height,
               pixelBufferAttributes, pixelBufferOut) ;
 }
 
+//===----------------------------------------------------------------------===//
+// <rdar://problem/7306898> clang thinks [NSCursor dragCopyCursor] returns a
+//                          retained reference
+//===----------------------------------------------------------------------===//
+
+@interface NSCursor : NSObject
++ (NSCursor *)dragCopyCursor;
+@end
+
+void rdar7306898(void) {
+  // 'dragCopyCursor' does not follow Cocoa's fundamental rule.  It is a noun, not an sentence
+  // implying a 'copy' of something.
+  NSCursor *c =  [NSCursor dragCopyCursor]; // no-warning
+  NSNumber *number = [[NSNumber alloc] initWithInt:5]; // expected-warning{{leak}}
+}
+
 //===----------------------------------------------------------------------===//
 // Tests of ownership attributes.
 //===----------------------------------------------------------------------===//