// RUN: %target-swift-frontend %s -emit-sil -o /dev/null -verify -strict-concurrency=complete // REQUIRES: concurrency // REQUIRES: asserts // REQUIRES: OS=macosx do { struct Test { init(value: T) {} init(value: T) {} } struct SendableOnly { init(value: T) {} } func testNonSendable(v: T) { // expected-note {{consider making generic parameter 'T' conform to the 'Sendable' protocol}} _ = Test(value: v) // Ok (non-Sendable overload) _ = SendableOnly(value: v) // expected-warning@-1 {{type 'T' does not conform to the 'Sendable' protocol}} } func testSendable(v: T) { _ = Test(value: v) // Ok _ = SendableOnly(value: v) // Ok } } do { class K { func value() {} } struct X { var fn: (Int) -> K func fn(_: Int) -> Int { 42 } } func sendable(_ fn: (Int) -> T) -> T { fn(42) } func sendable(_ fn: (Int) -> T) -> T { fn(0) } func test(x: X) { let res = sendable(x.fn) // Ok (non-ambiguous and non-Sendable overload) res.value() // To make sure that previous expression picks a property let _: K = sendable(x.fn) // Ok (picks `sendable` with a property) let _: Int = sendable(x.fn) // Ok (picks `sendable` with a method) } }