// RUN: %clang_analyze_cc1 -triple x86_64-apple-darwin10 -analyzer-checker=core,osx.cocoa.RetainCount -verify %s // RUN: %clang_analyze_cc1 -triple x86_64-apple-darwin10 -analyzer-checker=core,osx.cocoa.RetainCount -verify %s -x objective-c++ // The special thing about this file is that CFRetain and CFRelease are marked // as cf_audited_transfer. #pragma clang arc_cf_code_audited begin typedef const void * CFTypeRef; extern CFTypeRef CFRetain(CFTypeRef cf); extern void CFRelease(CFTypeRef cf); extern CFTypeRef CFCreateSomethingAudited(); #pragma clang arc_cf_code_audited end extern CFTypeRef CFCreateSomethingUnaudited(); void testAudited() { CFTypeRef obj = CFCreateSomethingAudited(); // no-warning CFRelease(obj); // no-warning CFTypeRef obj2 = CFCreateSomethingAudited(); // expected-warning{{leak}} CFRetain(obj2); // no-warning CFRelease(obj2); // no-warning } void testUnaudited() { CFTypeRef obj = CFCreateSomethingUnaudited(); // no-warning CFRelease(obj); // no-warning CFTypeRef obj2 = CFCreateSomethingUnaudited(); // expected-warning{{leak}} CFRetain(obj2); // no-warning CFRelease(obj2); // no-warning }