llvm-project
40 строк · 1.8 Кб
1// RUN: %clang_cc1 -arcmt-action=check -triple x86_64-apple-darwin10 -fsyntax-only -x objective-c -verify %s
2typedef const void * CFTypeRef;
3CFTypeRef CFBridgingRetain(id X);
4id CFBridgingRelease(CFTypeRef);
5
6extern
7CFTypeRef CFRetain(CFTypeRef cf);
8
9@interface INTF
10{
11void *cf_format;
12id objc_format;
13}
14@end
15
16@interface NSString
17+ (id)stringWithFormat:(NSString *)format;
18@end
19
20@implementation INTF
21- (void) Meth {
22NSString *result;
23
24result = (id) CFRetain([NSString stringWithFormat:@"PBXLoopMode"]); // expected-error {{cast of C pointer type 'CFTypeRef' (aka 'const void *') to Objective-C pointer type 'id' requires a bridged cast}} \
25// expected-note {{use __bridge to convert directly (no change in ownership)}} \
26// expected-note {{use CFBridgingRelease call to transfer ownership of a +1 'CFTypeRef' (aka 'const void *') into ARC}}
27
28result = (id) CFRetain((id)((objc_format))); // expected-error {{cast of C pointer type 'CFTypeRef' (aka 'const void *') to Objective-C pointer type 'id' requires a bridged cast}} \
29// expected-note {{use __bridge to convert directly (no change in ownership)}} \
30// expected-note {{use CFBridgingRelease call to transfer ownership of a +1 'CFTypeRef' (aka 'const void *') into ARC}}
31
32result = (id) CFRetain((id)((cf_format))); // expected-error {{cast of C pointer type 'CFTypeRef' (aka 'const void *') to Objective-C pointer type 'id' requires a bridged cast}} \
33// expected-note {{use __bridge to convert directly (no change in ownership)}} \
34// expected-note {{use CFBridgingRelease call to transfer ownership of a +1 'CFTypeRef' (aka 'const void *') into ARC}}
35
36result = (id) CFRetain((CFTypeRef)((objc_format)));
37
38result = (id) CFRetain(cf_format); // OK
39}
40@end
41
42