mirror of
https://github.com/apple/swift.git
synced 2025-12-14 20:36:38 +01:00
71 lines
2.5 KiB
Plaintext
71 lines
2.5 KiB
Plaintext
// RUN: %target-sil-opt -enable-objc-interop -enforce-exclusivity=none -enable-sil-verify-all %s -sil-combine -sil-combine-disable-alloc-stack-opts | %FileCheck %s
|
|
// REQUIRES: swift_in_compiler
|
|
|
|
sil_stage canonical
|
|
|
|
import Builtin
|
|
import Swift
|
|
|
|
class Klass {}
|
|
|
|
struct Wrapper {
|
|
var val1: Klass
|
|
var val2: Klass
|
|
}
|
|
|
|
// CHECK-LABEL: sil [ossa] @test_destructure_struct1 : $@convention(thin) () -> () {
|
|
// CHECK-NOT: destructure_struct
|
|
// CHECK-LABEL: } // end sil function 'test_destructure_struct1'
|
|
sil [ossa] @test_destructure_struct1 : $@convention(thin) () -> () {
|
|
bb0:
|
|
%0 = integer_literal $Builtin.Int32, 100
|
|
%1 = struct $Int32(%0 : $Builtin.Int32)
|
|
(%2) = destructure_struct %1 : $Int32
|
|
apply undef(%2) : $@convention(thin) (Builtin.Int32) -> ()
|
|
%t = tuple ()
|
|
return %t : $()
|
|
}
|
|
|
|
// CHECK-LABEL: sil [ossa] @test_destructure_struct2 : $@convention(thin) (@owned Klass, @owned Klass) -> () {
|
|
// CHECK-NOT: destructure_struct
|
|
// CHECK-LABEL: } // end sil function 'test_destructure_struct2'
|
|
sil [ossa] @test_destructure_struct2 : $@convention(thin) (@owned Klass, @owned Klass) -> () {
|
|
bb0(%0 : @owned $Klass, %1 : @owned $Klass):
|
|
%3 = struct $Wrapper(%0 : $Klass, %1 : $Klass)
|
|
debug_value %3 : $Wrapper
|
|
(%4, %5) = destructure_struct %3 : $Wrapper
|
|
apply undef(%4) : $@convention(thin) (@owned Klass) -> ()
|
|
destroy_value %5 : $Klass
|
|
%t = tuple ()
|
|
return %t : $()
|
|
}
|
|
|
|
// CHECK-LABEL: sil [ossa] @test_destructure_tuple1 : $@convention(thin) () -> () {
|
|
// CHECK-NOT: destructure_tuple
|
|
// CHECK-LABEL: } // end sil function 'test_destructure_tuple1'
|
|
sil [ossa] @test_destructure_tuple1 : $@convention(thin) () -> () {
|
|
bb0:
|
|
%0 = integer_literal $Builtin.Int32, 100
|
|
%1 = integer_literal $Builtin.Int32, 200
|
|
%2 = tuple (%0 : $Builtin.Int32, %1 : $Builtin.Int32)
|
|
(%3, %4) = destructure_tuple %2 : $(Builtin.Int32, Builtin.Int32)
|
|
apply undef(%4) : $@convention(thin) (Builtin.Int32) -> ()
|
|
%t = tuple ()
|
|
return %t : $()
|
|
}
|
|
|
|
// CHECK-LABEL: sil [ossa] @test_destructure_tuple2 : $@convention(thin) (@owned Klass, @owned Klass) -> () {
|
|
// CHECK-NOT: destructure_tuple
|
|
// CHECK-LABEL: } // end sil function 'test_destructure_tuple2'
|
|
sil [ossa] @test_destructure_tuple2 : $@convention(thin) (@owned Klass, @owned Klass) -> () {
|
|
bb0(%0 : @owned $Klass, %1 : @owned $Klass):
|
|
%3 = tuple(%0 : $Klass, %1 : $Klass)
|
|
debug_value %3 : $(Klass, Klass)
|
|
(%4, %5) = destructure_tuple %3 : $(Klass, Klass)
|
|
apply undef(%4) : $@convention(thin) (@owned Klass) -> ()
|
|
destroy_value %5 : $Klass
|
|
%t = tuple ()
|
|
return %t : $()
|
|
}
|
|
|