blob: fefa3aea63501b106c5732feb66954250df3a201 [file] [log] [blame]
Fariborz Jahanian2908ffb2012-01-31 21:58:23 +00001// RUN: %clang_cc1 -arcmt-check -triple x86_64-apple-darwin10 -fsyntax-only -x objective-c -verify %s
2// DISABLE: mingw32
3// rdar://10387088
4typedef const void * CFTypeRef;
5
6extern
7CFTypeRef CFRetain(CFTypeRef cf);
8
9@interface INTF
10{
11 void *cf_format;
12 id objc_format;
13}
14@end
15
16@interface NSString
17+ (id)stringWithFormat:(NSString *)format;
18@end
19
20@implementation INTF
21- (void) Meth {
22 NSString *result;
23
24 result = (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)}} \
Fariborz Jahanian7eb82f02012-01-31 23:42:37 +000026 // expected-note {{use CFBridgeRelease call to transfer ownership of a +1 'CFTypeRef' (aka 'const void *') into ARC}}
Fariborz Jahanian2908ffb2012-01-31 21:58:23 +000027
28 result = (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)}} \
Fariborz Jahanian7eb82f02012-01-31 23:42:37 +000030 // expected-note {{use CFBridgeRelease call to transfer ownership of a +1 'CFTypeRef' (aka 'const void *') into ARC}}
Fariborz Jahanian2908ffb2012-01-31 21:58:23 +000031
32 result = (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)}} \
Fariborz Jahanian7eb82f02012-01-31 23:42:37 +000034 // expected-note {{use CFBridgeRelease call to transfer ownership of a +1 'CFTypeRef' (aka 'const void *') into ARC}}
Fariborz Jahanian2908ffb2012-01-31 21:58:23 +000035
Fariborz Jahanian9c7aed32012-01-31 22:09:44 +000036 result = (id) CFRetain((CFTypeRef)((objc_format)));
Fariborz Jahanian2908ffb2012-01-31 21:58:23 +000037
38 result = (id) CFRetain(cf_format); // OK
39}
40@end
41