Files
swift-mirror/test/NameLookup/members_transitive_objc.swift
Allan Shortlidge 94e678da37 ClangImporter: Ignore missing imports in SwiftDeclConverter::recordObjCOverride().
`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.
2024-12-18 08:34:44 -08:00

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