Rollup merge of #115908 - cjgillot:lint-noclone, r=oli-obk

Do not clone MIR for const-prop lint.

Addresses https://github.com/rust-lang/rust/pull/115797#issuecomment-1721250533
This commit is contained in:
Matthias Krüger 2023-09-18 13:02:20 +02:00 committed by GitHub
commit c101c5fa50
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

View File

@ -105,25 +105,12 @@ impl<'tcx> MirLint<'tcx> for ConstProp {
trace!("ConstProp starting for {:?}", def_id); trace!("ConstProp starting for {:?}", def_id);
let dummy_body = &Body::new(
body.source,
(*body.basic_blocks).to_owned(),
body.source_scopes.clone(),
body.local_decls.clone(),
Default::default(),
body.arg_count,
Default::default(),
body.span,
body.generator_kind(),
body.tainted_by_errors,
);
// FIXME(oli-obk, eddyb) Optimize locals (or even local paths) to hold // FIXME(oli-obk, eddyb) Optimize locals (or even local paths) to hold
// constants, instead of just checking for const-folding succeeding. // constants, instead of just checking for const-folding succeeding.
// That would require a uniform one-def no-mutation analysis // That would require a uniform one-def no-mutation analysis
// and RPO (or recursing when needing the value of a local). // and RPO (or recursing when needing the value of a local).
let mut optimization_finder = ConstPropagator::new(body, dummy_body, tcx); let mut linter = ConstPropagator::new(body, tcx);
optimization_finder.visit_body(body); linter.visit_body(body);
trace!("ConstProp done for {:?}", def_id); trace!("ConstProp done for {:?}", def_id);
} }
@ -169,11 +156,7 @@ impl<'tcx> ty::layout::HasParamEnv<'tcx> for ConstPropagator<'_, 'tcx> {
} }
impl<'mir, 'tcx> ConstPropagator<'mir, 'tcx> { impl<'mir, 'tcx> ConstPropagator<'mir, 'tcx> {
fn new( fn new(body: &'mir Body<'tcx>, tcx: TyCtxt<'tcx>) -> ConstPropagator<'mir, 'tcx> {
body: &Body<'tcx>,
dummy_body: &'mir Body<'tcx>,
tcx: TyCtxt<'tcx>,
) -> ConstPropagator<'mir, 'tcx> {
let def_id = body.source.def_id(); let def_id = body.source.def_id();
let args = &GenericArgs::identity_for_item(tcx, def_id); let args = &GenericArgs::identity_for_item(tcx, def_id);
let param_env = tcx.param_env_reveal_all_normalized(def_id); let param_env = tcx.param_env_reveal_all_normalized(def_id);
@ -204,7 +187,7 @@ impl<'mir, 'tcx> ConstPropagator<'mir, 'tcx> {
ecx.push_stack_frame( ecx.push_stack_frame(
Instance::new(def_id, args), Instance::new(def_id, args),
dummy_body, body,
&ret, &ret,
StackPopCleanup::Root { cleanup: false }, StackPopCleanup::Root { cleanup: false },
) )