Files
swift-mirror/test/Interop/Cxx/class/inheritance/inherited-lookup-executable.swift
Gábor Horváth b51b58db30 [6.2][cxx-interop] Fix unqualified name lookup failure
Explanation: C++ interop synthesizes certain forwarding functions in an
_ObjC module. This confuses MemberImportVisibility. This patch adds
logic to work this around by keeping a mapping between the synthesized
and the original function and looks up where the synthesized functions
belong to based on the original functions' parent module.
Scope: C++ forward interop when MemberImportVisibility is enabled.
Issues: rdar://154887575
Original PRs: #82840
Risk: Low, a narrow change makes getModuleContextForNameLookupForCxxDecl more
precise, and it is only used with MemberImportVisibility.
Testing: Added a compiler test.
Reviewers: @egorzhdan, @tshortli, @hnrklssn
2025-07-09 17:59:11 +01:00

53 lines
1.3 KiB
Swift

// RUN: %target-run-simple-swift(-I %S/Inputs/ -Xfrontend -cxx-interoperability-mode=default)
//
// REQUIRES: executable_test
import InheritedLookup
import StdlibUnittest
var InheritedMemberTestSuite = TestSuite("Test if inherited lookup works")
InheritedMemberTestSuite.test("Regular methods resolve to base classes") {
// No inheritance (sanity check)
let one = One()
expectEqual(one.method(), 1)
// One level of inheritance
let iOne = IOne()
expectEqual(iOne.method(), 1)
expectEqual(iOne.methodI(), -1)
// Two levels of inheritance
let iiOne = IIOne()
expectEqual(iiOne.method(), 1)
expectEqual(iiOne.methodI(), -1)
expectEqual(iiOne.methodII(), -11)
// Three levels of inheritance
let iiiOne = IIIOne()
expectEqual(iiiOne.method(), 1)
expectEqual(iiiOne.methodI(), -1)
expectEqual(iiiOne.methodII(), -11)
expectEqual(iiiOne.methodIII(), -111)
}
InheritedMemberTestSuite.test("Eagerly imported methods resolve to base classes") {
// No inheritance (sanity check)
let one = One()
expectEqual(one[0], 1)
// One level of inheritance
let iOne = IOne()
expectEqual(iOne[0], 1)
// Two levels of inheritance
let iiOne = IIOne()
expectEqual(iiOne[0], 1)
// Three levels of inheritance
let iiiOne = IIIOne()
expectEqual(iiiOne[0], 1)
}
runAllTests()