@@ -1901,6 +1901,36 @@ exit:
1901
1901
return %retval : $()
1902
1902
}
1903
1903
1904
+ // CHECK-LABEL: sil [ossa] @test_destructure_tuple_1_guaranteed : {{.*}} {
1905
+ // CHECK: [[INSTANCE:%[^,]+]] = unchecked_take_enum_data_addr
1906
+ // CHECK: [[KLASS_ADDR:%[^,]+]] = tuple_element_addr [[INSTANCE]] {{.*}}, 0
1907
+ // CHECK: [[KLASS:%[^,]+]] = load_borrow [[KLASS_ADDR]]
1908
+ // CHECK: end_borrow [[KLASS]]
1909
+ // CHECK: [[ANY_ADDR:%[^,]+]] = tuple_element_addr [[INSTANCE]] {{.*}}, 1
1910
+ // CHECK: apply undef<Any>([[ANY_ADDR]])
1911
+ // CHECK: destroy_addr [[INSTANCE]]
1912
+ // CHECK-LABEL: } // end sil function 'test_destructure_tuple_1_guaranteed'
1913
+ sil [ossa] @test_destructure_tuple_1_guaranteed : $@convention(thin) () -> () {
1914
+ bb0:
1915
+ %maybe = apply undef<(Klass?, Any)>() : $@convention(method) <τ_0_0> () -> @out Optional<τ_0_0>
1916
+ switch_enum %maybe : $Optional<(Optional<Klass>, Any)>, case #Optional.some!enumelt: success, case #Optional.none!enumelt: failure
1917
+ success(%instance : @owned $(Optional<Klass>, Any)):
1918
+ %borrow = begin_borrow [lexical] %instance : $(Optional<Klass>, Any)
1919
+ (%klass, %any) = destructure_tuple %borrow : $(Optional<Klass>, Any)
1920
+ apply undef<Any>(%any) : $@convention(thin) <τ_0_0> (@in_guaranteed τ_0_0) -> ()
1921
+ end_borrow %borrow : $(Optional<Klass>, Any)
1922
+ destroy_value %instance : $(Optional<Klass>, Any)
1923
+ br exit
1924
+
1925
+ failure:
1926
+ br exit
1927
+
1928
+ exit:
1929
+ %505 = tuple ()
1930
+ return %505 : $()
1931
+ }
1932
+
1933
+
1904
1934
// CHECK-LABEL: sil hidden [ossa] @test_store_1 : {{.*}} {
1905
1935
// CHECK: [[MAYBE_ADDR:%[^,]+]] = alloc_stack $Optional<Self>
1906
1936
// CHECK: [[LOAD_ADDR:%[^,]+]] = alloc_stack $Self
0 commit comments