mirror of
https://github.com/apple/swift.git
synced 2025-12-21 12:14:44 +01:00
This is fix for a source compat regression from:
commit 790625ab5b
Author: Doug Gregor <dgregor@apple.com>
Date: Mon Mar 19 15:29:32 2018 -0700
Allow a witness's noescape parameter to match a requirement's escaping parameter
The regression is not severe but its easy enough to fix.
With the above change, it was possible for an optional requirement that did
not have a witness in Swift 4.1 to pick up a witness in Swift 4.2, because
the escaping/noescape mismatch prevented it from being considered in Swift 4.1.
If the new witness was not sufficiently visible, this caused a source
compatibility regression.
Work around this by discarding the witness if its not sufficiently
visible. In -swift-version 5, the hack expires, and we revert to the
stricter, more consistent behavior.
Fixes <rdar://problem/39614880>.
16 lines
497 B
Swift
16 lines
497 B
Swift
// RUN: %target-typecheck-verify-swift -enable-objc-interop -swift-version 5
|
|
|
|
@objc protocol Opt {
|
|
@objc optional func f(callback: @escaping () -> ())
|
|
}
|
|
|
|
class Conforms : Opt {
|
|
private func f(callback: () -> ()) {}
|
|
// expected-error@-1 {{method 'f(callback:)' must be declared internal because it matches a requirement in internal protocol 'Opt'}}
|
|
// expected-note@-2 {{mark the instance method as 'internal' to satisfy the requirement}}
|
|
}
|
|
|
|
func g(x: Conforms) {
|
|
_ = x.f(callback: {})
|
|
}
|