Files
swift-mirror/test/SILOptimizer/earlycodemotion_moveonly.sil
2024-02-06 10:01:27 -08:00

40 lines
1.1 KiB
Plaintext

// RUN: %target-sil-opt -enable-sil-verify-all %s -early-codemotion -retain-sinking -enable-experimental-feature MoveOnlyEnumDeinits | %FileCheck %s
sil_stage canonical
import Builtin
import Swift
struct FileDescriptor: ~Copyable {
var fd: Builtin.Int64
init(fd: Builtin.Int64)
deinit
}
enum MaybeFileDescriptor: ~Copyable {
case some(FileDescriptor)
case nothing
consuming func discard() { discard self }
deinit
}
// Test that a release_value is not replaced for a enum-with-deinit.
// Doing so would forget the deinit.
//
// CHECK-LABEL: sil hidden [noinline] @testEnumDeinit : $@convention(thin) () -> () {
// CHECK: release_value %{{.*}} : $MaybeFileDescriptor
// CHECK-LABEL: } // end sil function 'testEnumDeinit'
sil hidden [noinline] @testEnumDeinit : $@convention(thin) () -> () {
bb0:
%0 = integer_literal $Builtin.Int64, 0
%26 = struct $FileDescriptor (%0 : $Builtin.Int64)
%38 = enum $MaybeFileDescriptor, #MaybeFileDescriptor.some!enumelt, %26 : $FileDescriptor
release_value %38 : $MaybeFileDescriptor
%42 = tuple ()
return %42 : $()
}