@@ -27,6 +27,7 @@ sil @get_owned_obj : $@convention(thin) () -> @owned Builtin.NativeObject
27
27
sil @unreachable_guaranteed_user : $@convention(thin) (@guaranteed Builtin.NativeObject) -> MyNever
28
28
sil @inout_user : $@convention(thin) (@inout FakeOptional<NativeObjectPair>) -> ()
29
29
sil @get_native_object : $@convention(thin) () -> @owned Builtin.NativeObject
30
+ sil [ossa] @get_enum : $@convention(thin) () -> @owned EnumA
30
31
31
32
struct NativeObjectPair {
32
33
var obj1 : Builtin.NativeObject
@@ -104,6 +105,18 @@ struct StructWithEnumWithIndirectCaseField {
104
105
var field : EnumWithIndirectCase
105
106
}
106
107
108
+ struct TrivialStruct {
109
+ }
110
+
111
+ enum EnumA {
112
+ case none
113
+ case sometrivial(TrivialStruct)
114
+ case somenontrivial(NonTrivialStruct)
115
+ }
116
+
117
+ struct StructWithEnum {
118
+ var val: EnumA
119
+ }
107
120
sil @get_fakeoptional_nativeobject : $@convention(thin) () -> @owned FakeOptional<Builtin.NativeObject>
108
121
sil @black_hole : $@convention(thin) (@guaranteed Klass) -> ()
109
122
@@ -1514,3 +1527,28 @@ bb0(%0 : $*NonTrivialStruct, %1 : $*NonTrivialStruct):
1514
1527
return %9999 : $()
1515
1528
}
1516
1529
1530
+ // CHECK-LABEL: sil [ossa] @switch_enum_test :
1531
+ // CHECK: load [copy]
1532
+ // CHECK: } // end sil function 'switch_enum_test'
1533
+ sil [ossa] @switch_enum_test : $@convention(thin) (@inout StructWithEnum) -> () {
1534
+ bb0(%0 : $*StructWithEnum):
1535
+ %1 = struct_element_addr %0 : $*StructWithEnum, #StructWithEnum.val
1536
+ %2 = struct_element_addr %0 : $*StructWithEnum, #StructWithEnum.val
1537
+ %3 = load [copy] %2 : $*EnumA
1538
+ destroy_addr %1 : $*EnumA
1539
+ switch_enum %3 : $EnumA, case #EnumA.sometrivial!enumelt: bb1, case #EnumA.somenontrivial!enumelt:bb2, case #EnumA.none!enumelt: bb3
1540
+
1541
+ bb1(%6 : $TrivialStruct):
1542
+ %f = function_ref @get_enum : $@convention(thin) () -> @owned EnumA
1543
+ %r = apply %f() : $@convention(thin) () -> @owned EnumA
1544
+ %ele = struct_element_addr %0 : $*StructWithEnum, #StructWithEnum.val
1545
+ store %r to [init] %ele :$*EnumA
1546
+ %9999 = tuple()
1547
+ return %9999 : $()
1548
+
1549
+ bb2(%7 : @owned $NonTrivialStruct):
1550
+ unreachable
1551
+
1552
+ bb3:
1553
+ unreachable
1554
+ }
0 commit comments