Skip to content

Commit 16a5da7

Browse files
committed
extract polonius loan invalidations fact generation
and move the polonius module to the borrowck root
1 parent 459a616 commit 16a5da7

File tree

4 files changed

+42
-25
lines changed

4 files changed

+42
-25
lines changed

compiler/rustc_borrowck/src/lib.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -70,13 +70,13 @@ mod dataflow;
7070
mod def_use;
7171
mod diagnostics;
7272
mod facts;
73-
mod invalidation;
7473
mod location;
7574
mod member_constraints;
7675
mod nll;
7776
mod path_utils;
7877
mod place_ext;
7978
mod places_conflict;
79+
mod polonius;
8080
mod prefixes;
8181
mod region_infer;
8282
mod renumber;

compiler/rustc_borrowck/src/nll.rs

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -20,16 +20,14 @@ use std::path::PathBuf;
2020
use std::rc::Rc;
2121
use std::str::FromStr;
2222

23-
mod polonius;
24-
2523
use crate::{
2624
borrow_set::BorrowSet,
2725
constraint_generation,
2826
consumers::ConsumerOptions,
2927
diagnostics::RegionErrors,
3028
facts::{AllFacts, AllFactsExt, RustcFacts},
31-
invalidation,
3229
location::LocationTable,
30+
polonius,
3331
region_infer::{values::RegionValueElements, RegionInferenceContext},
3432
renumber,
3533
type_check::{self, MirTypeckRegionConstraints, MirTypeckResults},
@@ -176,7 +174,13 @@ pub(crate) fn compute_regions<'cx, 'tcx>(
176174
);
177175

178176
// Generate various additional constraints.
179-
invalidation::generate_invalidates(infcx.tcx, &mut all_facts, location_table, body, borrow_set);
177+
polonius::emit_loan_invalidations_facts(
178+
infcx.tcx,
179+
&mut all_facts,
180+
location_table,
181+
body,
182+
borrow_set,
183+
);
180184

181185
let def_id = body.source.def_id();
182186

compiler/rustc_borrowck/src/invalidation.rs renamed to compiler/rustc_borrowck/src/polonius/invalidation.rs

Lines changed: 14 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -14,31 +14,25 @@ use crate::{
1414
ReadOrWrite, Reservation, Shallow, Write, WriteKind,
1515
};
1616

17-
pub(super) fn generate_invalidates<'tcx>(
17+
/// Emit `loan_invalidated_at` facts.
18+
pub(super) fn emit_loan_invalidations<'tcx>(
1819
tcx: TyCtxt<'tcx>,
19-
all_facts: &mut Option<AllFacts>,
20+
all_facts: &mut AllFacts,
2021
location_table: &LocationTable,
2122
body: &Body<'tcx>,
2223
borrow_set: &BorrowSet<'tcx>,
2324
) {
24-
if all_facts.is_none() {
25-
// Nothing to do if we don't have any facts
26-
return;
27-
}
28-
29-
if let Some(all_facts) = all_facts {
30-
let _prof_timer = tcx.prof.generic_activity("polonius_fact_generation");
31-
let dominators = body.basic_blocks.dominators();
32-
let mut ig = InvalidationGenerator {
33-
all_facts,
34-
borrow_set,
35-
tcx,
36-
location_table,
37-
body: body,
38-
dominators,
39-
};
40-
ig.visit_body(body);
41-
}
25+
let _prof_timer = tcx.prof.generic_activity("polonius_fact_generation");
26+
let dominators = body.basic_blocks.dominators();
27+
let mut ig = InvalidationGenerator {
28+
all_facts,
29+
borrow_set,
30+
tcx,
31+
location_table,
32+
body: body,
33+
dominators,
34+
};
35+
ig.visit_body(body);
4236
}
4337

4438
struct InvalidationGenerator<'cx, 'tcx> {

compiler/rustc_borrowck/src/nll/polonius.rs renamed to compiler/rustc_borrowck/src/polonius/mod.rs

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44
//! parity.
55
66
use rustc_middle::mir::{Body, LocalKind, Location, START_BLOCK};
7+
use rustc_middle::ty::TyCtxt;
78
use rustc_mir_dataflow::move_paths::{InitKind, InitLocation, MoveData};
89

910
use crate::borrow_set::BorrowSet;
@@ -12,6 +13,8 @@ use crate::location::LocationTable;
1213
use crate::type_check::free_region_relations::UniversalRegionRelations;
1314
use crate::universal_regions::UniversalRegions;
1415

16+
mod invalidation;
17+
1518
/// Emit facts needed for move/init analysis: moves and assignments.
1619
pub(crate) fn emit_move_facts(
1720
all_facts: &mut AllFacts,
@@ -126,3 +129,19 @@ pub(crate) fn emit_universal_region_facts(
126129
}
127130
}
128131
}
132+
133+
/// Emit facts about loan invalidations
134+
pub(crate) fn emit_loan_invalidations_facts<'tcx>(
135+
tcx: TyCtxt<'tcx>,
136+
all_facts: &mut Option<AllFacts>,
137+
location_table: &LocationTable,
138+
body: &Body<'tcx>,
139+
borrow_set: &BorrowSet<'tcx>,
140+
) {
141+
let Some(all_facts) = all_facts else {
142+
// Nothing to do if we don't have any facts to fill
143+
return;
144+
};
145+
146+
invalidation::emit_loan_invalidations(tcx, all_facts, location_table, body, borrow_set);
147+
}

0 commit comments

Comments
 (0)