blob: 9488f4b98c5c0780140c70af48a7ed99c900ac90 [file] [log] [blame]
// RUN: %target-typecheck-verify-swift %clang-importer-sdk
// REQUIRES: objc_interop
import Foundation
func foo1(_ a: [Int]) {}
func foo2(_ a : UnsafePointer<Int>) {}
func foo4(_ a : UnsafeMutablePointer<Int>) {}
func foo3 () {
let j = 3
foo2(j) // expected-error {{cannot convert value of type 'Int' to expected argument type 'UnsafePointer<Int>'}} {{none}}
foo4(j) // expected-error {{cannot convert value of type 'Int' to expected argument type 'UnsafeMutablePointer<Int>'}} {{none}}
var i = 3
foo2(i) // expected-error {{cannot convert value of type 'Int' to expected argument type 'UnsafePointer<Int>'}} {{8-8=&}}
foo4(i) // expected-error {{cannot convert value of type 'Int' to expected argument type 'UnsafeMutablePointer<Int>'}} {{8-8=&}}
foo2(1) // expected-error {{cannot convert value of type 'Int' to expected argument type 'UnsafePointer<Int>'}} {{none}}
foo4(1) // expected-error {{cannot convert value of type 'Int' to expected argument type 'UnsafeMutablePointer<Int>'}} {{none}}
}
class A {}
class B : A {}
func foo5(b : B) {}
func foo6(a : A) {
foo5(b : a) // expected-error {{cannot convert value of type 'A' to expected argument type 'B'}} {{13-13= as! B}}
}
func foo7(b : [B]) {}
func foo8(a : [A]) {
foo7(b : a) // expected-error {{cannot convert value of type '[A]' to expected argument type '[B]'}} {{13-13= as! [B]}}
}
protocol P1 {}
struct S1 : P1 {}
func foo9(s : S1) {}
func foo10(p : P1) {
foo9(s : p) // expected-error {{cannot convert value of type 'P1' to expected argument type 'S1'}} {{13-13= as! S1}}
}
func foo11(a : [AnyHashable]) {}
func foo12(b : [NSObject]) {
foo11(a : b)
}
func foo13(a : [AnyHashable : Any]) {}
func foo14(b : [NSObject : AnyObject]) {
foo13(a : b)
}
// Add a minimal test for inout-to-pointer conversion involving a
// generic function with a protocol constraint of Equatable.
infix operator =*= : ComparisonPrecedence
func =*= <T : Equatable>(lhs: T, rhs: T) -> Bool {
return lhs == rhs
}
func =*= <T : Equatable>(lhs: T?, rhs: T?) -> Bool {
return lhs == rhs
}
class C {}
var o = C()
var p: UnsafeMutablePointer<C>? = nil
_ = p =*= &o
func rdar25963182(_ bytes: [UInt8] = nil) {}
// expected-error@-1 {{nil default argument value cannot be converted to type}}