xref: /aosp_15_r20/external/clang/test/Analysis/retain-release-cf-audited.m (revision 67e74705e28f6214e480b399dd47ea732279e315)
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