Files
swift-mirror/test/Compatibility/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

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}}
}