Skip to content

Commit cf08f88

Browse files
committed
[Test] Adapted SILGen tests.
1 parent ddb93df commit cf08f88

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

65 files changed

+603
-271
lines changed

test/SILGen/access_marker_gen.swift

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,8 @@ public struct S {
1212
// CHECK: bb0(%0 : @guaranteed $Optional<AnyObject>):
1313
// CHECK: [[BOX:%.*]] = alloc_box ${ var S }, var, name "s"
1414
// CHECK: [[MARKED_BOX:%.*]] = mark_uninitialized [var] [[BOX]] : ${ var S }
15-
// CHECK: [[ADDR:%.*]] = project_box [[MARKED_BOX]] : ${ var S }, 0
15+
// CHECK: [[BOX_LIFETIME:%[^,]+]] = begin_borrow [lexical] [[MARKED_BOX]]
16+
// CHECK: [[ADDR:%.*]] = project_box [[BOX_LIFETIME]] : ${ var S }, 0
1617
// CHECK: cond_br %{{.*}}, bb1, bb2
1718
// CHECK: bb1:
1819
// CHECK: [[ACCESS1:%.*]] = begin_access [modify] [unknown] [[ADDR]] : $*S
@@ -45,7 +46,8 @@ func takeS(_ s: S) {}
4546
// CHECK-LABEL: sil [ossa] @$s17access_marker_gen14modifyAndReadSyyF : $@convention(thin) () -> () {
4647
// CHECK: bb0:
4748
// CHECK: %[[BOX:.*]] = alloc_box ${ var S }, var, name "s"
48-
// CHECK: %[[ADDRS:.*]] = project_box %[[BOX]] : ${ var S }, 0
49+
// CHECK: %[[BOX_LIFETIME:[^,]+]] = begin_borrow [lexical] %[[BOX]]
50+
// CHECK: %[[ADDRS:.*]] = project_box %[[BOX_LIFETIME]] : ${ var S }, 0
4951
// CHECK: %[[ACCESS1:.*]] = begin_access [modify] [unknown] %[[ADDRS]] : $*S
5052
// CHECK: %[[ADDRI:.*]] = struct_element_addr %[[ACCESS1]] : $*S, #S.i
5153
// CHECK: assign %{{.*}} to %[[ADDRI]] : $*Int

test/SILGen/address_only_types.swift

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -166,7 +166,8 @@ func address_only_assignment_from_lv(_ dest: inout Unloadable, v: Unloadable) {
166166
var v = v
167167
// CHECK: bb0([[DEST:%[0-9]+]] : $*Unloadable, [[VARG:%[0-9]+]] : $*Unloadable):
168168
// CHECK: [[VBOX:%.*]] = alloc_box ${ var Unloadable }
169-
// CHECK: [[PBOX:%[0-9]+]] = project_box [[VBOX]]
169+
// CHECK: [[V_LIFETIME:%[^,]+]] = begin_borrow [lexical] [[VBOX]]
170+
// CHECK: [[PBOX:%[0-9]+]] = project_box [[V_LIFETIME]]
170171
// CHECK: copy_addr [[VARG]] to [initialization] [[PBOX]] : $*Unloadable
171172
dest = v
172173
// CHECK: [[READBOX:%.*]] = begin_access [read] [unknown] [[PBOX]] :
@@ -211,7 +212,8 @@ func address_only_var() -> Unloadable {
211212
// CHECK: bb0([[RET:%[0-9]+]] : $*Unloadable):
212213
var x = some_address_only_function_1()
213214
// CHECK: [[XBOX:%[0-9]+]] = alloc_box ${ var Unloadable }
214-
// CHECK: [[XPB:%.*]] = project_box [[XBOX]]
215+
// CHECK: [[XBOX_LIFETIME:%[^,]+]] = begin_borrow [lexical] [[XBOX]]
216+
// CHECK: [[XPB:%.*]] = project_box [[XBOX_LIFETIME]]
215217
// CHECK: apply {{%.*}}([[XPB]])
216218
return x
217219
// CHECK: [[ACCESS:%.*]] = begin_access [read] [unknown] [[XPB]] :

test/SILGen/auto_generated_super_init_call.swift

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -50,6 +50,7 @@ class SomeDerivedClass : Parent {
5050
// CHECK-NEXT: [[SELFAGAIN:%.*]] = unchecked_ref_cast [[PARENT]]
5151
// CHECK-NEXT: store [[SELFAGAIN]] to [init] [[SELF]]
5252
// CHECK-NEXT: [[SELFLOAD:%.*]] = load [copy] [[SELF]]
53+
// CHECK-NEXT: end_borrow
5354
// CHECK-NEXT: destroy_value
5455
// CHECK-NEXT: return [[SELFLOAD]]
5556
}

test/SILGen/borrow.swift

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,8 @@ func useD(_ d: D) {}
1818
// CHECK-LABEL: sil hidden [ossa] @$s6borrow44lvalueBorrowShouldBeAtEndOfFormalAccessScope{{.*}} : $@convention(thin) () -> () {
1919
// CHECK: bb0:
2020
// CHECK: [[BOX:%.*]] = alloc_box ${ var C }, var, name "c"
21-
// CHECK: [[PB_BOX:%.*]] = project_box [[BOX]]
21+
// CHECK: [[BOX_LIFETIME:%[^,]+]] = begin_borrow [lexical] [[BOX]]
22+
// CHECK: [[PB_BOX:%.*]] = project_box [[BOX_LIFETIME]]
2223
// CHECK: [[ACCESS:%.*]] = begin_access [read] [unknown] [[PB_BOX]] : $*C
2324
// CHECK: [[CLASS:%.*]] = load [copy] [[ACCESS]]
2425
// CHECK: [[BORROWED_CLASS:%.*]] = begin_borrow [[CLASS]]
@@ -29,6 +30,7 @@ func useD(_ d: D) {}
2930
// CHECK: destroy_value [[CLASS]]
3031
// CHECK: [[FUNC:%.*]] = function_ref @$s6borrow4useD{{.*}} : $@convention(thin) (@guaranteed D) -> ()
3132
// CHECK: apply [[FUNC]]([[LOADED_VALUE]])
33+
// CHECK: end_borrow [[BOX_LIFETIME]]
3234
// CHECK: destroy_value [[BOX]]
3335
// CHECK: } // end sil function '$s6borrow44lvalueBorrowShouldBeAtEndOfFormalAccessScope{{.*}}'
3436
func lvalueBorrowShouldBeAtEndOfFormalAccessScope() {

test/SILGen/boxed_existentials.swift

Lines changed: 9 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -82,7 +82,8 @@ func test_property_of_lvalue(_ x: Error) -> String {
8282
// CHECK-LABEL: sil hidden [ossa] @$s18boxed_existentials23test_property_of_lvalueySSs5Error_pF :
8383
// CHECK: bb0([[ARG:%.*]] : @guaranteed $Error):
8484
// CHECK: [[VAR:%.*]] = alloc_box ${ var Error }
85-
// CHECK: [[PVAR:%.*]] = project_box [[VAR]]
85+
// CHECK: [[VAR_LIFETIME:%[^,]+]] = begin_borrow [lexical] [[VAR]]
86+
// CHECK: [[PVAR:%.*]] = project_box [[VAR_LIFETIME]]
8687
// CHECK: [[ARG_COPY:%.*]] = copy_value [[ARG]] : $Error
8788
// CHECK: store [[ARG_COPY]] to [init] [[PVAR]]
8889
// CHECK: [[ACCESS:%.*]] = begin_access [read] [unknown] [[PVAR]] : $*Error
@@ -98,6 +99,7 @@ func test_property_of_lvalue(_ x: Error) -> String {
9899
// CHECK: [[RESULT:%.*]] = apply [[METHOD]]<[[VALUE_TYPE]]>([[BORROW]])
99100
// CHECK: destroy_addr [[COPY]]
100101
// CHECK: dealloc_stack [[COPY]]
102+
// CHECK: end_borrow [[VAR_LIFETIME]]
101103
// CHECK: destroy_value [[VAR]]
102104
// CHECK-NOT: destroy_value [[ARG]]
103105
// CHECK: return [[RESULT]]
@@ -131,9 +133,11 @@ func test_open_existential_semantics(_ guaranteed: Error,
131133
_ immediate: Error) {
132134
var immediate = immediate
133135
// CHECK: [[IMMEDIATE_BOX:%.*]] = alloc_box ${ var Error }
134-
// CHECK: [[PB:%.*]] = project_box [[IMMEDIATE_BOX]]
136+
// CHECK: [[IMMEDIATE_LIFETIME:%[^,]+]] = begin_borrow [lexical] [[IMMEDIATE_BOX]]
137+
// CHECK: [[PB:%.*]] = project_box [[IMMEDIATE_LIFETIME]]
135138
// GUARANTEED: [[IMMEDIATE_BOX:%.*]] = alloc_box ${ var Error }
136-
// GUARANTEED: [[PB:%.*]] = project_box [[IMMEDIATE_BOX]]
139+
// GUARANTEED: [[IMMEDIATE_LIFETIME:%[^,]+]] = begin_borrow [lexical] [[IMMEDIATE_BOX]]
140+
// GUARANTEED: [[PB:%.*]] = project_box [[IMMEDIATE_LIFETIME]]
137141

138142
// CHECK-NOT: copy_value [[ARG0]]
139143
// CHECK: [[VALUE:%.*]] = open_existential_box [[ARG0]]
@@ -200,7 +204,8 @@ func test_open_existential_semantics(_ guaranteed: Error,
200204
func erasure_to_any(_ guaranteed: Error, _ immediate: Error) -> Any {
201205
var immediate = immediate
202206
// CHECK: [[IMMEDIATE_BOX:%.*]] = alloc_box ${ var Error }
203-
// CHECK: [[PB:%.*]] = project_box [[IMMEDIATE_BOX]]
207+
// CHECK: [[IMMEDIATE_LIFETIME:%[^,]+]] = begin_borrow [lexical] [[IMMEDIATE_BOX]]
208+
// CHECK: [[PB:%.*]] = project_box [[IMMEDIATE_LIFETIME]]
204209
if true {
205210
// CHECK-NOT: copy_value [[GUAR]]
206211
// CHECK: [[FROM_VALUE:%.*]] = open_existential_box [[GUAR:%.*]]

test/SILGen/class_bound_protocols.swift

Lines changed: 12 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -37,12 +37,14 @@ func class_bound_generic<T : ClassBound>(x: T) -> T {
3737
var x = x
3838
// CHECK: bb0([[X:%.*]] : @guaranteed $T):
3939
// CHECK: [[X_ADDR:%.*]] = alloc_box $<τ_0_0 where τ_0_0 : ClassBound> { var τ_0_0 } <T>
40-
// CHECK: [[PB:%.*]] = project_box [[X_ADDR]]
40+
// CHECK: [[X_LIFETIME:%[^,]+]] = begin_borrow [lexical] [[X_ADDR]]
41+
// CHECK: [[PB:%.*]] = project_box [[X_LIFETIME]]
4142
// CHECK: [[X_COPY:%.*]] = copy_value [[X]]
4243
// CHECK: store [[X_COPY]] to [init] [[PB]]
4344
return x
4445
// CHECK: [[READ:%.*]] = begin_access [read] [unknown] [[PB]] : $*T
4546
// CHECK: [[X1:%.*]] = load [copy] [[READ]]
47+
// CHECK: end_borrow [[X_LIFETIME]]
4648
// CHECK: destroy_value [[X_ADDR]]
4749
// CHECK: return [[X1]]
4850
}
@@ -52,7 +54,8 @@ func class_bound_generic_2<T : ClassBound & NotClassBound>(x: T) -> T {
5254
var x = x
5355
// CHECK: bb0([[X:%.*]] : @guaranteed $T):
5456
// CHECK: [[X_ADDR:%.*]] = alloc_box $<τ_0_0 where τ_0_0 : ClassBound, τ_0_0 : NotClassBound> { var τ_0_0 } <T>
55-
// CHECK: [[PB:%.*]] = project_box [[X_ADDR]]
57+
// CHECK: [[X_LIFETIME:%[^,]+]] = begin_borrow [lexical] [[X_ADDR]]
58+
// CHECK: [[PB:%.*]] = project_box [[X_LIFETIME]]
5659
// CHECK: [[X_COPY:%.*]] = copy_value [[X]]
5760
// CHECK: store [[X_COPY]] to [init] [[PB]]
5861
return x
@@ -66,7 +69,8 @@ func class_bound_protocol(x: ClassBound) -> ClassBound {
6669
var x = x
6770
// CHECK: bb0([[X:%.*]] : @guaranteed $ClassBound):
6871
// CHECK: [[X_ADDR:%.*]] = alloc_box ${ var ClassBound }
69-
// CHECK: [[PB:%.*]] = project_box [[X_ADDR]]
72+
// CHECK: [[X_LIFETIME:%[^,]+]] = begin_borrow [lexical] [[X_ADDR]]
73+
// CHECK: [[PB:%.*]] = project_box [[X_LIFETIME]]
7074
// CHECK: [[X_COPY:%.*]] = copy_value [[X]]
7175
// CHECK: store [[X_COPY]] to [init] [[PB]]
7276
return x
@@ -81,7 +85,8 @@ func class_bound_protocol_composition(x: ClassBound & NotClassBound)
8185
var x = x
8286
// CHECK: bb0([[X:%.*]] : @guaranteed $ClassBound & NotClassBound):
8387
// CHECK: [[X_ADDR:%.*]] = alloc_box ${ var ClassBound & NotClassBound }
84-
// CHECK: [[PB:%.*]] = project_box [[X_ADDR]]
88+
// CHECK: [[X_LIFETIME:%[^,]+]] = begin_borrow [lexical] [[X_ADDR]]
89+
// CHECK: [[PB:%.*]] = project_box [[X_LIFETIME]]
8590
// CHECK: [[X_COPY:%.*]] = copy_value [[X]]
8691
// CHECK: store [[X_COPY]] to [init] [[PB]]
8792
return x
@@ -126,7 +131,8 @@ func class_bound_method(x: ClassBound) {
126131
var x = x
127132
x.classBoundMethod()
128133
// CHECK: [[XBOX:%.*]] = alloc_box ${ var ClassBound }, var, name "x"
129-
// CHECK: [[XBOX_PB:%.*]] = project_box [[XBOX]]
134+
// CHECK: [[XLIFETIME:%[^,]+]] = begin_borrow [lexical] [[XBOX]]
135+
// CHECK: [[XBOX_PB:%.*]] = project_box [[XLIFETIME]]
130136
// CHECK: [[ARG_COPY:%.*]] = copy_value [[ARG]]
131137
// CHECK: store [[ARG_COPY]] to [init] [[XBOX_PB]]
132138
// CHECK: [[READ:%.*]] = begin_access [read] [unknown] [[XBOX_PB]] : $*ClassBound
@@ -135,6 +141,7 @@ func class_bound_method(x: ClassBound) {
135141
// CHECK: [[METHOD:%.*]] = witness_method $[[OPENED]], #ClassBound.classBoundMethod :
136142
// CHECK: apply [[METHOD]]<[[OPENED]]>([[PROJ]])
137143
// CHECK: destroy_value [[PROJ]]
144+
// CHECK: end_borrow [[XLIFETIME]]
138145
// CHECK: destroy_value [[XBOX]]
139146
}
140147
// CHECK: } // end sil function '$ss18class_bound_method1xys10ClassBound_p_tF'

test/SILGen/closures.swift

Lines changed: 23 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -33,21 +33,20 @@ func read_only_capture(_ x: Int) -> Int {
3333
var x = x
3434
// CHECK: bb0([[X:%[0-9]+]] : $Int):
3535
// CHECK: [[XBOX:%[0-9]+]] = alloc_box ${ var Int }
36+
// CHECK: [[XLIFETIME:%[0-9]+]] = begin_borrow [lexical] [[XBOX]]
3637
// SEMANTIC ARC TODO: This is incorrect. We need to do the project_box on the copy.
37-
// CHECK: [[PROJECT:%.*]] = project_box [[XBOX]]
38+
// CHECK: [[PROJECT:%.*]] = project_box [[XLIFETIME]]
3839
// CHECK: store [[X]] to [trivial] [[PROJECT]]
3940

4041
func cap() -> Int {
4142
return x
4243
}
4344

4445
return cap()
45-
// CHECK: [[XBOX_BORROW:%.*]] = begin_borrow [[XBOX]]
4646
// SEMANTIC ARC TODO: See above. This needs to happen on the copy_valued box.
4747
// CHECK: mark_function_escape [[PROJECT]]
4848
// CHECK: [[CAP:%[0-9]+]] = function_ref @[[CAP_NAME:\$s8closures17read_only_capture.*]] : $@convention(thin) (@guaranteed { var Int }) -> Int
49-
// CHECK: [[RET:%[0-9]+]] = apply [[CAP]]([[XBOX_BORROW]])
50-
// CHECK: end_borrow [[XBOX_BORROW]]
49+
// CHECK: [[RET:%[0-9]+]] = apply [[CAP]]([[XLIFETIME]])
5150
// CHECK: destroy_value [[XBOX]]
5251
// CHECK: return [[RET]]
5352
}
@@ -67,14 +66,14 @@ func write_to_capture(_ x: Int) -> Int {
6766
var x = x
6867
// CHECK: bb0([[X:%[0-9]+]] : $Int):
6968
// CHECK: [[XBOX:%[0-9]+]] = alloc_box ${ var Int }
70-
// CHECK: [[XBOX_PB:%.*]] = project_box [[XBOX]]
69+
// CHECK: [[XLIFETIME:%[0-9]+]] = begin_borrow [lexical] [[XBOX]]
70+
// CHECK: [[XBOX_PB:%[0-9]+]] = project_box [[XLIFETIME]]
7171
// CHECK: store [[X]] to [trivial] [[XBOX_PB]]
7272
// CHECK: [[X2BOX:%[0-9]+]] = alloc_box ${ var Int }
73-
// CHECK: [[X2BOX_PB:%.*]] = project_box [[X2BOX]]
73+
// CHECK: [[X2LIFETIME:%[0-9]+]] = begin_borrow [lexical] [[X2BOX]]
74+
// CHECK: [[X2BOX_PB:%.*]] = project_box [[X2LIFETIME]]
7475
// CHECK: [[ACCESS:%.*]] = begin_access [read] [unknown] [[XBOX_PB]] : $*Int
7576
// CHECK: copy_addr [[ACCESS]] to [initialization] [[X2BOX_PB]]
76-
// CHECK: [[X2BOX_BORROW:%.*]] = begin_borrow [[X2BOX]]
77-
// SEMANTIC ARC TODO: This next mark_function_escape should be on a projection from X2BOX_BORROW.
7877
// CHECK: mark_function_escape [[X2BOX_PB]]
7978
var x2 = x
8079

@@ -84,10 +83,7 @@ func write_to_capture(_ x: Int) -> Int {
8483

8584
scribble()
8685
// CHECK: [[SCRIB:%[0-9]+]] = function_ref @[[SCRIB_NAME:\$s8closures16write_to_capture.*]] : $@convention(thin) (@guaranteed { var Int }) -> ()
87-
// CHECK: apply [[SCRIB]]([[X2BOX_BORROW]])
88-
// SEMANTIC ARC TODO: This should load from X2BOX_BORROW project. There is an
89-
// issue here where after a copy_value, we need to reassign a projection in
90-
// some way.
86+
// CHECK: apply [[SCRIB]]([[X2LIFETIME]])
9187
// CHECK: [[ACCESS:%.*]] = begin_access [read] [unknown] [[X2BOX_PB]] : $*Int
9288
// CHECK: [[RET:%[0-9]+]] = load [trivial] [[ACCESS]]
9389
// CHECK: destroy_value [[X2BOX]]
@@ -126,14 +122,15 @@ func capture_local_func(_ x: Int) -> () -> () -> Int {
126122
// CHECK: bb0([[ARG:%.*]] : $Int):
127123
var x = x
128124
// CHECK: [[XBOX:%[0-9]+]] = alloc_box ${ var Int }
129-
// CHECK: [[XBOX_PB:%.*]] = project_box [[XBOX]]
125+
// CHECK: [[XLIFETIME:%[0-9]+]] = begin_borrow [lexical] [[XBOX]]
126+
// CHECK: [[XBOX_PB:%[0-9]+]] = project_box [[XLIFETIME]]
130127
// CHECK: store [[ARG]] to [trivial] [[XBOX_PB]]
131128

132129
func aleph() -> Int { return x }
133130

134131
func beth() -> () -> Int { return aleph }
135132
// CHECK: [[BETH_REF:%.*]] = function_ref @[[BETH_NAME:\$s8closures18capture_local_funcySiycycSiF4bethL_SiycyF]] : $@convention(thin) (@guaranteed { var Int }) -> @owned @callee_guaranteed () -> Int
136-
// CHECK: [[XBOX_COPY:%.*]] = copy_value [[XBOX]]
133+
// CHECK: [[XBOX_COPY:%.*]] = copy_value [[XLIFETIME]]
137134
// SEMANTIC ARC TODO: This is incorrect. This should be a project_box from XBOX_COPY.
138135
// CHECK: mark_function_escape [[XBOX_PB]]
139136
// CHECK: [[BETH_CLOSURE:%[0-9]+]] = partial_apply [callee_guaranteed] [[BETH_REF]]([[XBOX_COPY]])
@@ -163,7 +160,8 @@ func anon_read_only_capture(_ x: Int) -> Int {
163160
var x = x
164161
// CHECK: bb0([[X:%[0-9]+]] : $Int):
165162
// CHECK: [[XBOX:%[0-9]+]] = alloc_box ${ var Int }
166-
// CHECK: [[PB:%.*]] = project_box [[XBOX]]
163+
// CHECK: [[XLIFETIME:%[0-9]+]] = begin_borrow [lexical] [[XBOX]]
164+
// CHECK: [[PB:%[0-9]+]] = project_box [[XLIFETIME]]
167165

168166
return ({ x })()
169167
// -- func expression
@@ -185,7 +183,8 @@ func small_closure_capture(_ x: Int) -> Int {
185183
var x = x
186184
// CHECK: bb0([[X:%[0-9]+]] : $Int):
187185
// CHECK: [[XBOX:%[0-9]+]] = alloc_box ${ var Int }
188-
// CHECK: [[PB:%.*]] = project_box [[XBOX]]
186+
// CHECK: [[XLIFETIME:%[0-9]+]] = begin_borrow [lexical] [[XBOX]]
187+
// CHECK: [[PB:%.*]] = project_box [[XLIFETIME]]
189188

190189
return { x }()
191190
// -- func expression
@@ -207,11 +206,12 @@ func small_closure_capture(_ x: Int) -> Int {
207206
func small_closure_capture_with_argument(_ x: Int) -> (_ y: Int) -> Int {
208207
var x = x
209208
// CHECK: [[XBOX:%[0-9]+]] = alloc_box ${ var Int }
209+
// CHEKC: [[XLIFETIME:%[0-9]+]] = begin_borrow [lexical] [[XBOX]]
210210

211211
return { x + $0 }
212212
// -- func expression
213213
// CHECK: [[ANON:%[0-9]+]] = function_ref @[[CLOSURE_NAME:\$s8closures35small_closure_capture_with_argument.*]] : $@convention(thin) (Int, @guaranteed { var Int }) -> Int
214-
// CHECK: [[XBOX_COPY:%.*]] = copy_value [[XBOX]]
214+
// CHECK: [[XBOX_COPY:%.*]] = copy_value [[XLIFETIME]]
215215
// CHECK: [[ANON_CLOSURE_APP:%[0-9]+]] = partial_apply [callee_guaranteed] [[ANON]]([[XBOX_COPY]])
216216
// -- return
217217
// CHECK: destroy_value [[XBOX]]
@@ -244,7 +244,8 @@ func uncaptured_locals(_ x: Int) -> (Int, Int) {
244244
// -- locals without captures are stack-allocated
245245
// CHECK: bb0([[XARG:%[0-9]+]] : $Int):
246246
// CHECK: [[XADDR:%[0-9]+]] = alloc_box ${ var Int }
247-
// CHECK: [[PB:%.*]] = project_box [[XADDR]]
247+
// CHECK: [[XLIFETIME:%[0-9]+]] = begin_borrow [lexical] [[XADDR]]
248+
// CHECK: [[PB:%.*]] = project_box [[XLIFETIME]]
248249
// CHECK: store [[XARG]] to [trivial] [[PB]]
249250

250251
var y = zero
@@ -318,7 +319,8 @@ class SelfCapturedInInit : Base {
318319
// First create our initial value for self.
319320
// CHECK: [[SELF_BOX:%.*]] = alloc_box ${ var SelfCapturedInInit }, let, name "self"
320321
// CHECK: [[UNINIT_SELF:%.*]] = mark_uninitialized [derivedself] [[SELF_BOX]]
321-
// CHECK: [[PB_SELF_BOX:%.*]] = project_box [[UNINIT_SELF]]
322+
// CHECK: [[SELF_LIFETIME:%.*]] = begin_borrow [lexical] [[UNINIT_SELF]]
323+
// CHECK: [[PB_SELF_BOX:%.*]] = project_box [[SELF_LIFETIME]]
322324
// CHECK: store [[SELF]] to [init] [[PB_SELF_BOX]]
323325
//
324326
// Then perform the super init sequence.
@@ -660,7 +662,8 @@ class SuperSub : SuperBase {
660662
// -- We enter with an assumed strong +1.
661663
// CHECK: bb0([[SELF:%.*]] : @guaranteed $UnownedSelfNestedCapture):
662664
// CHECK: [[OUTER_SELF_CAPTURE:%.*]] = alloc_box ${ var @sil_unowned UnownedSelfNestedCapture }
663-
// CHECK: [[PB:%.*]] = project_box [[OUTER_SELF_CAPTURE]]
665+
// CHECK: [[OUTER_SELF_LIFETIME:%.*]] = begin_borrow [lexical] [[OUTER_SELF_CAPTURE]]
666+
// CHECK: [[PB:%.*]] = project_box [[OUTER_SELF_LIFETIME]]
664667
// -- strong +2
665668
// CHECK: [[SELF_COPY:%.*]] = copy_value [[SELF]]
666669
// CHECK: [[UNOWNED_SELF:%.*]] = ref_to_unowned [[SELF_COPY]] :

test/SILGen/complete_object_init.swift

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,11 +7,13 @@ class A {
77
// CHECK: bb0([[SELF_META:%[0-9]+]] : $@thick A.Type):
88
// CHECK: [[SELF_BOX:%[0-9]+]] = alloc_box ${ var A }
99
// CHECK: [[UNINIT_SELF:%[0-9]+]] = mark_uninitialized [delegatingself] [[SELF_BOX]] : ${ var A }
10-
// CHECK: [[PB:%.*]] = project_box [[UNINIT_SELF]]
10+
// CHECK: [[UNINIT_SELF_LIFETIME:%[^,]+]] = begin_borrow [lexical] [[UNINIT_SELF]]
11+
// CHECK: [[PB:%.*]] = project_box [[UNINIT_SELF_LIFETIME]]
1112
// CHECK: [[INIT:%[0-9]+]] = class_method [[SELF_META]] : $@thick A.Type, #A.init!allocator
1213
// CHECK: [[INIT_RESULT:%[0-9]+]] = apply [[INIT]]({{%[^,]*}}, [[SELF_META]])
1314
// CHECK: assign [[INIT_RESULT]] to [[PB]] : $*A
1415
// CHECK: [[RESULT:%[0-9]+]] = load [copy] [[PB]] : $*A
16+
// CHECK: end_borrow [[UNINIT_SELF_LIFETIME]]
1517
// CHECK: destroy_value [[UNINIT_SELF]] : ${ var A }
1618
// CHECK: return [[RESULT]] : $A
1719
convenience init() {

test/SILGen/copy_lvalue_peepholes.swift

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -9,9 +9,11 @@ func getInt() -> Int { return zero }
99

1010
// CHECK-LABEL: sil hidden [ossa] @$s21copy_lvalue_peepholes014init_var_from_B0{{[_0-9a-zA-Z]*}}F
1111
// CHECK: [[X:%.*]] = alloc_box ${ var Builtin.Int64 }
12-
// CHECK: [[PBX:%.*]] = project_box [[X]]
12+
// CHECK: [[XLIFETIME:%[^,]+]] = begin_borrow [lexical] [[X]]
13+
// CHECK: [[PBX:%.*]] = project_box [[XLIFETIME]]
1314
// CHECK: [[Y:%.*]] = alloc_box ${ var Builtin.Int64 }
14-
// CHECK: [[PBY:%.*]] = project_box [[Y]]
15+
// CHECK: [[YLIFETIME:%[^,]+]] = begin_borrow [lexical] [[Y]]
16+
// CHECK: [[PBY:%.*]] = project_box [[YLIFETIME]]
1517
// CHECK: [[READ:%.*]] = begin_access [read] [unknown] [[PBX]]
1618
// CHECK: copy_addr [[READ]] to [initialization] [[PBY]] : $*Builtin.Int64
1719
func init_var_from_lvalue(x: Int) {
@@ -38,7 +40,8 @@ func init_var_from_computed_lvalue() {
3840

3941
// CHECK-LABEL: sil hidden [ossa] @$s21copy_lvalue_peepholes021assign_computed_from_B0{{[_0-9a-zA-Z]*}}F
4042
// CHECK: [[Y:%.*]] = alloc_box
41-
// CHECK: [[PBY:%.*]] = project_box [[Y]]
43+
// CHECK: [[YLIFETIME:%[^,]+]] = begin_borrow [lexical] [[Y]]
44+
// CHECK: [[PBY:%.*]] = project_box [[YLIFETIME]]
4245
// CHECK: [[READ:%.*]] = begin_access [read] [unknown] [[PBY]]
4346
// CHECK: [[Y_VAL:%.*]] = load [trivial] [[READ]]
4447
// CHECK: [[SETTER:%.*]] = function_ref @$s21copy_lvalue_peepholes8computedBi64_vs

0 commit comments

Comments
 (0)