about summary refs log tree commit diff
diff options
context:
space:
mode:
-rw-r--r--compiler/rustc_borrowck/src/lib.rs2
-rw-r--r--compiler/rustc_borrowck/src/nll.rs12
-rw-r--r--compiler/rustc_borrowck/src/polonius/invalidation.rs (renamed from compiler/rustc_borrowck/src/invalidation.rs)34
-rw-r--r--compiler/rustc_borrowck/src/polonius/mod.rs (renamed from compiler/rustc_borrowck/src/nll/polonius.rs)19
4 files changed, 42 insertions, 25 deletions
diff --git a/compiler/rustc_borrowck/src/lib.rs b/compiler/rustc_borrowck/src/lib.rs
index 46e5356ad2c..d711a53565d 100644
--- a/compiler/rustc_borrowck/src/lib.rs
+++ b/compiler/rustc_borrowck/src/lib.rs
@@ -70,13 +70,13 @@ mod dataflow;
 mod def_use;
 mod diagnostics;
 mod facts;
-mod invalidation;
 mod location;
 mod member_constraints;
 mod nll;
 mod path_utils;
 mod place_ext;
 mod places_conflict;
+mod polonius;
 mod prefixes;
 mod region_infer;
 mod renumber;
diff --git a/compiler/rustc_borrowck/src/nll.rs b/compiler/rustc_borrowck/src/nll.rs
index 705e56ea984..0e1f48902e3 100644
--- a/compiler/rustc_borrowck/src/nll.rs
+++ b/compiler/rustc_borrowck/src/nll.rs
@@ -20,16 +20,14 @@ use std::path::PathBuf;
 use std::rc::Rc;
 use std::str::FromStr;
 
-mod polonius;
-
 use crate::{
     borrow_set::BorrowSet,
     constraint_generation,
     consumers::ConsumerOptions,
     diagnostics::RegionErrors,
     facts::{AllFacts, AllFactsExt, RustcFacts},
-    invalidation,
     location::LocationTable,
+    polonius,
     region_infer::{values::RegionValueElements, RegionInferenceContext},
     renumber,
     type_check::{self, MirTypeckRegionConstraints, MirTypeckResults},
@@ -176,7 +174,13 @@ pub(crate) fn compute_regions<'cx, 'tcx>(
     );
 
     // Generate various additional constraints.
-    invalidation::generate_invalidates(infcx.tcx, &mut all_facts, location_table, body, borrow_set);
+    polonius::emit_loan_invalidations_facts(
+        infcx.tcx,
+        &mut all_facts,
+        location_table,
+        body,
+        borrow_set,
+    );
 
     let def_id = body.source.def_id();
 
diff --git a/compiler/rustc_borrowck/src/invalidation.rs b/compiler/rustc_borrowck/src/polonius/invalidation.rs
index a3db101311f..43119a97bee 100644
--- a/compiler/rustc_borrowck/src/invalidation.rs
+++ b/compiler/rustc_borrowck/src/polonius/invalidation.rs
@@ -14,31 +14,25 @@ use crate::{
     ReadOrWrite, Reservation, Shallow, Write, WriteKind,
 };
 
-pub(super) fn generate_invalidates<'tcx>(
+/// Emit `loan_invalidated_at` facts.
+pub(super) fn emit_loan_invalidations<'tcx>(
     tcx: TyCtxt<'tcx>,
-    all_facts: &mut Option<AllFacts>,
+    all_facts: &mut AllFacts,
     location_table: &LocationTable,
     body: &Body<'tcx>,
     borrow_set: &BorrowSet<'tcx>,
 ) {
-    if all_facts.is_none() {
-        // Nothing to do if we don't have any facts
-        return;
-    }
-
-    if let Some(all_facts) = all_facts {
-        let _prof_timer = tcx.prof.generic_activity("polonius_fact_generation");
-        let dominators = body.basic_blocks.dominators();
-        let mut ig = InvalidationGenerator {
-            all_facts,
-            borrow_set,
-            tcx,
-            location_table,
-            body: body,
-            dominators,
-        };
-        ig.visit_body(body);
-    }
+    let _prof_timer = tcx.prof.generic_activity("polonius_fact_generation");
+    let dominators = body.basic_blocks.dominators();
+    let mut ig = InvalidationGenerator {
+        all_facts,
+        borrow_set,
+        tcx,
+        location_table,
+        body: body,
+        dominators,
+    };
+    ig.visit_body(body);
 }
 
 struct InvalidationGenerator<'cx, 'tcx> {
diff --git a/compiler/rustc_borrowck/src/nll/polonius.rs b/compiler/rustc_borrowck/src/polonius/mod.rs
index d493bead772..887c5fac16b 100644
--- a/compiler/rustc_borrowck/src/nll/polonius.rs
+++ b/compiler/rustc_borrowck/src/polonius/mod.rs
@@ -4,6 +4,7 @@
 //! parity.
 
 use rustc_middle::mir::{Body, LocalKind, Location, START_BLOCK};
+use rustc_middle::ty::TyCtxt;
 use rustc_mir_dataflow::move_paths::{InitKind, InitLocation, MoveData};
 
 use crate::borrow_set::BorrowSet;
@@ -12,6 +13,8 @@ use crate::location::LocationTable;
 use crate::type_check::free_region_relations::UniversalRegionRelations;
 use crate::universal_regions::UniversalRegions;
 
+mod invalidation;
+
 /// Emit facts needed for move/init analysis: moves and assignments.
 pub(crate) fn emit_move_facts(
     all_facts: &mut AllFacts,
@@ -126,3 +129,19 @@ pub(crate) fn emit_universal_region_facts(
         }
     }
 }
+
+/// Emit facts about loan invalidations
+pub(crate) fn emit_loan_invalidations_facts<'tcx>(
+    tcx: TyCtxt<'tcx>,
+    all_facts: &mut Option<AllFacts>,
+    location_table: &LocationTable,
+    body: &Body<'tcx>,
+    borrow_set: &BorrowSet<'tcx>,
+) {
+    let Some(all_facts) = all_facts else {
+        // Nothing to do if we don't have any facts to fill
+        return;
+    };
+
+    invalidation::emit_loan_invalidations(tcx, all_facts, location_table, body, borrow_set);
+}