diff --git a/compiler/rustc_borrowck/src/nll.rs b/compiler/rustc_borrowck/src/nll.rs index 6ffab16577908..bf486ffe4bc85 100644 --- a/compiler/rustc_borrowck/src/nll.rs +++ b/compiler/rustc_borrowck/src/nll.rs @@ -189,6 +189,7 @@ pub(crate) fn compute_regions<'cx, 'tcx>( move_data, elements, upvars, + use_polonius, ); if let Some(all_facts) = &mut all_facts { diff --git a/compiler/rustc_borrowck/src/type_check/liveness/mod.rs b/compiler/rustc_borrowck/src/type_check/liveness/mod.rs index f18fe1f43d4da..ac8670a513820 100644 --- a/compiler/rustc_borrowck/src/type_check/liveness/mod.rs +++ b/compiler/rustc_borrowck/src/type_check/liveness/mod.rs @@ -37,6 +37,7 @@ pub(super) fn generate<'mir, 'tcx>( flow_inits: &mut ResultsCursor<'mir, 'tcx, MaybeInitializedPlaces<'mir, 'tcx>>, move_data: &MoveData<'tcx>, location_table: &LocationTable, + use_polonius: bool, ) { debug!("liveness::generate"); @@ -46,7 +47,7 @@ pub(super) fn generate<'mir, 'tcx>( &typeck.borrowck_context.constraints.outlives_constraints, ); let live_locals = compute_live_locals(typeck.tcx(), &free_regions, &body); - let facts_enabled = AllFacts::enabled(typeck.tcx()); + let facts_enabled = use_polonius || AllFacts::enabled(typeck.tcx()); let polonius_drop_used = if facts_enabled { let mut drop_used = Vec::new(); diff --git a/compiler/rustc_borrowck/src/type_check/mod.rs b/compiler/rustc_borrowck/src/type_check/mod.rs index 73103643e3e16..42ff83036e047 100644 --- a/compiler/rustc_borrowck/src/type_check/mod.rs +++ b/compiler/rustc_borrowck/src/type_check/mod.rs @@ -136,6 +136,7 @@ pub(crate) fn type_check<'mir, 'tcx>( move_data: &MoveData<'tcx>, elements: &Rc, upvars: &[Upvar<'tcx>], + use_polonius: bool, ) -> MirTypeckResults<'tcx> { let implicit_region_bound = infcx.tcx.mk_region(ty::ReVar(universal_regions.fr_fn_body)); let mut universe_causes = FxHashMap::default(); @@ -187,7 +188,15 @@ pub(crate) fn type_check<'mir, 'tcx>( &mut borrowck_context, |mut cx| { cx.equate_inputs_and_outputs(&body, universal_regions, &normalized_inputs_and_output); - liveness::generate(&mut cx, body, elements, flow_inits, move_data, location_table); + liveness::generate( + &mut cx, + body, + elements, + flow_inits, + move_data, + location_table, + use_polonius, + ); translate_outlives_facts(&mut cx); let opaque_type_values = mem::take(&mut infcx.inner.borrow_mut().opaque_types);