mirror of
https://github.com/apple/swift.git
synced 2025-12-14 20:36:38 +01:00
Explanation: There was an inconsistency between non-const and const FRT pointers. The former used Direct_Unowned the latter used Indirect calling convention. We want to use Direct_Unowned for both cases. The crash was the result of a calling convention mismatch between the SILFunctionType of a Swift closure and the SILFunctionType of the C++ function's formal parameter that is taking a function pointer. The compiler tried to insert a conversion between the two function types that does not exist and caused an assertion in debug compilers and miscompilation in production compilers. Issue: rdar://149398905 Risk: Low, the fix is targeted and we change to a well-tested behavior with non-const FRT pointers. Testing: Regression test added. Original PR: #81070 Reviewer: @j-hui
19 lines
372 B
Swift
19 lines
372 B
Swift
// RUN: %target-run-simple-swift(-I %S/Inputs/ -Xfrontend -cxx-interoperability-mode=default)
|
|
//
|
|
// REQUIRES: executable_test
|
|
|
|
import StdlibUnittest
|
|
import Closure
|
|
|
|
var ClosureTestSuite = TestSuite("Closure")
|
|
|
|
ClosureTestSuite.test("ConvertToFunctionPointer") {
|
|
cfunc2({N in})
|
|
}
|
|
|
|
ClosureTestSuite.test("Pass FRT to function pointer") {
|
|
cppGo({N in })
|
|
}
|
|
|
|
runAllTests()
|