// 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"

@interface NSString : NSObject
-(id)string;
-(id)newString;
@end

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);

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 = (__bridge_transfer NSString *)CFUUIDCreateString(kCFAllocatorDefault, _uuid);
  _uuidString = (__bridge_transfer NSString *)CFUUIDCreateString(kCFAllocatorDefault, _uuid);
  _uuidString = (__bridge_transfer NSString *)(CFRetain(_uuid));
}

@implementation NSString (StrExt)
- (NSString *)stringEscapedAsURI {
  CFStringRef str = (__bridge CFStringRef)self;
  CFStringRef str2 = (__bridge CFStringRef)(self);
  return self;
}
@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 = (__bridge_retained CFStringRef)([NSString new]);
  ref = (__bridge_retained CFStringRef)([s newString]);
  ref = (__bridge_retained CFStringRef)[NSString new];
  ref = (__bridge_retained CFStringRef)([[NSString alloc] init]);
  ref = (__bridge_retained CFStringRef)([s string]);
  ref = (__bridge_retained CFStringRef)[s string];
  ref = (__bridge_retained CFTypeRef)([s string]);
  ref = (__bridge_retained CFTypeRef)(s);
  ref = (__bridge_retained CFStringRef)(s);

  consumeParam((__bridge_retained CFStringRef)s);
  consumeParam((__bridge_retained CFStringRef)(s));
}
