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 = (NSString *)kNonConst; 38*67e74705SXin Li str = b ? kUTTypeRTF : kNonConst; 39*67e74705SXin Li str = (NSString *)(b ? kUTTypeRTF : kNonConst); 40*67e74705SXin Li 41*67e74705SXin Li CFUUIDRef _uuid; 42*67e74705SXin Li NSString *_uuidString = (NSString *)CFUUIDCreateString(kCFAllocatorDefault, _uuid); 43*67e74705SXin Li _uuidString = [(NSString *)CFUUIDCreateString(kCFAllocatorDefault, _uuid) autorelease]; 44*67e74705SXin Li _uuidString = CFRetain(_uuid); 45*67e74705SXin Li} 46*67e74705SXin Li 47*67e74705SXin Li@implementation NSString (StrExt) 48*67e74705SXin Li- (NSString *)stringEscapedAsURI { 49*67e74705SXin Li CFStringRef str = (CFStringRef)self; 50*67e74705SXin Li CFStringRef str2 = 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 sref; 59*67e74705SXin Li else 60*67e74705SXin Li return 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 = [s string]; 69*67e74705SXin Li ref = (CFStringRef)[s string]; 70*67e74705SXin Li ref = s.string; 71*67e74705SXin Li ref = [NSString new]; 72*67e74705SXin Li ref = [s newString]; 73*67e74705SXin Li ref = (CFStringRef)[NSString new]; 74*67e74705SXin Li ref = [[NSString alloc] init]; 75*67e74705SXin Li ref = [[s string] retain]; 76*67e74705SXin Li ref = CFRetain((CFStringRef)[s string]); 77*67e74705SXin Li ref = CFRetain([s string]); 78*67e74705SXin Li ref = CFRetain(s); 79*67e74705SXin Li ref = [s retain]; 80*67e74705SXin Li 81*67e74705SXin Li consumeParam((CFStringRef)s); 82*67e74705SXin Li consumeParam(s); 83*67e74705SXin Li} 84