mirror of
https://github.com/apple/swift.git
synced 2025-12-21 12:14:44 +01:00
40 lines
1.1 KiB
Plaintext
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 : $()
|
|
}
|