mirror of
https://github.com/apple/swift.git
synced 2025-12-21 12:14:44 +01:00
`recordObjCOverride()` records semantic overrides for imported Obj-C methods. Since these methods are imported from a different language, it doesn't make sense to enforce Swift's member import visibility rules when performing lookups to find overridden methods. Doing so caused the Constrain Solver to lack important information needed to eliminate overloads, resulting in erroneous ambiguities. Resolves rdar://141636723.
59 lines
2.9 KiB
Swift
59 lines
2.9 KiB
Swift
// RUN: %empty-directory(%t)
|
|
// RUN: %target-swift-frontend -emit-module -I %t -I %S/Inputs/MemberImportVisibility -o %t %S/Inputs/MemberImportVisibility/Categories_A.swift
|
|
// RUN: %target-swift-frontend -emit-module -I %t -I %S/Inputs/MemberImportVisibility -o %t %S/Inputs/MemberImportVisibility/Categories_B.swift
|
|
// RUN: %target-swift-frontend -emit-module -I %t -I %S/Inputs/MemberImportVisibility -o %t %S/Inputs/MemberImportVisibility/Categories_C.swift
|
|
// RUN: %target-swift-frontend -emit-module -I %t -I %S/Inputs/MemberImportVisibility -o %t %S/Inputs/MemberImportVisibility/Categories_E.swift
|
|
// RUN: %target-swift-frontend -typecheck %s -I %t -I %S/Inputs/MemberImportVisibility -import-objc-header %S/Inputs/MemberImportVisibility/Bridging.h -verify -swift-version 5
|
|
// RUN: %target-swift-frontend -typecheck %s -I %t -I %S/Inputs/MemberImportVisibility -import-objc-header %S/Inputs/MemberImportVisibility/Bridging.h -verify -swift-version 6
|
|
// RUN: %target-swift-frontend -typecheck %s -I %t -I %S/Inputs/MemberImportVisibility -import-objc-header %S/Inputs/MemberImportVisibility/Bridging.h -verify -swift-version 5 -enable-upcoming-feature MemberImportVisibility -verify-additional-prefix member-visibility-
|
|
|
|
// REQUIRES: objc_interop
|
|
// REQUIRES: swift_feature_MemberImportVisibility
|
|
|
|
import Categories_B
|
|
import Categories_E
|
|
|
|
// expected-member-visibility-note@-1 2 {{add import of module 'Categories_C'}}{{1-1=internal import Categories_C\n}}
|
|
// expected-member-visibility-note@-2 {{add import of module 'Categories_D'}}{{1-1=internal import Categories_D\n}}
|
|
func test(x: X) {
|
|
x.fromA()
|
|
x.fromOverlayForA()
|
|
x.fromB()
|
|
x.fromOverlayForB()
|
|
x.fromC() // expected-member-visibility-error {{instance method 'fromC()' is not available due to missing import of defining module 'Categories_C'}}
|
|
x.fromOverlayForC() // expected-member-visibility-error {{instance method 'fromOverlayForC()' is not available due to missing import of defining module 'Categories_C'}}
|
|
x.fromSubmoduleOfD() // expected-member-visibility-error {{instance method 'fromSubmoduleOfD()' is not available due to missing import of defining module 'Categories_D'}}
|
|
x.fromBridgingHeader()
|
|
x.overridesCategoryMethodOnNSObject()
|
|
}
|
|
|
|
func testAnyObject(a: AnyObject) {
|
|
a.fromA()
|
|
a.fromOverlayForAObjC()
|
|
a.fromB()
|
|
a.fromOverlayForBObjC()
|
|
// FIXME: Better diagnostics?
|
|
// Name lookup for AnyObject already ignored transitive imports, so
|
|
// `MemberImportVisibility` has no effect on these diagnostics.
|
|
a.fromC() // expected-error {{value of type 'AnyObject' has no member 'fromC'}}
|
|
a.fromOverlayForCObjC() // expected-error {{value of type 'AnyObject' has no member 'fromOverlayForCObjC'}}
|
|
a.fromBridgingHeader()
|
|
a.overridesCategoryMethodOnNSObject()
|
|
}
|
|
|
|
extension StructInBridgingHeader {
|
|
init(_ x: Int32) {
|
|
self.init(member: x)
|
|
}
|
|
|
|
var wrappedMember: Int32 {
|
|
return member
|
|
}
|
|
}
|
|
|
|
extension ObjectInBridgingHeader {
|
|
func test() {
|
|
overridesCategoryMethodOnNSObject()
|
|
}
|
|
}
|