Propagate use_polonius flag to liveness module

This commit is contained in:
Connor Fogarty 2022-02-02 18:50:27 -06:00
parent 7cd14d2f56
commit 42371a502f
3 changed files with 13 additions and 2 deletions

View File

@ -189,6 +189,7 @@ pub(crate) fn compute_regions<'cx, 'tcx>(
move_data, move_data,
elements, elements,
upvars, upvars,
use_polonius,
); );
if let Some(all_facts) = &mut all_facts { if let Some(all_facts) = &mut all_facts {

View File

@ -37,6 +37,7 @@ pub(super) fn generate<'mir, 'tcx>(
flow_inits: &mut ResultsCursor<'mir, 'tcx, MaybeInitializedPlaces<'mir, 'tcx>>, flow_inits: &mut ResultsCursor<'mir, 'tcx, MaybeInitializedPlaces<'mir, 'tcx>>,
move_data: &MoveData<'tcx>, move_data: &MoveData<'tcx>,
location_table: &LocationTable, location_table: &LocationTable,
use_polonius: bool,
) { ) {
debug!("liveness::generate"); debug!("liveness::generate");
@ -46,7 +47,7 @@ pub(super) fn generate<'mir, 'tcx>(
&typeck.borrowck_context.constraints.outlives_constraints, &typeck.borrowck_context.constraints.outlives_constraints,
); );
let live_locals = compute_live_locals(typeck.tcx(), &free_regions, &body); 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 polonius_drop_used = if facts_enabled {
let mut drop_used = Vec::new(); let mut drop_used = Vec::new();

View File

@ -136,6 +136,7 @@ pub(crate) fn type_check<'mir, 'tcx>(
move_data: &MoveData<'tcx>, move_data: &MoveData<'tcx>,
elements: &Rc<RegionValueElements>, elements: &Rc<RegionValueElements>,
upvars: &[Upvar<'tcx>], upvars: &[Upvar<'tcx>],
use_polonius: bool,
) -> MirTypeckResults<'tcx> { ) -> MirTypeckResults<'tcx> {
let implicit_region_bound = infcx.tcx.mk_region(ty::ReVar(universal_regions.fr_fn_body)); let implicit_region_bound = infcx.tcx.mk_region(ty::ReVar(universal_regions.fr_fn_body));
let mut universe_causes = FxHashMap::default(); let mut universe_causes = FxHashMap::default();
@ -187,7 +188,15 @@ pub(crate) fn type_check<'mir, 'tcx>(
&mut borrowck_context, &mut borrowck_context,
|mut cx| { |mut cx| {
cx.equate_inputs_and_outputs(&body, universal_regions, &normalized_inputs_and_output); 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); translate_outlives_facts(&mut cx);
let opaque_type_values = mem::take(&mut infcx.inner.borrow_mut().opaque_types); let opaque_type_values = mem::take(&mut infcx.inner.borrow_mut().opaque_types);