Skip to content

Commit

Permalink
Steal MIR for CTFE when possible.
Browse files Browse the repository at this point in the history
  • Loading branch information
cjgillot committed Aug 5, 2023
1 parent fbc11e9 commit 02e10a0
Showing 1 changed file with 8 additions and 1 deletion.
9 changes: 8 additions & 1 deletion compiler/rustc_mir_transform/src/lib.rs
Original file line number Diff line number Diff line change
Expand Up @@ -338,7 +338,14 @@ fn inner_mir_for_ctfe(tcx: TyCtxt<'_>, def: LocalDefId) -> Body<'_> {
return shim::build_adt_ctor(tcx, def.to_def_id());
}

let body = tcx.mir_drops_elaborated_and_const_checked(def).borrow().clone();
let body = tcx.mir_drops_elaborated_and_const_checked(def);
let body = match tcx.hir().body_const_context(def) {
// consts and statics do not have `optimized_mir`, so we can steal the body instead of
// cloning it.
Some(hir::ConstContext::Const | hir::ConstContext::Static(_)) => body.steal(),
Some(hir::ConstContext::ConstFn) => body.borrow().clone(),
None => bug!("`mir_for_ctfe` called on non-const {def:?}"),
};

let mut body = remap_mir_for_const_eval_select(tcx, body, hir::Constness::Const);
pm::run_passes(tcx, &mut body, &[&ctfe_limit::CtfeLimit], None);
Expand Down

0 comments on commit 02e10a0

Please sign in to comment.