[cfe-commits] r63187 - in /cfe/trunk: lib/Analysis/CFRefCount.cpp test/Analysis/CFDateGC.m

Ted Kremenek kremenek at apple.com
Tue Jan 27 22:25:49 PST 2009


Author: kremenek
Date: Wed Jan 28 00:25:48 2009
New Revision: 63187

URL: http://llvm.org/viewvc/llvm-project?rev=63187&view=rev
Log:
retain/release checker: Improve diagnostics to indicate that CF objects are not automatically garbage collected.

Modified:
    cfe/trunk/lib/Analysis/CFRefCount.cpp
    cfe/trunk/test/Analysis/CFDateGC.m

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

==============================================================================
--- cfe/trunk/lib/Analysis/CFRefCount.cpp (original)
+++ cfe/trunk/lib/Analysis/CFRefCount.cpp Wed Jan 28 00:25:48 2009
@@ -2356,8 +2356,15 @@
       os << " returns an Objective-C object with a ";
     }
     
-    if (CurrV.isOwned())
-        os << "+1 retain count (owning reference).";
+    if (CurrV.isOwned()) {
+      os << "+1 retain count (owning reference).";
+      
+      if (static_cast<CFRefBug&>(getBugType()).getTF().isGCEnabled()) {
+        assert(CurrV.getObjKind() == RetEffect::CF);
+        os << "  "
+          "Core Foundation objects are not automatically garbage collected.";
+      }
+    }
     else {
       assert (CurrV.isNotOwned());
       os << "+0 retain count (non-owning reference).";

Modified: cfe/trunk/test/Analysis/CFDateGC.m
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/Analysis/CFDateGC.m?rev=63187&r1=63186&r2=63187&view=diff

==============================================================================
--- cfe/trunk/test/Analysis/CFDateGC.m (original)
+++ cfe/trunk/test/Analysis/CFDateGC.m Wed Jan 28 00:25:48 2009
@@ -26,6 +26,7 @@
 static __inline__ __attribute__((always_inline)) id NSMakeCollectable(CFTypeRef cf) {}
 @protocol NSObject  - (BOOL)isEqual:(id)object;
 - (oneway void)release;
+- (id)retain;
 @end
 @class NSArray;
 
@@ -46,7 +47,7 @@
 
 // The following two test cases verifies that CFMakeCollectable is a no-op
 // in non-GC mode and a "release" in GC mode.
-CFAbsoluteTime f2_leak() {
+CFAbsoluteTime f2_use_after_release() {
   CFAbsoluteTime t = CFAbsoluteTimeGetCurrent();
   CFDateRef date = CFDateCreate(0, t);
   CFRetain(date);
@@ -68,6 +69,11 @@
   return t;
 }
 
+void f3_leak_with_gc() {
+  CFDateRef date = CFDateCreate(0, CFAbsoluteTimeGetCurrent());
+  [[(id) date retain] release]; // expected-warning{{leak}}
+}
+
 // The following test case verifies that we "stop tracking" a retained object
 // when it is passed as an argument to an implicitly defined function.
 CFAbsoluteTime f4() {





More information about the cfe-commits mailing list