retain/release checker: Improve diagnostics to indicate that CF objects are not automatically garbage collected.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@63187 91177308-0d34-0410-b5e6-96231b3b80d8
diff --git a/test/Analysis/CFDateGC.m b/test/Analysis/CFDateGC.m
index 5ed8ae9..c405fe2 100644
--- a/test/Analysis/CFDateGC.m
+++ b/test/Analysis/CFDateGC.m
@@ -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() {