@@ -1227,3 +1227,69 @@ entry(%instance : @owned $AnyObject):
12271227 %82 = tuple ()
12281228 return %82 : $()
12291229}
1230+
1231+ // CHECK-LABEL: sil [ossa] @test_enum_store_borrow_none :
1232+ // CHECK: alloc_stack
1233+ // CHECK-NOT: alloc_stack
1234+ // CHECK: dealloc_stack
1235+ // CHECK-LABEL: } // end sil function 'test_enum_store_borrow_none'
1236+ sil [ossa] @test_enum_store_borrow_none : $@convention(thin) () -> () {
1237+ bb0:
1238+ %1 = alloc_stack [lexical] $FakeOptional<Klass>
1239+ %none = enum $FakeOptional<Klass>, #FakeOptional.none!enumelt
1240+ %2 = store_borrow %none to %1 : $*FakeOptional<Klass>
1241+ %3 = alloc_stack $FakeOptional<Klass>
1242+ %4 = load [copy] %2 : $*FakeOptional<Klass>
1243+ store %4 to [init] %3 : $*FakeOptional<Klass>
1244+ switch_enum_addr %3 : $*FakeOptional<Klass>, case #FakeOptional.some!enumelt: bb1, case #FakeOptional.none!enumelt: bb2
1245+
1246+ bb1:
1247+ %7 = unchecked_take_enum_data_addr %3 : $*FakeOptional<Klass>, #FakeOptional.some!enumelt
1248+ %8 = load [take] %7 : $*Klass
1249+ destroy_value %8 : $Klass
1250+ dealloc_stack %3 : $*FakeOptional<Klass>
1251+ br bb3
1252+
1253+ bb2:
1254+ dealloc_stack %3 : $*FakeOptional<Klass>
1255+ br bb3
1256+
1257+ bb3:
1258+ end_borrow %2 : $*FakeOptional<Klass>
1259+ dealloc_stack %1 : $*FakeOptional<Klass>
1260+ %t = tuple ()
1261+ return %t : $()
1262+ }
1263+
1264+ // CHECK-LABEL: sil [ossa] @test_enum_store_none :
1265+ // CHECK: alloc_stack
1266+ // CHECK-NOT: alloc_stack
1267+ // CHECK: dealloc_stack
1268+ // CHECK-LABEL: } // end sil function 'test_enum_store_none'
1269+ sil [ossa] @test_enum_store_none : $@convention(thin) () -> () {
1270+ bb0:
1271+ %1 = alloc_stack [lexical] $FakeOptional<Klass>
1272+ %none = enum $FakeOptional<Klass>, #FakeOptional.none!enumelt
1273+ store %none to [init] %1 : $*FakeOptional<Klass>
1274+ %3 = alloc_stack $FakeOptional<Klass>
1275+ %4 = load [copy] %1 : $*FakeOptional<Klass>
1276+ store %4 to [init] %3 : $*FakeOptional<Klass>
1277+ switch_enum_addr %3 : $*FakeOptional<Klass>, case #FakeOptional.some!enumelt: bb1, case #FakeOptional.none!enumelt: bb2
1278+
1279+ bb1:
1280+ %7 = unchecked_take_enum_data_addr %3 : $*FakeOptional<Klass>, #FakeOptional.some!enumelt
1281+ %8 = load [take] %7 : $*Klass
1282+ destroy_value %8 : $Klass
1283+ dealloc_stack %3 : $*FakeOptional<Klass>
1284+ br bb3
1285+
1286+ bb2:
1287+ dealloc_stack %3 : $*FakeOptional<Klass>
1288+ br bb3
1289+
1290+ bb3:
1291+ destroy_addr %1 : $*FakeOptional<Klass>
1292+ dealloc_stack %1 : $*FakeOptional<Klass>
1293+ %t = tuple ()
1294+ return %t : $()
1295+ }
0 commit comments