Files
swift-mirror/test/decl/protocol/req/optional_visibility.swift
Slava Pestov 19a37c8a83 Sema: Fix source compatibility break from relaxed witness matching rules
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>.
2018-07-04 00:30:36 -07:00

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: {})
}