1*67e74705SXin Li// RUN: %clang_cc1 -triple x86_64-apple-darwin10 -analyze -analyzer-checker=core,osx.cocoa.RetainCount -verify %s 2*67e74705SXin Li// RUN: %clang_cc1 -triple x86_64-apple-darwin10 -analyze -analyzer-checker=core,osx.cocoa.RetainCount -verify %s -x objective-c++ 3*67e74705SXin Li 4*67e74705SXin Li// The special thing about this file is that CFRetain and CFRelease are marked 5*67e74705SXin Li// as cf_audited_transfer. 6*67e74705SXin Li 7*67e74705SXin Li#pragma clang arc_cf_code_audited begin 8*67e74705SXin Litypedef const void * CFTypeRef; 9*67e74705SXin Liextern CFTypeRef CFRetain(CFTypeRef cf); 10*67e74705SXin Liextern void CFRelease(CFTypeRef cf); 11*67e74705SXin Li 12*67e74705SXin Liextern CFTypeRef CFCreateSomethingAudited(); 13*67e74705SXin Li#pragma clang arc_cf_code_audited end 14*67e74705SXin Li 15*67e74705SXin Liextern CFTypeRef CFCreateSomethingUnaudited(); 16*67e74705SXin Li 17*67e74705SXin Livoid testAudited() { 18*67e74705SXin Li CFTypeRef obj = CFCreateSomethingAudited(); // no-warning 19*67e74705SXin Li CFRelease(obj); // no-warning 20*67e74705SXin Li 21*67e74705SXin Li CFTypeRef obj2 = CFCreateSomethingAudited(); // expected-warning{{leak}} 22*67e74705SXin Li CFRetain(obj2); // no-warning 23*67e74705SXin Li CFRelease(obj2); // no-warning 24*67e74705SXin Li} 25*67e74705SXin Li 26*67e74705SXin Livoid testUnaudited() { 27*67e74705SXin Li CFTypeRef obj = CFCreateSomethingUnaudited(); // no-warning 28*67e74705SXin Li CFRelease(obj); // no-warning 29*67e74705SXin Li 30*67e74705SXin Li CFTypeRef obj2 = CFCreateSomethingUnaudited(); // expected-warning{{leak}} 31*67e74705SXin Li CFRetain(obj2); // no-warning 32*67e74705SXin Li CFRelease(obj2); // no-warning 33*67e74705SXin Li} 34