mirror of
https://github.com/apple/swift.git
synced 2025-12-14 20:36:38 +01:00
SIL Functions are serialized in canonical SIL before they have their final ABI adjusted for large function arguments. Large function argument ABI is adjusted to be indirect as part of the transition from canonical SIL to lowered SIL. This means that if we deserialize a function from another module in canonical SIL and attempt to call it in IRGen we will call it with the wrong ABI implying if we reference any fields of the type in the deinit we will most likely crash (among other potential issues). This patch fixes the issue by changing IRGen to not lazily deserialize the moveonly deinit table and its associated functions. Instead if we do not have our table already deserialized, we just call the function's deinit via the destroy value deinit table. rdar://110496872
55 lines
3.3 KiB
Swift
55 lines
3.3 KiB
Swift
// Normal test
|
|
|
|
// RUN: %empty-directory(%t/normal)
|
|
// RUN: %target-build-swift-dylib(%t/normal/%target-library-name(MoveOnlySplit)) %S/Inputs/moveonly_split_module_source_input.swift -emit-module -emit-module-path %t/normal/MoveOnlySplit.swiftmodule -module-name MoveOnlySplit -DTEST_LIBRARY_WITHOUT_LIBRARY_EVOLUTION
|
|
// RUN: %target-codesign %t/normal/%target-library-name(MoveOnlySplit)
|
|
|
|
// RUN: %target-build-swift %s -lMoveOnlySplit -I %t/normal -L %t/normal -o %t/normal/main %target-rpath(%t/normal)
|
|
// RUN: %target-codesign %t/normal/main
|
|
// RUN: %target-run %t/normal/main %t/normal/%target-library-name(MoveOnlySplit) | %FileCheck %s
|
|
|
|
// Normal large
|
|
|
|
// RUN: %empty-directory(%t/normal_large)
|
|
// RUN: %target-build-swift-dylib(%t/normal_large/%target-library-name(MoveOnlySplit)) %S/Inputs/moveonly_split_module_source_input.swift -emit-module -emit-module-path %t/normal_large/MoveOnlySplit.swiftmodule -module-name MoveOnlySplit -DTEST_LIBRARY_WITHOUT_LIBRARY_EVOLUTION -DMAKE_LARGE
|
|
// RUN: %target-codesign %t/normal_large/%target-library-name(MoveOnlySplit)
|
|
|
|
// RUN: %target-build-swift %s -lMoveOnlySplit -I %t/normal_large -L %t/normal_large -o %t/normal_large/main %target-rpath(%t/normal_large)
|
|
// RUN: %target-codesign %t/normal_large/main
|
|
// RUN: %target-run %t/normal_large/main %t/normal_large/%target-library-name(MoveOnlySplit) | %FileCheck %s
|
|
|
|
// Library evolution test
|
|
|
|
// RUN: %empty-directory(%t/library_evolution)
|
|
// RUN: %target-build-swift-dylib(%t/library_evolution/%target-library-name(MoveOnlySplit)) %S/Inputs/moveonly_split_module_source_input.swift -emit-module -emit-module-path %t/library_evolution/MoveOnlySplit.swiftmodule -module-name MoveOnlySplit -DTEST_LIBRARY_WITH_LIBRARY_EVOLUTION
|
|
// RUN: %target-codesign %t/library_evolution/%target-library-name(MoveOnlySplit)
|
|
|
|
// RUN: %target-build-swift %s -lMoveOnlySplit -I %t/library_evolution -L %t/library_evolution -o %t/library_evolution/main %target-rpath(%t/library_evolution)
|
|
// RUN: %target-codesign %t/library_evolution/main
|
|
// RUN: %target-run %t/library_evolution/main %t/library_evolution/%target-library-name(MoveOnlySplit) | %FileCheck -check-prefix=CHECK-LIBRARY-EVOLUTION %s
|
|
|
|
// Library evolution large
|
|
|
|
// RUN: %empty-directory(%t/library_evolution_large)
|
|
// RUN: %target-build-swift-dylib(%t/library_evolution_large/%target-library-name(MoveOnlySplit)) %S/Inputs/moveonly_split_module_source_input.swift -emit-module -emit-module-path %t/library_evolution_large/MoveOnlySplit.swiftmodule -module-name MoveOnlySplit -DTEST_LIBRARY_WITH_LIBRARY_EVOLUTION -DMAKE_LARGE
|
|
// RUN: %target-codesign %t/library_evolution_large/%target-library-name(MoveOnlySplit)
|
|
|
|
// RUN: %target-build-swift %s -lMoveOnlySplit -I %t/library_evolution_large -L %t/library_evolution_large -o %t/library_evolution_large/main %target-rpath(%t/library_evolution_large)
|
|
// RUN: %target-codesign %t/library_evolution_large/main
|
|
// RUN: %target-run %t/library_evolution_large/main %t/library_evolution_large/%target-library-name(MoveOnlySplit) | %FileCheck -check-prefix=CHECK-LIBRARY-EVOLUTION %s
|
|
|
|
|
|
// REQUIRES: executable_test
|
|
|
|
import MoveOnlySplit
|
|
|
|
func main() {
|
|
// CHECK: ==> LIBRARY: I am in the deinit!
|
|
// CHECK: ==> My name is: John!
|
|
// CHECK-LIBRARY-EVOLUTION: ==> LIBRARY_EVOLUTION: I am in the deinit!
|
|
// CHECK-LIBRARY-EVOLUTION: ==> My name is: John!
|
|
let server = MoveOnly()
|
|
}
|
|
|
|
main()
|