1*67e74705SXin Li// RUN: %clang_cc1 -triple x86_64-apple-darwin10 -fsyntax-only -fobjc-arc -x objective-c %s.result 2*67e74705SXin Li// RUN: arcmt-test --args -triple x86_64-apple-darwin10 -fsyntax-only -x objective-c %s > %t 3*67e74705SXin Li// RUN: diff %t %s.result 4*67e74705SXin Li 5*67e74705SXin Li#include "Common.h" 6*67e74705SXin Li 7*67e74705SXin Litypedef const struct __CFString * CFStringRef; 8*67e74705SXin Liextern const CFStringRef kUTTypePlainText; 9*67e74705SXin Liextern const CFStringRef kUTTypeRTF; 10*67e74705SXin Liextern CFStringRef kNonConst; 11*67e74705SXin Li 12*67e74705SXin Litypedef const struct __CFAllocator * CFAllocatorRef; 13*67e74705SXin Litypedef const struct __CFUUID * CFUUIDRef; 14*67e74705SXin Li 15*67e74705SXin Liextern const CFAllocatorRef kCFAllocatorDefault; 16*67e74705SXin Li 17*67e74705SXin Liextern CFStringRef CFUUIDCreateString(CFAllocatorRef alloc, CFUUIDRef uuid); 18*67e74705SXin Li 19*67e74705SXin Listruct StrS { 20*67e74705SXin Li CFStringRef sref_member; 21*67e74705SXin Li}; 22*67e74705SXin Li 23*67e74705SXin Li@interface NSString : NSObject { 24*67e74705SXin Li CFStringRef sref; 25*67e74705SXin Li struct StrS *strS; 26*67e74705SXin Li} 27*67e74705SXin Li-(id)string; 28*67e74705SXin Li-(id)newString; 29*67e74705SXin Li@end 30*67e74705SXin Li 31*67e74705SXin Livoid f(BOOL b, id p) { 32*67e74705SXin Li NSString *str = (NSString *)kUTTypePlainText; // no change 33*67e74705SXin Li str = b ? kUTTypeRTF : kUTTypePlainText; // no change 34*67e74705SXin Li str = (NSString *)(b ? kUTTypeRTF : kUTTypePlainText); // no change 35*67e74705SXin Li str = (NSString *)p; // no change. 36*67e74705SXin Li 37*67e74705SXin Li str = (__bridge NSString *)kNonConst; 38*67e74705SXin Li str = (__bridge NSString *)(b ? kUTTypeRTF : kNonConst); 39*67e74705SXin Li str = (__bridge NSString *)(b ? kUTTypeRTF : kNonConst); 40*67e74705SXin Li 41*67e74705SXin Li CFUUIDRef _uuid; 42*67e74705SXin Li NSString *_uuidString = (NSString *)CFBridgingRelease(CFUUIDCreateString(kCFAllocatorDefault, _uuid)); 43*67e74705SXin Li _uuidString = (NSString *)CFBridgingRelease(CFUUIDCreateString(kCFAllocatorDefault, _uuid)); 44*67e74705SXin Li _uuidString = CFBridgingRelease(CFRetain(_uuid)); 45*67e74705SXin Li} 46*67e74705SXin Li 47*67e74705SXin Li@implementation NSString (StrExt) 48*67e74705SXin Li- (NSString *)stringEscapedAsURI { 49*67e74705SXin Li CFStringRef str = (__bridge CFStringRef)self; 50*67e74705SXin Li CFStringRef str2 = (__bridge CFStringRef)(self); 51*67e74705SXin Li return self; 52*67e74705SXin Li} 53*67e74705SXin Li@end 54*67e74705SXin Li 55*67e74705SXin Li@implementation NSString 56*67e74705SXin Li-(id)string { 57*67e74705SXin Li if (0) 58*67e74705SXin Li return (__bridge id)(sref); 59*67e74705SXin Li else 60*67e74705SXin Li return (__bridge id)(strS->sref_member); 61*67e74705SXin Li} 62*67e74705SXin Li-(id)newString { return 0; } 63*67e74705SXin Li@end 64*67e74705SXin Li 65*67e74705SXin Liextern void consumeParam(CFStringRef CF_CONSUMED p); 66*67e74705SXin Li 67*67e74705SXin Livoid f2(NSString *s) { 68*67e74705SXin Li CFStringRef ref = (__bridge CFStringRef)([s string]); 69*67e74705SXin Li ref = (__bridge CFStringRef)[s string]; 70*67e74705SXin Li ref = (__bridge CFStringRef)(s.string); 71*67e74705SXin Li ref = CFBridgingRetain([NSString new]); 72*67e74705SXin Li ref = CFBridgingRetain([s newString]); 73*67e74705SXin Li ref = (CFStringRef)CFBridgingRetain([NSString new]); 74*67e74705SXin Li ref = CFBridgingRetain([[NSString alloc] init]); 75*67e74705SXin Li ref = CFBridgingRetain([s string]); 76*67e74705SXin Li ref = (CFStringRef)CFBridgingRetain([s string]); 77*67e74705SXin Li ref = CFBridgingRetain([s string]); 78*67e74705SXin Li ref = CFBridgingRetain(s); 79*67e74705SXin Li ref = CFBridgingRetain(s); 80*67e74705SXin Li 81*67e74705SXin Li consumeParam((CFStringRef)CFBridgingRetain(s)); 82*67e74705SXin Li consumeParam(CFBridgingRetain(s)); 83*67e74705SXin Li} 84