80 lines
		
	
	
		
			2.3 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
			
		
		
	
	
			80 lines
		
	
	
		
			2.3 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
| // RUN: %clang_cc1 -triple x86_64-apple-darwin10 -fsyntax-only -fobjc-arc -x objective-c %s.result
 | |
| // RUN: arcmt-test --args -triple x86_64-apple-darwin10 -fsyntax-only -x objective-c %s > %t
 | |
| // RUN: diff %t %s.result
 | |
| // DISABLE: mingw32
 | |
| 
 | |
| #include "Common.h"
 | |
| 
 | |
| typedef const struct __CFString * CFStringRef;
 | |
| extern const CFStringRef kUTTypePlainText;
 | |
| extern const CFStringRef kUTTypeRTF;
 | |
| 
 | |
| typedef const struct __CFAllocator * CFAllocatorRef;
 | |
| typedef const struct __CFUUID * CFUUIDRef;
 | |
| 
 | |
| extern const CFAllocatorRef kCFAllocatorDefault;
 | |
| 
 | |
| extern CFStringRef CFUUIDCreateString(CFAllocatorRef alloc, CFUUIDRef uuid);
 | |
| 
 | |
| struct StrS {
 | |
|   CFStringRef sref_member;
 | |
| };
 | |
| 
 | |
| @interface NSString : NSObject {
 | |
|   CFStringRef sref;
 | |
|   struct StrS *strS;
 | |
| }
 | |
| -(id)string;
 | |
| -(id)newString;
 | |
| @end
 | |
| 
 | |
| void f(BOOL b, id p) {
 | |
|   NSString *str = (__bridge NSString *)kUTTypePlainText;
 | |
|   str = (__bridge NSString *)(b ? kUTTypeRTF : kUTTypePlainText);
 | |
|   str = (__bridge NSString *)(b ? kUTTypeRTF : kUTTypePlainText);
 | |
|   str = (NSString *)p; // no change.
 | |
| 
 | |
|   CFUUIDRef   _uuid;
 | |
|   NSString *_uuidString = (NSString *)CFBridgingRelease(CFUUIDCreateString(kCFAllocatorDefault, _uuid));
 | |
|   _uuidString = (NSString *)CFBridgingRelease(CFUUIDCreateString(kCFAllocatorDefault, _uuid));
 | |
|   _uuidString = CFBridgingRelease(CFRetain(_uuid));
 | |
| }
 | |
| 
 | |
| @implementation NSString (StrExt)
 | |
| - (NSString *)stringEscapedAsURI {
 | |
|   CFStringRef str = (__bridge CFStringRef)self;
 | |
|   CFStringRef str2 = (__bridge CFStringRef)(self);
 | |
|   return self;
 | |
| }
 | |
| @end
 | |
| 
 | |
| @implementation NSString
 | |
| -(id)string {
 | |
|   if (0)
 | |
|     return (__bridge id)(sref);
 | |
|   else
 | |
|     return (__bridge id)(strS->sref_member);
 | |
| }
 | |
| -(id)newString { return 0; }
 | |
| @end
 | |
| 
 | |
| extern void consumeParam(CFStringRef CF_CONSUMED p);
 | |
| 
 | |
| void f2(NSString *s) {
 | |
|   CFStringRef ref = (__bridge CFStringRef)([s string]);
 | |
|   ref = (__bridge CFStringRef)[s string];
 | |
|   ref = (__bridge CFStringRef)(s.string);
 | |
|   ref = CFBridgingRetain([NSString new]);
 | |
|   ref = CFBridgingRetain([s newString]);
 | |
|   ref = (CFStringRef)CFBridgingRetain([NSString new]);
 | |
|   ref = CFBridgingRetain([[NSString alloc] init]);
 | |
|   ref = CFBridgingRetain([s string]);
 | |
|   ref = (CFStringRef)CFBridgingRetain([s string]);
 | |
|   ref = CFBridgingRetain([s string]);
 | |
|   ref = CFBridgingRetain(s);
 | |
|   ref = CFBridgingRetain(s);
 | |
| 
 | |
|   consumeParam((CFStringRef)CFBridgingRetain(s));
 | |
|   consumeParam(CFBridgingRetain(s));
 | |
| }
 | 
