diff options
Diffstat (limited to 'test/Analysis/objc-arc.m')
-rw-r--r-- | test/Analysis/objc-arc.m | 30 |
1 files changed, 29 insertions, 1 deletions
diff --git a/test/Analysis/objc-arc.m b/test/Analysis/objc-arc.m index 08fca7659c..30e4ffcadd 100644 --- a/test/Analysis/objc-arc.m +++ b/test/Analysis/objc-arc.m @@ -123,7 +123,7 @@ void rdar9424882() { typedef const void *CFTypeRef; typedef const struct __CFString *CFStringRef; -@interface NSString +@interface NSString : NSObject - (id) self; @end @@ -231,3 +231,31 @@ id rdar14061675() { return result; } +typedef const void * CFTypeRef; +typedef const struct __CFString * CFStringRef; +typedef const struct __CFAllocator * CFAllocatorRef; +extern const CFAllocatorRef kCFAllocatorDefault; + +extern CFTypeRef CFRetain(CFTypeRef cf); +extern void CFRelease(CFTypeRef cf); + + +void check_bridge_retained_cast() { + NSString *nsStr = [[NSString alloc] init]; + CFStringRef cfStr = (__bridge_retained CFStringRef)nsStr; + CFRelease(cfStr); // no-warning +} + +@interface A; +@end + +void check_bridge_to_non_cocoa(CFStringRef s) { + A *a = (__bridge_transfer A *) s; // no-crash +} + +struct B; + +struct B * check_bridge_to_non_cf() { + NSString *s = [[NSString alloc] init]; + return (__bridge struct B*) s; +} |