about summary refs log tree commit diff
diff options
context:
space:
mode:
-rw-r--r--compiler/rustc_borrowck/src/polonius/loan_kills.rs (renamed from compiler/rustc_borrowck/src/polonius/constraint_generation.rs)44
-rw-r--r--compiler/rustc_borrowck/src/polonius/mod.rs4
2 files changed, 20 insertions, 28 deletions
diff --git a/compiler/rustc_borrowck/src/polonius/constraint_generation.rs b/compiler/rustc_borrowck/src/polonius/loan_kills.rs
index 27efc3c4108..cc836115c31 100644
--- a/compiler/rustc_borrowck/src/polonius/constraint_generation.rs
+++ b/compiler/rustc_borrowck/src/polonius/loan_kills.rs
@@ -3,13 +3,14 @@
 use rustc_middle::mir::visit::Visitor;
 use rustc_middle::mir::{
     Body, Local, Location, Place, PlaceRef, ProjectionElem, Rvalue, Statement, StatementKind,
-    Terminator, TerminatorKind, UserTypeProjection,
+    Terminator, TerminatorKind,
 };
-use rustc_middle::ty::{TyCtxt, Variance};
+use rustc_middle::ty::TyCtxt;
 
 use crate::{borrow_set::BorrowSet, facts::AllFacts, location::LocationTable, places_conflict};
 
-pub(super) fn generate_constraints<'tcx>(
+/// Emit `loan_killed_at` and `cfg_edge` facts at the same time.
+pub(super) fn emit_loan_kills<'tcx>(
     tcx: TyCtxt<'tcx>,
     all_facts: &mut AllFacts,
     location_table: &LocationTable,
@@ -17,23 +18,23 @@ pub(super) fn generate_constraints<'tcx>(
     borrow_set: &BorrowSet<'tcx>,
 ) {
     let _prof_timer = tcx.prof.generic_activity("polonius_fact_generation");
-    let mut cg = ConstraintGeneration { borrow_set, tcx, location_table, all_facts, body };
+    let mut visitor = LoanKillsGenerator { borrow_set, tcx, location_table, all_facts, body };
     for (bb, data) in body.basic_blocks.iter_enumerated() {
-        cg.visit_basic_block_data(bb, data);
+        visitor.visit_basic_block_data(bb, data);
     }
 }
 
-/// 'cg = the duration of the constraint generation process itself.
-struct ConstraintGeneration<'cg, 'tcx> {
+struct LoanKillsGenerator<'cx, 'tcx> {
     tcx: TyCtxt<'tcx>,
-    all_facts: &'cg mut AllFacts,
-    location_table: &'cg LocationTable,
-    borrow_set: &'cg BorrowSet<'tcx>,
-    body: &'cg Body<'tcx>,
+    all_facts: &'cx mut AllFacts,
+    location_table: &'cx LocationTable,
+    borrow_set: &'cx BorrowSet<'tcx>,
+    body: &'cx Body<'tcx>,
 }
 
-impl<'cg, 'tcx> Visitor<'tcx> for ConstraintGeneration<'cg, 'tcx> {
+impl<'cx, 'tcx> Visitor<'tcx> for LoanKillsGenerator<'cx, 'tcx> {
     fn visit_statement(&mut self, statement: &Statement<'tcx>, location: Location) {
+        // Also record CFG facts here.
         self.all_facts.cfg_edge.push((
             self.location_table.start_index(location),
             self.location_table.mid_index(location),
@@ -56,11 +57,11 @@ impl<'cg, 'tcx> Visitor<'tcx> for ConstraintGeneration<'cg, 'tcx> {
         // When we see `X = ...`, then kill borrows of
         // `(*X).foo` and so forth.
         self.record_killed_borrows_for_place(*place, location);
-
         self.super_assign(place, rvalue, location);
     }
 
     fn visit_terminator(&mut self, terminator: &Terminator<'tcx>, location: Location) {
+        // Also record CFG facts here.
         self.all_facts.cfg_edge.push((
             self.location_table.start_index(location),
             self.location_table.mid_index(location),
@@ -83,20 +84,11 @@ impl<'cg, 'tcx> Visitor<'tcx> for ConstraintGeneration<'cg, 'tcx> {
 
         self.super_terminator(terminator, location);
     }
-
-    fn visit_ascribe_user_ty(
-        &mut self,
-        _place: &Place<'tcx>,
-        _variance: Variance,
-        _user_ty: &UserTypeProjection,
-        _location: Location,
-    ) {
-    }
 }
 
-impl<'cx, 'tcx> ConstraintGeneration<'cx, 'tcx> {
-    /// When recording facts for Polonius, records the borrows on the specified place
-    /// as `killed`. For example, when assigning to a local, or on a call's return destination.
+impl<'tcx> LoanKillsGenerator<'_, 'tcx> {
+    /// Records the borrows on the specified place as `killed`. For example, when assigning to a
+    /// local, or on a call's return destination.
     fn record_killed_borrows_for_place(&mut self, place: Place<'tcx>, location: Location) {
         // Depending on the `Place` we're killing:
         // - if it's a local, or a single deref of a local,
@@ -143,7 +135,7 @@ impl<'cx, 'tcx> ConstraintGeneration<'cx, 'tcx> {
         }
     }
 
-    /// When recording facts for Polonius, records the borrows on the specified local as `killed`.
+    /// Records the borrows on the specified local as `killed`.
     fn record_killed_borrows_for_local(&mut self, local: Local, location: Location) {
         if let Some(borrow_indices) = self.borrow_set.local_map.get(&local) {
             let location_index = self.location_table.mid_index(location);
diff --git a/compiler/rustc_borrowck/src/polonius/mod.rs b/compiler/rustc_borrowck/src/polonius/mod.rs
index 0fbe221ad10..c3fdc6c7b96 100644
--- a/compiler/rustc_borrowck/src/polonius/mod.rs
+++ b/compiler/rustc_borrowck/src/polonius/mod.rs
@@ -13,8 +13,8 @@ use crate::location::LocationTable;
 use crate::type_check::free_region_relations::UniversalRegionRelations;
 use crate::universal_regions::UniversalRegions;
 
-mod constraint_generation;
 mod invalidation;
+mod loan_kills;
 
 /// Emit facts needed for move/init analysis: moves and assignments.
 pub(crate) fn emit_move_facts(
@@ -160,5 +160,5 @@ pub(crate) fn emit_cfg_and_loan_kills_facts<'tcx>(
         return;
     };
 
-    constraint_generation::generate_constraints(tcx, all_facts, location_table, body, borrow_set);
+    loan_kills::emit_loan_kills(tcx, all_facts, location_table, body, borrow_set);
 }