@@ -175,3 +175,71 @@ extension NonTrivialEnum {
175175 let _ = x
176176 }
177177}
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