@@ -29,6 +29,11 @@ class Klass {}
29
29
sil @klass_allocator : $@convention(method) (@thick Klass.Type) -> @owned Klass
30
30
sil @generic_user : $@convention(thin) <τ_0_0> (@in_guaranteed τ_0_0) -> ()
31
31
32
+ struct NativeObjectOptNativeObjectPair {
33
+ var lhs: Builtin.NativeObject
34
+ var rhs: Optional<Builtin.NativeObject>
35
+ }
36
+
32
37
///////////
33
38
// Tests //
34
39
///////////
@@ -1181,3 +1186,39 @@ bb3:
1181
1186
%9999 = tuple()
1182
1187
return %9999 : $()
1183
1188
}
1189
+
1190
+ // CHECK-LABEL: sil [ossa] @do_not_RAUW_owned_destructure_with_nontrivial_none_value_tuple : $@convention(thin) (@owned Builtin.NativeObject) -> () {
1191
+ // CHECK: ({{%.*}}, [[DESTRUCTURE_RESULT_2:%.*]]) = destructure_tuple
1192
+ // CHECK: store [[DESTRUCTURE_RESULT_2]] to [init]
1193
+ // CHECK: } // end sil function 'do_not_RAUW_owned_destructure_with_nontrivial_none_value_tuple'
1194
+ sil [ossa] @do_not_RAUW_owned_destructure_with_nontrivial_none_value_tuple : $@convention(thin) (@owned Builtin.NativeObject) -> () {
1195
+ bb0(%arg : @owned $Builtin.NativeObject):
1196
+ %0 = alloc_stack $Optional<Builtin.NativeObject>
1197
+ %1 = enum $Optional<Builtin.NativeObject>, #Optional.none!enumelt
1198
+ %2 = tuple(%arg : $Builtin.NativeObject, %1 : $Optional<Builtin.NativeObject>)
1199
+ (%3, %4) = destructure_tuple %2 : $(Builtin.NativeObject, Optional<Builtin.NativeObject>)
1200
+ store %4 to [init] %0 : $*Optional<Builtin.NativeObject>
1201
+ destroy_addr %0 : $*Optional<Builtin.NativeObject>
1202
+ dealloc_stack %0 : $*Optional<Builtin.NativeObject>
1203
+ destroy_value %3 : $Builtin.NativeObject
1204
+ %9999 = tuple()
1205
+ return %9999 : $()
1206
+ }
1207
+
1208
+ // CHECK-LABEL: sil [ossa] @do_not_RAUW_owned_destructure_with_nontrivial_none_value_struct : $@convention(thin) (@owned Builtin.NativeObject) -> () {
1209
+ // CHECK: ({{%.*}}, [[DESTRUCTURE_RESULT_2:%.*]]) = destructure_struct
1210
+ // CHECK: store [[DESTRUCTURE_RESULT_2]] to [init]
1211
+ // CHECK: } // end sil function 'do_not_RAUW_owned_destructure_with_nontrivial_none_value_struct'
1212
+ sil [ossa] @do_not_RAUW_owned_destructure_with_nontrivial_none_value_struct : $@convention(thin) (@owned Builtin.NativeObject) -> () {
1213
+ bb0(%arg : @owned $Builtin.NativeObject):
1214
+ %0 = alloc_stack $Optional<Builtin.NativeObject>
1215
+ %1 = enum $Optional<Builtin.NativeObject>, #Optional.none!enumelt
1216
+ %2 = struct $NativeObjectOptNativeObjectPair (%arg : $Builtin.NativeObject, %1 : $Optional<Builtin.NativeObject>)
1217
+ (%3, %4) = destructure_struct %2 : $NativeObjectOptNativeObjectPair
1218
+ store %4 to [init] %0 : $*Optional<Builtin.NativeObject>
1219
+ destroy_addr %0 : $*Optional<Builtin.NativeObject>
1220
+ dealloc_stack %0 : $*Optional<Builtin.NativeObject>
1221
+ destroy_value %3 : $Builtin.NativeObject
1222
+ %9999 = tuple()
1223
+ return %9999 : $()
1224
+ }
0 commit comments