From e1420522bd9f8ea0b11c024522be5ede504b44f6 Mon Sep 17 00:00:00 2001 From: Allan Shortlidge Date: Thu, 9 Oct 2025 16:42:11 -0700 Subject: [PATCH] Tests: Add a MemberImportVisibility test case for rdar://162130647. --- .../Inputs/MemberImportVisibility/members_A.swift | 6 ++++++ .../Inputs/MemberImportVisibility/members_B.swift | 6 ++++++ .../Inputs/MemberImportVisibility/members_C.swift | 12 ++++++++++++ test/NameLookup/member_import_visibility.swift | 11 +++++++++++ 4 files changed, 35 insertions(+) diff --git a/test/NameLookup/Inputs/MemberImportVisibility/members_A.swift b/test/NameLookup/Inputs/MemberImportVisibility/members_A.swift index 5cebe137152d9..3f6e8f7657986 100644 --- a/test/NameLookup/Inputs/MemberImportVisibility/members_A.swift +++ b/test/NameLookup/Inputs/MemberImportVisibility/members_A.swift @@ -79,3 +79,9 @@ public protocol ProtocolInA { extension ProtocolInA { public func defaultedRequirementInA() { } } + +public struct EquatableInA: Equatable { + public static func ==(_: Self, _: Self) -> Bool { + false + } +} diff --git a/test/NameLookup/Inputs/MemberImportVisibility/members_B.swift b/test/NameLookup/Inputs/MemberImportVisibility/members_B.swift index 05c8cd51fe03a..9f59295adbae2 100644 --- a/test/NameLookup/Inputs/MemberImportVisibility/members_B.swift +++ b/test/NameLookup/Inputs/MemberImportVisibility/members_B.swift @@ -59,3 +59,9 @@ open class DerivedClassInB: BaseClassInA { extension ProtocolInA { public func defaultedRequirementInB() { } } + +public struct EquatableInB: Equatable { + public static func ==(_: EquatableInB, _: EquatableInB) -> Bool { + false + } +} diff --git a/test/NameLookup/Inputs/MemberImportVisibility/members_C.swift b/test/NameLookup/Inputs/MemberImportVisibility/members_C.swift index 8cc0492998ad6..a8a7b127fb1b0 100644 --- a/test/NameLookup/Inputs/MemberImportVisibility/members_C.swift +++ b/test/NameLookup/Inputs/MemberImportVisibility/members_C.swift @@ -52,3 +52,15 @@ open class DerivedClassInC: DerivedClassInB { extension ProtocolInA { public func defaultedRequirementInC() { } } + +public struct EquatableInC: Equatable { + public static func ==(_: EquatableInC, _: EquatableInC) -> Bool { + false + } +} + +public struct HasEquatableMembers { + public var a: EquatableInA + public var b: EquatableInB + public var c: EquatableInC +} diff --git a/test/NameLookup/member_import_visibility.swift b/test/NameLookup/member_import_visibility.swift index bdd2d5833cd0a..741dadc37b27c 100644 --- a/test/NameLookup/member_import_visibility.swift +++ b/test/NameLookup/member_import_visibility.swift @@ -167,3 +167,14 @@ func testLeadingDotSyntax() { takesP(.zInC) takesP(.zAmbiguous) } + +func testConformanceMember(_ h1: HasEquatableMembers, _ h2: HasEquatableMembers) { + _ = h1.a == h2.a + // Technically, this references the EquatableInB.== member that hasn't been + // imported. However, the conformance of EquatableInB: Equatable is visible + // here because conformances are not yet subject to import visibility rules. + // As a result, the == requirement is technically visible and therefore there + // should be no diagnostic with MemberImportVisibility enabled. + _ = h1.b == h2.b + _ = h1.c == h2.c +}