@@ -175,3 +175,71 @@ extension NonTrivialEnum {
175
175
let _ = x
176
176
}
177
177
}
178
+
179
+ ///////////////////////////////
180
+ // Black Hole Initialization //
181
+ ///////////////////////////////
182
+
183
+ // CHECK-LABEL: sil hidden [ossa] @$s8moveonly27blackHoleLetInitialization1yyF : $@convention(thin) () -> () {
184
+ // CHECK: [[FN:%.*]] = function_ref @$s8moveonly5KlassCACycfC : $@convention(method) (@thick Klass.Type) -> @owned Klass
185
+ // CHECK: [[X:%.*]] = apply [[FN]](
186
+ // CHECK: [[X_MV_LEXICAL:%.*]] = move_value [lexical] [[X]]
187
+ // CHECK: [[X_MV_ONLY:%.*]] = mark_must_check [no_implicit_copy] [[X_MV_LEXICAL]]
188
+ // CHECK: [[X_MV_ONLY_BORROW:%.*]] = begin_borrow [[X_MV_ONLY]]
189
+ // CHECK: [[X_MV_ONLY_COPY:%.*]] = copy_value [[X_MV_ONLY_BORROW]]
190
+ // CHECK: [[X_MV_ONLY_CONSUME:%.*]] = move_value [[X_MV_ONLY_COPY]]
191
+ // CHECK: } // end sil function '$s8moveonly27blackHoleLetInitialization1yyF'
192
+ func blackHoleLetInitialization1( ) {
193
+ let x = Klass ( )
194
+ let _ = x
195
+ }
196
+
197
+ // CHECK-LABEL: sil hidden [ossa] @$s8moveonly27blackHoleLetInitialization2yyF : $@convention(thin) () -> () {
198
+ // CHECK: [[FN:%.*]] = function_ref @$s8moveonly5KlassCACycfC : $@convention(method) (@thick Klass.Type) -> @owned Klass
199
+ // CHECK: [[X:%.*]] = apply [[FN]](
200
+ // CHECK: [[X_MV_LEXICAL:%.*]] = move_value [lexical] [[X]]
201
+ // CHECK: [[X_MV_ONLY:%.*]] = mark_must_check [no_implicit_copy] [[X_MV_LEXICAL]]
202
+ // CHECK: [[X_MV_ONLY_BORROW:%.*]] = begin_borrow [[X_MV_ONLY]]
203
+ // CHECK: [[X_MV_ONLY_COPY:%.*]] = copy_value [[X_MV_ONLY_BORROW]]
204
+ // CHECK: [[X_MV_ONLY_CONSUME:%.*]] = move_value [[X_MV_ONLY_COPY]]
205
+ // CHECK: } // end sil function '$s8moveonly27blackHoleLetInitialization2yyF'
206
+ func blackHoleLetInitialization2( ) {
207
+ let x = Klass ( )
208
+ var _ = x
209
+ }
210
+
211
+ // CHECK-LABEL: sil hidden [ossa] @$s8moveonly27blackHoleVarInitialization1yyF : $@convention(thin) () -> () {
212
+ // CHECK: [[BOX:%.*]] = alloc_box
213
+ // CHECK: [[BOX_BORROW:%.*]] = begin_borrow [lexical] [[BOX]]
214
+ // CHECK: [[PROJECT_BOX:%.*]] = project_box [[BOX_BORROW]]
215
+ // CHECK: [[MARKED_ADDR:%.*]] = mark_must_check [no_implicit_copy] [[PROJECT_BOX]]
216
+ // CHECK: [[FN:%.*]] = function_ref @$s8moveonly5KlassCACycfC : $@convention(method) (@thick Klass.Type) -> @owned Klass
217
+ // CHECK: [[X:%.*]] = apply [[FN]](
218
+ // CHECK: store [[X]] to [init] [[MARKED_ADDR]]
219
+ // CHECK: [[READ:%.*]] = begin_access [read] [unknown] [[MARKED_ADDR]]
220
+ // CHECK: [[LD:%.*]] = load [copy] [[READ]]
221
+ // CHECK: [[CONSUME:%.*]] = move_value [[LD]]
222
+ // CHECK: } // end sil function '$s8moveonly27blackHoleVarInitialization1yyF'
223
+ func blackHoleVarInitialization1( ) {
224
+ var x = Klass ( )
225
+ x = Klass ( )
226
+ let _ = x
227
+ }
228
+
229
+ // CHECK-LABEL: sil hidden [ossa] @$s8moveonly27blackHoleVarInitialization2yyF : $@convention(thin) () -> () {
230
+ // CHECK: [[BOX:%.*]] = alloc_box
231
+ // CHECK: [[BOX_BORROW:%.*]] = begin_borrow [lexical] [[BOX]]
232
+ // CHECK: [[PROJECT_BOX:%.*]] = project_box [[BOX_BORROW]]
233
+ // CHECK: [[MARKED_ADDR:%.*]] = mark_must_check [no_implicit_copy] [[PROJECT_BOX]]
234
+ // CHECK: [[FN:%.*]] = function_ref @$s8moveonly5KlassCACycfC : $@convention(method) (@thick Klass.Type) -> @owned Klass
235
+ // CHECK: [[X:%.*]] = apply [[FN]](
236
+ // CHECK: store [[X]] to [init] [[MARKED_ADDR]]
237
+ // CHECK: [[READ:%.*]] = begin_access [read] [unknown] [[MARKED_ADDR]]
238
+ // CHECK: [[LD:%.*]] = load [copy] [[READ]]
239
+ // CHECK: [[CONSUME:%.*]] = move_value [[LD]]
240
+ // CHECK: } // end sil function '$s8moveonly27blackHoleVarInitialization2yyF'
241
+ func blackHoleVarInitialization2( ) {
242
+ var x = Klass ( )
243
+ x = Klass ( )
244
+ var _ = x
245
+ }
0 commit comments