Skip to content

Commit 3c8d145

Browse files
Auto merge of #150551 - lqd:lazy-polonius, r=<try>
Compute localized outlives constraints lazily
2 parents b7bcaa5 + 99dab0a commit 3c8d145

12 files changed

Lines changed: 487 additions & 724 deletions

File tree

compiler/rustc_borrowck/src/diagnostics/explain_borrow.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -653,8 +653,8 @@ impl<'tcx> MirBorrowckCtxt<'_, '_, 'tcx> {
653653
// We want to focus on relevant live locals in diagnostics, so when polonius is enabled, we
654654
// ensure that we don't emit live boring locals as explanations.
655655
let is_local_boring = |local| {
656-
if let Some(polonius_diagnostics) = self.polonius_diagnostics {
657-
polonius_diagnostics.boring_nll_locals.contains(&local)
656+
if let Some(polonius_context) = self.polonius_context {
657+
polonius_context.boring_nll_locals.contains(&local)
658658
} else {
659659
assert!(!tcx.sess.opts.unstable_opts.polonius.is_next_enabled());
660660

compiler/rustc_borrowck/src/lib.rs

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -62,10 +62,10 @@ use crate::diagnostics::{
6262
use crate::path_utils::*;
6363
use crate::place_ext::PlaceExt;
6464
use crate::places_conflict::{PlaceConflictBias, places_conflict};
65+
use crate::polonius::PoloniusContext;
6566
use crate::polonius::legacy::{
6667
PoloniusFacts, PoloniusFactsExt, PoloniusLocationTable, PoloniusOutput,
6768
};
68-
use crate::polonius::{PoloniusContext, PoloniusDiagnosticsContext};
6969
use crate::prefixes::PrefixSet;
7070
use crate::region_infer::RegionInferenceContext;
7171
use crate::region_infer::opaque_types::DeferredOpaqueTypeError;
@@ -420,7 +420,7 @@ fn borrowck_check_region_constraints<'tcx>(
420420
polonius_output,
421421
opt_closure_req,
422422
nll_errors,
423-
polonius_diagnostics,
423+
polonius_context,
424424
} = nll::compute_regions(
425425
root_cx,
426426
&infcx,
@@ -444,7 +444,7 @@ fn borrowck_check_region_constraints<'tcx>(
444444
&regioncx,
445445
&opt_closure_req,
446446
&borrow_set,
447-
polonius_diagnostics.as_ref(),
447+
polonius_context.as_ref(),
448448
);
449449

450450
// We also have a `#[rustc_regions]` annotation that causes us to dump
@@ -486,7 +486,7 @@ fn borrowck_check_region_constraints<'tcx>(
486486
polonius_output: None,
487487
move_errors: Vec::new(),
488488
diags_buffer,
489-
polonius_diagnostics: polonius_diagnostics.as_ref(),
489+
polonius_context: polonius_context.as_ref(),
490490
};
491491
struct MoveVisitor<'a, 'b, 'infcx, 'tcx> {
492492
ctxt: &'a mut MirBorrowckCtxt<'b, 'infcx, 'tcx>,
@@ -525,7 +525,7 @@ fn borrowck_check_region_constraints<'tcx>(
525525
move_errors: Vec::new(),
526526
diags_buffer,
527527
polonius_output: polonius_output.as_deref(),
528-
polonius_diagnostics: polonius_diagnostics.as_ref(),
528+
polonius_context: polonius_context.as_ref(),
529529
};
530530

531531
// Compute and report region errors, if any.
@@ -775,7 +775,7 @@ struct MirBorrowckCtxt<'a, 'infcx, 'tcx> {
775775
/// Results of Polonius analysis.
776776
polonius_output: Option<&'a PoloniusOutput>,
777777
/// When using `-Zpolonius=next`: the data used to compute errors and diagnostics.
778-
polonius_diagnostics: Option<&'a PoloniusDiagnosticsContext>,
778+
polonius_context: Option<&'a PoloniusContext>,
779779
}
780780

781781
// Check that:

compiler/rustc_borrowck/src/nll.rs

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -22,10 +22,10 @@ use crate::borrow_set::BorrowSet;
2222
use crate::consumers::RustcFacts;
2323
use crate::diagnostics::RegionErrors;
2424
use crate::handle_placeholders::compute_sccs_applying_placeholder_outlives_constraints;
25+
use crate::polonius::PoloniusContext;
2526
use crate::polonius::legacy::{
2627
PoloniusFacts, PoloniusFactsExt, PoloniusLocationTable, PoloniusOutput,
2728
};
28-
use crate::polonius::{PoloniusContext, PoloniusDiagnosticsContext};
2929
use crate::region_infer::RegionInferenceContext;
3030
use crate::type_check::MirTypeckRegionConstraints;
3131
use crate::type_check::free_region_relations::UniversalRegionRelations;
@@ -46,7 +46,7 @@ pub(crate) struct NllOutput<'tcx> {
4646

4747
/// When using `-Zpolonius=next`: the data used to compute errors and diagnostics, e.g.
4848
/// localized typeck and liveness constraints.
49-
pub polonius_diagnostics: Option<PoloniusDiagnosticsContext>,
49+
pub polonius_context: Option<PoloniusContext>,
5050
}
5151

5252
/// Rewrites the regions in the MIR to use NLL variables, also scraping out the set of universal
@@ -121,7 +121,7 @@ pub(crate) fn compute_regions<'tcx>(
121121
universal_region_relations: Frozen<UniversalRegionRelations<'tcx>>,
122122
constraints: MirTypeckRegionConstraints<'tcx>,
123123
mut polonius_facts: Option<AllFacts<RustcFacts>>,
124-
polonius_context: Option<PoloniusContext>,
124+
mut polonius_context: Option<PoloniusContext>,
125125
) -> NllOutput<'tcx> {
126126
let polonius_output = root_cx.consumer.as_ref().map_or(false, |c| c.polonius_output())
127127
|| infcx.tcx.sess.opts.unstable_opts.polonius.is_legacy_enabled();
@@ -153,9 +153,9 @@ pub(crate) fn compute_regions<'tcx>(
153153

154154
// If requested for `-Zpolonius=next`, convert NLL constraints to localized outlives constraints
155155
// and use them to compute loan liveness.
156-
let polonius_diagnostics = polonius_context.map(|polonius_context| {
157-
polonius_context.compute_loan_liveness(infcx.tcx, &mut regioncx, body, borrow_set)
158-
});
156+
if let Some(polonius_context) = polonius_context.as_mut() {
157+
polonius_context.compute_loan_liveness(&mut regioncx, body, borrow_set)
158+
}
159159

160160
// If requested: dump NLL facts, and run legacy polonius analysis.
161161
let polonius_output = polonius_facts.as_ref().and_then(|polonius_facts| {
@@ -188,7 +188,7 @@ pub(crate) fn compute_regions<'tcx>(
188188
polonius_output,
189189
opt_closure_req: closure_region_requirements,
190190
nll_errors,
191-
polonius_diagnostics,
191+
polonius_context,
192192
}
193193
}
194194

0 commit comments

Comments
 (0)