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>.
14 lines
385 B
Swift
14 lines
385 B
Swift
// RUN: %target-typecheck-verify-swift -enable-objc-interop -swift-version 4
|
|
|
|
@objc protocol Opt {
|
|
@objc optional func f(callback: @escaping () -> ())
|
|
}
|
|
|
|
class Conforms : Opt {
|
|
private func f(callback: () -> ()) {} // expected-note {{'f' declared here}}
|
|
}
|
|
|
|
func g(x: Conforms) {
|
|
_ = x.f(callback: {}) // expected-error {{'f' is inaccessible due to 'private' protection level}}
|
|
}
|