@@ -25,6 +25,11 @@ public enum FakeOptional2 {
25
25
case some2(Klass)
26
26
}
27
27
28
+ public enum FakeOptional3 {
29
+ case none
30
+ case some(WrapperStruct)
31
+ }
32
+
28
33
struct StructWithEnum {
29
34
var val:FakeOptional
30
35
}
@@ -35,6 +40,7 @@ struct StructWithEnum2 {
35
40
36
41
sil @use_nontrivialstruct1 : $@convention(thin) (@guaranteed NonTrivialStruct) -> ()
37
42
sil @use_nontrivialstruct2 : $@convention(thin) (@owned NonTrivialStruct) -> ()
43
+ sil @use_nontrivialstruct3 : $@convention(thin) (@in_guaranteed NonTrivialStruct) -> ()
38
44
sil @use_superklass1 : $@convention(thin) (@owned SuperKlass) -> ()
39
45
40
46
// CHECK-LABEL: sil [ossa] @structliteral1 :
@@ -893,3 +899,36 @@ bb0(%0 : @guaranteed $TestKlass):
893
899
%18 = tuple ()
894
900
return %18 : $()
895
901
}
902
+
903
+
904
+ struct WrapperStruct {
905
+ var val: TestKlass
906
+ }
907
+
908
+ // CHECK-LABEL: sil [ossa] @cse_ossa_utilstest :
909
+ // CHECK: ref_element_addr
910
+ // CHECK: ref_element_addr
911
+ // CHECK-LABEL: } // end sil function 'cse_ossa_utilstest'
912
+ sil [ossa] @cse_ossa_utilstest : $@convention(thin) (@guaranteed WrapperStruct) -> () {
913
+ bb0(%0 : @guaranteed $WrapperStruct):
914
+ %f = function_ref @use_nontrivialstruct3 : $@convention(thin) (@in_guaranteed NonTrivialStruct) -> ()
915
+ %none = enum $FakeOptional3, #FakeOptional3.none
916
+ switch_enum %none : $FakeOptional3, case #FakeOptional3.some!enumelt:bb1, case #FakeOptional3.none!enumelt:bb2
917
+
918
+ bb1(%arg : @guaranteed $WrapperStruct):
919
+ %ex = struct_extract %arg : $WrapperStruct, #WrapperStruct.val
920
+ %1 = ref_element_addr %ex : $TestKlass, #TestKlass.testStruct
921
+ apply %f (%1) : $@convention(thin) (@in_guaranteed NonTrivialStruct) -> ()
922
+ %2 = ref_element_addr %ex : $TestKlass, #TestKlass.testStruct
923
+ apply %f (%2) : $@convention(thin) (@in_guaranteed NonTrivialStruct) -> ()
924
+ br bb3
925
+
926
+ bb2:
927
+ br bb3
928
+
929
+ bb3:
930
+ %res = tuple ()
931
+ return %res : $()
932
+ }
933
+
934
+
0 commit comments