@@ -38,12 +38,8 @@ struct FailableStruct {
38
38
// CHECK-LABEL: sil hidden @$s35definite_init_failable_initializers14FailableStructV24failBeforeInitializationACSgyt_tcfC
39
39
// CHECK: bb0(%0 : $@thin FailableStruct.Type):
40
40
// CHECK: [[SELF_BOX:%.*]] = alloc_stack $FailableStruct
41
- // CHECK: br bb1
42
- // CHECK: bb1:
43
- // CHECK-NEXT: dealloc_stack [[SELF_BOX]]
41
+ // CHECK: dealloc_stack [[SELF_BOX]]
44
42
// CHECK-NEXT: [[SELF:%.*]] = enum $Optional<FailableStruct>, #Optional.none!enumelt
45
- // CHECK-NEXT: br bb2
46
- // CHECK: bb2:
47
43
// CHECK-NEXT: return [[SELF]]
48
44
init ? ( failBeforeInitialization: ( ) ) {
49
45
return nil
@@ -57,14 +53,10 @@ struct FailableStruct {
57
53
// CHECK-NEXT: [[X_ADDR:%.*]] = struct_element_addr [[WRITE]]
58
54
// CHECK-NEXT: store [[CANARY]] to [[X_ADDR]]
59
55
// CHECK-NEXT: end_access [[WRITE]] : $*FailableStruct
60
- // CHECK-NEXT: br bb1
61
- // CHECK: bb1:
62
56
// CHECK-NEXT: [[X_ADDR:%.*]] = struct_element_addr [[SELF_BOX]]
63
57
// CHECK-NEXT: destroy_addr [[X_ADDR]]
64
58
// CHECK-NEXT: dealloc_stack [[SELF_BOX]]
65
59
// CHECK-NEXT: [[SELF:%.*]] = enum $Optional<FailableStruct>, #Optional.none!enumelt
66
- // CHECK-NEXT: br bb2
67
- // CHECK: bb2:
68
60
// CHECK-NEXT: return [[SELF]]
69
61
init ? ( failAfterPartialInitialization: ( ) ) {
70
62
x = Canary ( )
@@ -84,13 +76,9 @@ struct FailableStruct {
84
76
// CHECK-NEXT: [[Y_ADDR:%.*]] = struct_element_addr [[WRITE]]
85
77
// CHECK-NEXT: store [[CANARY2]] to [[Y_ADDR]]
86
78
// CHECK-NEXT: end_access [[WRITE]] : $*FailableStruct
87
- // CHECK-NEXT: br bb1
88
- // CHECK: bb1:
89
79
// CHECK-NEXT: destroy_addr [[SELF_BOX]]
90
80
// CHECK-NEXT: dealloc_stack [[SELF_BOX]]
91
81
// CHECK-NEXT: [[NEW_SELF:%.*]] = enum $Optional<FailableStruct>, #Optional.none!enumelt
92
- // CHECK-NEXT: br bb2
93
- // CHECK: bb2:
94
82
// CHECK-NEXT: return [[NEW_SELF]]
95
83
init ? ( failAfterFullInitialization: ( ) ) {
96
84
x = Canary ( )
@@ -105,13 +93,9 @@ struct FailableStruct {
105
93
// CHECK-NEXT: [[WRITE:%.*]] = begin_access [modify] [static] [[SELF_BOX]] : $*FailableStruct
106
94
// CHECK-NEXT: store [[CANARY]] to [[WRITE]]
107
95
// CHECK-NEXT: end_access [[WRITE]] : $*FailableStruct
108
- // CHECK-NEXT: br bb1
109
- // CHECK: bb1:
110
96
// CHECK-NEXT: destroy_addr [[SELF_BOX]]
111
97
// CHECK-NEXT: dealloc_stack [[SELF_BOX]]
112
98
// CHECK-NEXT: [[SELF_VALUE:%.*]] = enum $Optional<FailableStruct>, #Optional.none!enumelt
113
- // CHECK-NEXT: br bb2
114
- // CHECK: bb2:
115
99
// CHECK-NEXT: return [[SELF_VALUE]]
116
100
init ? ( failAfterWholeObjectInitializationByAssignment: ( ) ) {
117
101
self = FailableStruct ( noFail: ( ) )
@@ -124,13 +108,9 @@ struct FailableStruct {
124
108
// CHECK: [[INIT_FN:%.*]] = function_ref @$s35definite_init_failable_initializers14FailableStructV6noFailACyt_tcfC
125
109
// CHECK-NEXT: [[NEW_SELF:%.*]] = apply [[INIT_FN]](%0)
126
110
// CHECK-NEXT: store [[NEW_SELF]] to [[SELF_BOX]]
127
- // CHECK-NEXT: br bb1
128
- // CHECK: bb1:
129
111
// CHECK-NEXT: destroy_addr [[SELF_BOX]]
130
112
// CHECK-NEXT: dealloc_stack [[SELF_BOX]]
131
113
// CHECK-NEXT: [[NEW_SELF:%.*]] = enum $Optional<FailableStruct>, #Optional.none!enumelt
132
- // CHECK-NEXT: br bb2
133
- // CHECK: bb2:
134
114
// CHECK-NEXT: return [[NEW_SELF]]
135
115
init ? ( failAfterWholeObjectInitializationByDelegation: ( ) ) {
136
116
self . init ( noFail: ( ) )
@@ -147,7 +127,9 @@ struct FailableStruct {
147
127
//
148
128
// CHECK: [[FAIL_BB]]:
149
129
// CHECK-NEXT: release_value [[SELF_OPTIONAL]]
150
- // CHECK-NEXT: br [[FAIL_EPILOG_BB:bb[0-9]+]]
130
+ // CHECK-NEXT: dealloc_stack [[SELF_BOX]]
131
+ // CHECK-NEXT: [[NEW_SELF:%.*]] = enum $Optional<FailableStruct>, #Optional.none!enumelt
132
+ // CHECK-NEXT: br [[EPILOG_BB:bb[0-9]+]]([[NEW_SELF]] : $Optional<FailableStruct>)
151
133
//
152
134
// CHECK: [[SUCC_BB]]:
153
135
// CHECK-NEXT: [[SELF_VALUE:%.*]] = unchecked_enum_data [[SELF_OPTIONAL]]
@@ -158,11 +140,6 @@ struct FailableStruct {
158
140
// CHECK-NEXT: dealloc_stack [[SELF_BOX]]
159
141
// CHECK-NEXT: br [[EPILOG_BB:bb[0-9]+]]([[NEW_SELF]] : $Optional<FailableStruct>)
160
142
//
161
- // CHECK: [[FAIL_EPILOG_BB]]:
162
- // CHECK-NEXT: dealloc_stack [[SELF_BOX]]
163
- // CHECK-NEXT: [[NEW_SELF:%.*]] = enum $Optional<FailableStruct>, #Optional.none!enumelt
164
- // CHECK-NEXT: br [[EPILOG_BB]]([[NEW_SELF]] : $Optional<FailableStruct>)
165
- //
166
143
// CHECK: [[EPILOG_BB]]([[NEW_SELF:%.*]] : $Optional<FailableStruct>)
167
144
// CHECK-NEXT: return [[NEW_SELF]]
168
145
// Optional to optional
@@ -212,12 +189,8 @@ struct FailableAddrOnlyStruct<T : Pachyderm> {
212
189
// CHECK-LABEL: sil hidden @$s35definite_init_failable_initializers22FailableAddrOnlyStructV{{[_0-9a-zA-Z]*}}failBeforeInitialization{{.*}}tcfC
213
190
// CHECK: bb0(%0 : $*Optional<FailableAddrOnlyStruct<T>>, %1 : $@thin FailableAddrOnlyStruct<T>.Type):
214
191
// CHECK: [[SELF_BOX:%.*]] = alloc_stack $FailableAddrOnlyStruct<T>
215
- // CHECK: br bb1
216
- // CHECK: bb1:
217
- // CHECK-NEXT: dealloc_stack [[SELF_BOX]]
192
+ // CHECK: dealloc_stack [[SELF_BOX]]
218
193
// CHECK-NEXT: inject_enum_addr %0
219
- // CHECK-NEXT: br bb2
220
- // CHECK: bb2:
221
194
// CHECK: return
222
195
init ? ( failBeforeInitialization: ( ) ) {
223
196
return nil
@@ -235,14 +208,10 @@ struct FailableAddrOnlyStruct<T : Pachyderm> {
235
208
// CHECK-NEXT: copy_addr [take] [[X_BOX]] to [initialization] [[X_ADDR]]
236
209
// CHECK-NEXT: end_access [[WRITE]] : $*FailableAddrOnlyStruct<T>
237
210
// CHECK-NEXT: dealloc_stack [[X_BOX]]
238
- // CHECK-NEXT: br bb1
239
- // CHECK: bb1:
240
211
// CHECK-NEXT: [[X_ADDR:%.*]] = struct_element_addr [[SELF_BOX]]
241
212
// CHECK-NEXT: destroy_addr [[X_ADDR]]
242
213
// CHECK-NEXT: dealloc_stack [[SELF_BOX]]
243
214
// CHECK-NEXT: inject_enum_addr %0
244
- // CHECK-NEXT: br bb2
245
- // CHECK: bb2:
246
215
// CHECK: return
247
216
init ? ( failAfterPartialInitialization: ( ) ) {
248
217
x = T ( )
@@ -270,13 +239,9 @@ struct FailableAddrOnlyStruct<T : Pachyderm> {
270
239
// CHECK-NEXT: copy_addr [take] [[Y_BOX]] to [initialization] [[Y_ADDR]]
271
240
// CHECK-NEXT: end_access [[WRITE]] : $*FailableAddrOnlyStruct<T>
272
241
// CHECK-NEXT: dealloc_stack [[Y_BOX]]
273
- // CHECK-NEXT: br bb1
274
- // CHECK: bb1:
275
242
// CHECK-NEXT: destroy_addr [[SELF_BOX]]
276
243
// CHECK-NEXT: dealloc_stack [[SELF_BOX]]
277
244
// CHECK-NEXT: inject_enum_addr %0
278
- // CHECK-NEXT: br bb2
279
- // CHECK: bb2:
280
245
// CHECK: return
281
246
init ? ( failAfterFullInitialization: ( ) ) {
282
247
x = T ( )
@@ -548,8 +513,10 @@ struct ThrowStruct {
548
513
// CHECK-NEXT: cond_br [[COND]], [[SUCC_BB:bb[0-9]+]], [[FAIL_BB:bb[0-9]+]]
549
514
//
550
515
// CHECK: [[FAIL_BB]]:
551
- // CHECK-NEXT: release_value [[SELF_OPTIONAL]]
552
- // CHECK-NEXT: br [[FAIL_EPILOG_BB:bb[0-9]+]]
516
+ // CHECK: release_value [[SELF_OPTIONAL]]
517
+ // CHECK-NEXT: dealloc_stack [[SELF_BOX]]
518
+ // CHECK-NEXT: [[NEW_SELF:%.*]] = enum $Optional<ThrowStruct>, #Optional.none!enumelt
519
+ // CHECK-NEXT: br [[EPILOG_BB:bb[0-9]+]]([[NEW_SELF]] : $Optional<ThrowStruct>)
553
520
//
554
521
// CHECK: [[SUCC_BB]]:
555
522
// CHECK-NEXT: [[SELF_VALUE:%.*]] = unchecked_enum_data [[SELF_OPTIONAL]]
@@ -560,21 +527,13 @@ struct ThrowStruct {
560
527
// CHECK-NEXT: dealloc_stack [[SELF_BOX]]
561
528
// CHECK-NEXT: br [[EPILOG_BB:bb[0-9]+]]([[NEW_SELF]] : $Optional<ThrowStruct>)
562
529
//
563
- // CHECK: [[FAIL_EPILOG_BB]]:
564
- // CHECK-NEXT: dealloc_stack [[SELF_BOX]]
565
- // CHECK-NEXT: [[NEW_SELF:%.*]] = enum $Optional<ThrowStruct>, #Optional.none!enumelt
566
- // CHECK-NEXT: br [[EPILOG_BB]]([[NEW_SELF]] : $Optional<ThrowStruct>)
567
- //
568
530
// CHECK: [[EPILOG_BB]]([[NEW_SELF:%.*]] : $Optional<ThrowStruct>):
569
531
// CHECK-NEXT: return [[NEW_SELF]] : $Optional<ThrowStruct>
570
532
//
571
- // CHECK: [[TRY_APPLY_FAIL_TRAMPOLINE_BB:bb[0-9]+]] :
533
+ // CHECK: [[TRY_APPLY_FAIL_BB]]([[ERROR]] : $Error) :
572
534
// CHECK-NEXT: strong_release [[ERROR:%.*]] : $Error
573
535
// CHECK-NEXT: [[NEW_SELF:%.*]] = enum $Optional<ThrowStruct>, #Optional.none!enumelt
574
536
// CHECK-NEXT: br [[TRY_APPLY_CONT]]([[NEW_SELF]] : $Optional<ThrowStruct>)
575
- //
576
- // CHECK: [[TRY_APPLY_FAIL_BB]]([[ERROR]] : $Error):
577
- // CHECK-NEXT: br [[TRY_APPLY_FAIL_TRAMPOLINE_BB]]
578
537
init ? ( throwsToOptional: Int ) {
579
538
try ? self . init ( failDuringDelegation: throwsToOptional)
580
539
}
@@ -767,12 +726,8 @@ class FailableBaseClass {
767
726
// CHECK-NEXT: [[WRITE:%.*]] = begin_access [modify] [dynamic] [[MEMBER_ADDR]] : $*Canary
768
727
// CHECK-NEXT: store [[CANARY]] to [[WRITE]]
769
728
// CHECK-NEXT: end_access [[WRITE]] : $*Canary
770
- // CHECK-NEXT: br bb1
771
- // CHECK: bb1:
772
729
// CHECK-NEXT: strong_release %0
773
730
// CHECK-NEXT: [[NEW_SELF:%.*]] = enum $Optional<FailableBaseClass>, #Optional.none!enumelt
774
- // CHECK-NEXT: br bb2
775
- // CHECK: bb2:
776
731
// CHECK-NEXT: return [[NEW_SELF]]
777
732
init ? ( failAfterFullInitialization: ( ) ) {
778
733
member = Canary ( )
@@ -782,12 +737,8 @@ class FailableBaseClass {
782
737
// CHECK-LABEL: sil hidden @$s35definite_init_failable_initializers17FailableBaseClassC20failBeforeDelegationACSgyt_tcfC
783
738
// CHECK: bb0(%0 : $@thick FailableBaseClass.Type):
784
739
// CHECK-NEXT: [[SELF_BOX:%.*]] = alloc_stack $FailableBaseClass
785
- // CHECK: br bb1
786
- // CHECK: bb1:
787
- // CHECK-NEXT: dealloc_stack [[SELF_BOX]]
740
+ // CHECK: dealloc_stack [[SELF_BOX]]
788
741
// CHECK-NEXT: [[RESULT:%.*]] = enum $Optional<FailableBaseClass>, #Optional.none!enumelt
789
- // CHECK-NEXT: br bb2
790
- // CHECK: bb2:
791
742
// CHECK-NEXT: return [[RESULT]]
792
743
convenience init ? ( failBeforeDelegation: ( ) ) {
793
744
return nil
@@ -799,13 +750,9 @@ class FailableBaseClass {
799
750
// CHECK: [[INIT_FN:%.*]] = class_method %0
800
751
// CHECK-NEXT: [[NEW_SELF:%.*]] = apply [[INIT_FN]](%0)
801
752
// CHECK-NEXT: store [[NEW_SELF]] to [[SELF_BOX]]
802
- // CHECK-NEXT: br bb1
803
- // CHECK: bb1:
804
753
// CHECK-NEXT: destroy_addr [[SELF_BOX]]
805
754
// CHECK-NEXT: dealloc_stack [[SELF_BOX]]
806
755
// CHECK-NEXT: [[RESULT:%.*]] = enum $Optional<FailableBaseClass>, #Optional.none!enumelt
807
- // CHECK-NEXT: br bb2
808
- // CHECK: bb2:
809
756
// CHECK-NEXT: return [[RESULT]]
810
757
convenience init ? ( failAfterDelegation: ( ) ) {
811
758
self . init ( noFail: ( ) )
@@ -834,8 +781,8 @@ class FailableBaseClass {
834
781
// CHECK-NEXT: br [[EPILOG_BB:bb[0-9]+]]([[NEW_SELF]] : $Optional<FailableBaseClass>)
835
782
//
836
783
// CHECK: [[FAIL_TRAMPOLINE_BB]]:
837
- // CHECK-NEXT: dealloc_stack [[SELF_BOX]]
838
- // CHECK-NEXT: [[NEW_SELF:%.*]] = enum $Optional<FailableBaseClass>, #Optional.none!enumelt
784
+ // CHECK: dealloc_stack [[SELF_BOX]]
785
+ // CHECK: [[NEW_SELF:%.*]] = enum $Optional<FailableBaseClass>, #Optional.none!enumelt
839
786
// CHECK-NEXT: br [[EPILOG_BB]]([[NEW_SELF]] : $Optional<FailableBaseClass>)
840
787
//
841
788
// CHECK: [[EPILOG_BB]]([[NEW_SELF:%.*]] : $Optional<FailableBaseClass>):
@@ -875,14 +822,10 @@ class FailableDerivedClass : FailableBaseClass {
875
822
// CHECK: bb0(%0 : $FailableDerivedClass):
876
823
// CHECK: [[SELF_BOX:%.*]] = alloc_stack $FailableDerivedClass
877
824
// CHECK: store %0 to [[SELF_BOX]]
878
- // CHECK-NEXT: br bb1
879
- // CHECK: bb1:
880
825
// CHECK-NEXT: [[METATYPE:%.*]] = metatype $@thick FailableDerivedClass.Type
881
826
// CHECK-NEXT: dealloc_partial_ref %0 : $FailableDerivedClass, [[METATYPE]] : $@thick FailableDerivedClass.Type
882
827
// CHECK-NEXT: dealloc_stack [[SELF_BOX]]
883
828
// CHECK-NEXT: [[RESULT:%.*]] = enum $Optional<FailableDerivedClass>, #Optional.none!enumelt
884
- // CHECK-NEXT: br bb2
885
- // CHECK: bb2:
886
829
// CHECK-NEXT: return [[RESULT]]
887
830
init ? ( derivedFailBeforeDelegation: ( ) ) {
888
831
return nil
@@ -905,7 +848,9 @@ class FailableDerivedClass : FailableBaseClass {
905
848
//
906
849
// CHECK: [[FAIL_BB]]:
907
850
// CHECK-NEXT: release_value [[SELF_OPTIONAL]]
908
- // CHECK-NEXT: br [[FAIL_TRAMPOLINE_BB:bb[0-9]+]]
851
+ // CHECK: dealloc_stack [[SELF_BOX]]
852
+ // CHECK-NEXT: [[NEW_SELF:%.*]] = enum $Optional<FailableDerivedClass>, #Optional.none!enumelt
853
+ // CHECK-NEXT: br [[EPILOG_BB]]([[NEW_SELF]] : $Optional<FailableDerivedClass>)
909
854
//
910
855
// CHECK: [[SUCC_BB]]:
911
856
// CHECK-NEXT: [[BASE_SELF_VALUE:%.*]] = unchecked_enum_data [[SELF_OPTIONAL]]
@@ -917,11 +862,6 @@ class FailableDerivedClass : FailableBaseClass {
917
862
// CHECK-NEXT: dealloc_stack [[SELF_BOX]]
918
863
// CHECK-NEXT: br [[EPILOG_BB:bb[0-9]+]]([[NEW_SELF]] : $Optional<FailableDerivedClass>)
919
864
//
920
- // CHECK: [[FAIL_TRAMPOLINE_BB]]:
921
- // CHECK-NEXT: dealloc_stack [[SELF_BOX]]
922
- // CHECK-NEXT: [[NEW_SELF:%.*]] = enum $Optional<FailableDerivedClass>, #Optional.none!enumelt
923
- // CHECK-NEXT: br [[EPILOG_BB]]([[NEW_SELF]] : $Optional<FailableDerivedClass>)
924
- //
925
865
// CHECK: [[EPILOG_BB]]([[NEW_SELF:%.*]] : $Optional<FailableDerivedClass>):
926
866
// CHECK-NEXT: return [[NEW_SELF]] : $Optional<FailableDerivedClass>
927
867
init ? ( derivedFailDuringDelegation: ( ) ) {
0 commit comments