mirror of
https://github.com/apple/swift.git
synced 2025-12-14 20:36:38 +01:00
Some notes: 1. I put in both a swiftpm like test case and a library evolution test case. I also updated the moveonly_deinit serialization swift test to show that we actually serialize the deinit. 2. I changed when we emit the deinit table to only be when we have a type with an actual value type destructor. Notably this doesn't include classes today so as a side-effect, we no longer attempt to devirtualize moveonly class deinits. This doesn't affect anything we are trying to actually do since we do not support noncopyable classes today. With that in mind, I changed one test that was showing that deinit devirtualization worked to use a struct with deinit instead of a class. rdar://109679168
14 lines
847 B
Swift
14 lines
847 B
Swift
// RUN: %empty-directory(%t)
|
|
// RUN: %target-swift-frontend -enable-experimental-feature MoveOnlyEnumDeinits -Xllvm -sil-disable-pass=simplification -g -emit-module -module-name OtherModule %S/Inputs/moveonly_deinit.swift -emit-module-path %t/OtherModule.swiftmodule
|
|
// RUN: %target-swift-frontend -enable-experimental-feature MoveOnlyEnumDeinits -Xllvm -sil-disable-pass=simplification -g -I %t %s -emit-silgen
|
|
// RUN: %target-sil-opt -enable-experimental-feature MoveOnlyEnumDeinits %t/OtherModule.swiftmodule | %FileCheck -check-prefix=CHECK-SERIALIZED %s
|
|
|
|
// Make sure we can deserialize deinits of both enums and structs.
|
|
|
|
import OtherModule
|
|
|
|
// CHECK-SERIALIZED: sil_moveonlydeinit [serialized] MoveOnlyStruct {
|
|
// CHECK-SERIALIZED: sil_moveonlydeinit [serialized] MoveOnlyEnum {
|
|
let s = MoveOnlyStruct(desc: 5)
|
|
let e = MoveOnlyEnum.lhs(5)
|