// RUN: %clang_cc1 -triple x86_64-apple-darwin11 -fsyntax-only -verify %s -fobjc-arc
//
// These tests exist as a means to help ensure that diagnostics aren't printed
// in overload resolution in ObjC.

struct Type1 { int a; };
typedef const __attribute__((objc_bridge(id))) void * CFTypeRef;
@interface Iface1 @end

@interface NeverCalled
- (void) test:(struct Type1 *)arg;
- (void) test2:(CFTypeRef)arg;
@end

@interface TakesIface1
- (void) test:(Iface1 *)arg;
- (void) test2:(Iface1 *)arg;
@end

// PR26085
void testTakesIface1(id x, Iface1 *arg) {
  // This should resolve silently to `TakesIface1`.
  [x test:arg];
  [x test2:arg];
}

@class NSString;
@interface NeverCalledv2
- (void) testStr:(NSString *)arg;
@end

@interface TakesVanillaConstChar
- (void) testStr:(const void *)a;
@end

// Not called out explicitly by PR26085, but related.
void testTakesNSString(id x) {
  // Overload resolution should not emit a diagnostic about needing to add an
  // '@' before "someStringLiteral".
  [x testStr:"someStringLiteral"];
}

id CreateSomething(void);

@interface TakesCFTypeRef
- (void) testCFTypeRef:(CFTypeRef)arg;
@end

@interface NeverCalledv3
- (void) testCFTypeRef:(struct Type1 *)arg;
@end

// Not called out explicitly by PR26085, but related.
void testTakesCFTypeRef(id x) {
  // Overload resolution should occur silently, select the CFTypeRef overload,
  // and produce a single complaint. (with notes)
  [x testCFTypeRef:CreateSomething()]; // expected-error{{implicit conversion of Objective-C pointer type 'id' to C pointer type 'CFTypeRef'}} expected-note{{use __bridge}} expected-note{{use __bridge_retained}}
}
