File tree 1 file changed +8
-1
lines changed
compiler/rustc_mir_transform/src
1 file changed +8
-1
lines changed Original file line number Diff line number Diff line change @@ -338,7 +338,14 @@ fn inner_mir_for_ctfe(tcx: TyCtxt<'_>, def: LocalDefId) -> Body<'_> {
338
338
return shim:: build_adt_ctor ( tcx, def. to_def_id ( ) ) ;
339
339
}
340
340
341
- let body = tcx. mir_drops_elaborated_and_const_checked ( def) . borrow ( ) . clone ( ) ;
341
+ let body = tcx. mir_drops_elaborated_and_const_checked ( def) ;
342
+ let body = match tcx. hir ( ) . body_const_context ( def) {
343
+ // consts and statics do not have `optimized_mir`, so we can steal the body instead of
344
+ // cloning it.
345
+ Some ( hir:: ConstContext :: Const | hir:: ConstContext :: Static ( _) ) => body. steal ( ) ,
346
+ Some ( hir:: ConstContext :: ConstFn ) => body. borrow ( ) . clone ( ) ,
347
+ None => bug ! ( "`mir_for_ctfe` called on non-const {def:?}" ) ,
348
+ } ;
342
349
343
350
let mut body = remap_mir_for_const_eval_select ( tcx, body, hir:: Constness :: Const ) ;
344
351
pm:: run_passes ( tcx, & mut body, & [ & ctfe_limit:: CtfeLimit ] , None ) ;
You can’t perform that action at this time.
0 commit comments