@@ -33,21 +33,20 @@ func read_only_capture(_ x: Int) -> Int {
33
33
var x = x
34
34
// CHECK: bb0([[X:%[0-9]+]] : $Int):
35
35
// CHECK: [[XBOX:%[0-9]+]] = alloc_box ${ var Int }
36
+ // CHECK: [[XLIFETIME:%[0-9]+]] = begin_borrow [lexical] [[XBOX]]
36
37
// 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 ]]
38
39
// CHECK: store [[X]] to [trivial] [[PROJECT]]
39
40
40
41
func cap( ) -> Int {
41
42
return x
42
43
}
43
44
44
45
return cap ( )
45
- // CHECK: [[XBOX_BORROW:%.*]] = begin_borrow [[XBOX]]
46
46
// SEMANTIC ARC TODO: See above. This needs to happen on the copy_valued box.
47
47
// CHECK: mark_function_escape [[PROJECT]]
48
48
// 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]])
51
50
// CHECK: destroy_value [[XBOX]]
52
51
// CHECK: return [[RET]]
53
52
}
@@ -67,14 +66,14 @@ func write_to_capture(_ x: Int) -> Int {
67
66
var x = x
68
67
// CHECK: bb0([[X:%[0-9]+]] : $Int):
69
68
// 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]]
71
71
// CHECK: store [[X]] to [trivial] [[XBOX_PB]]
72
72
// 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]]
74
75
// CHECK: [[ACCESS:%.*]] = begin_access [read] [unknown] [[XBOX_PB]] : $*Int
75
76
// 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.
78
77
// CHECK: mark_function_escape [[X2BOX_PB]]
79
78
var x2 = x
80
79
@@ -84,10 +83,7 @@ func write_to_capture(_ x: Int) -> Int {
84
83
85
84
scribble ( )
86
85
// 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]])
91
87
// CHECK: [[ACCESS:%.*]] = begin_access [read] [unknown] [[X2BOX_PB]] : $*Int
92
88
// CHECK: [[RET:%[0-9]+]] = load [trivial] [[ACCESS]]
93
89
// CHECK: destroy_value [[X2BOX]]
@@ -126,14 +122,15 @@ func capture_local_func(_ x: Int) -> () -> () -> Int {
126
122
// CHECK: bb0([[ARG:%.*]] : $Int):
127
123
var x = x
128
124
// 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]]
130
127
// CHECK: store [[ARG]] to [trivial] [[XBOX_PB]]
131
128
132
129
func aleph( ) -> Int { return x }
133
130
134
131
func beth( ) -> ( ) -> Int { return aleph }
135
132
// 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 ]]
137
134
// SEMANTIC ARC TODO: This is incorrect. This should be a project_box from XBOX_COPY.
138
135
// CHECK: mark_function_escape [[XBOX_PB]]
139
136
// 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 {
163
160
var x = x
164
161
// CHECK: bb0([[X:%[0-9]+]] : $Int):
165
162
// 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]]
167
165
168
166
return ( { x } ) ( )
169
167
// -- func expression
@@ -185,7 +183,8 @@ func small_closure_capture(_ x: Int) -> Int {
185
183
var x = x
186
184
// CHECK: bb0([[X:%[0-9]+]] : $Int):
187
185
// 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]]
189
188
190
189
return { x } ( )
191
190
// -- func expression
@@ -207,11 +206,12 @@ func small_closure_capture(_ x: Int) -> Int {
207
206
func small_closure_capture_with_argument( _ x: Int ) -> ( _ y: Int ) -> Int {
208
207
var x = x
209
208
// CHECK: [[XBOX:%[0-9]+]] = alloc_box ${ var Int }
209
+ // CHEKC: [[XLIFETIME:%[0-9]+]] = begin_borrow [lexical] [[XBOX]]
210
210
211
211
return { x + $0 }
212
212
// -- func expression
213
213
// 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 ]]
215
215
// CHECK: [[ANON_CLOSURE_APP:%[0-9]+]] = partial_apply [callee_guaranteed] [[ANON]]([[XBOX_COPY]])
216
216
// -- return
217
217
// CHECK: destroy_value [[XBOX]]
@@ -244,7 +244,8 @@ func uncaptured_locals(_ x: Int) -> (Int, Int) {
244
244
// -- locals without captures are stack-allocated
245
245
// CHECK: bb0([[XARG:%[0-9]+]] : $Int):
246
246
// 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]]
248
249
// CHECK: store [[XARG]] to [trivial] [[PB]]
249
250
250
251
var y = zero
@@ -318,7 +319,8 @@ class SelfCapturedInInit : Base {
318
319
// First create our initial value for self.
319
320
// CHECK: [[SELF_BOX:%.*]] = alloc_box ${ var SelfCapturedInInit }, let, name "self"
320
321
// 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]]
322
324
// CHECK: store [[SELF]] to [init] [[PB_SELF_BOX]]
323
325
//
324
326
// Then perform the super init sequence.
@@ -660,7 +662,8 @@ class SuperSub : SuperBase {
660
662
// -- We enter with an assumed strong +1.
661
663
// CHECK: bb0([[SELF:%.*]] : @guaranteed $UnownedSelfNestedCapture):
662
664
// 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]]
664
667
// -- strong +2
665
668
// CHECK: [[SELF_COPY:%.*]] = copy_value [[SELF]]
666
669
// CHECK: [[UNOWNED_SELF:%.*]] = ref_to_unowned [[SELF_COPY]] :
0 commit comments