]> git.lizzy.rs Git - rust.git/blobdiff - src/librustc_mir/borrow_check/type_check/liveness/polonius.rs
Rollup merge of #70038 - DutchGhost:const-forget-tests, r=RalfJung
[rust.git] / src / librustc_mir / borrow_check / type_check / liveness / polonius.rs
index 055415f28722289a3b41b309564c8b86458dbe3e..407e0628b6eb8ba6a78a34aaf93fc433d7f2f52b 100644 (file)
 type PathPointRelation = Vec<(MovePathIndex, LocationIndex)>;
 
 struct UseFactsExtractor<'me> {
-    var_defined: &'me mut VarPointRelation,
-    var_used: &'me mut VarPointRelation,
+    var_defined_at: &'me mut VarPointRelation,
+    var_used_at: &'me mut VarPointRelation,
     location_table: &'me LocationTable,
-    var_drop_used: &'me mut Vec<(Local, Location)>,
+    var_dropped_at: &'me mut VarPointRelation,
     move_data: &'me MoveData<'me>,
-    path_accessed_at: &'me mut PathPointRelation,
+    path_accessed_at_base: &'me mut PathPointRelation,
 }
 
 // A Visitor to walk through the MIR and extract point-wise facts
@@ -28,22 +28,22 @@ fn location_to_index(&self, location: Location) -> LocationIndex {
 
     fn insert_def(&mut self, local: Local, location: Location) {
         debug!("UseFactsExtractor::insert_def()");
-        self.var_defined.push((local, self.location_to_index(location)));
+        self.var_defined_at.push((local, self.location_to_index(location)));
     }
 
     fn insert_use(&mut self, local: Local, location: Location) {
         debug!("UseFactsExtractor::insert_use()");
-        self.var_used.push((local, self.location_to_index(location)));
+        self.var_used_at.push((local, self.location_to_index(location)));
     }
 
     fn insert_drop_use(&mut self, local: Local, location: Location) {
         debug!("UseFactsExtractor::insert_drop_use()");
-        self.var_drop_used.push((local, location));
+        self.var_dropped_at.push((local, self.location_to_index(location)));
     }
 
     fn insert_path_access(&mut self, path: MovePathIndex, location: Location) {
         debug!("UseFactsExtractor::insert_path_access({:?}, {:?})", path, location);
-        self.path_accessed_at.push((path, self.location_to_index(location)));
+        self.path_accessed_at_base.push((path, self.location_table.start_index(location)));
     }
 
     fn place_to_mpi(&self, place: &Place<'_>) -> Option<MovePathIndex> {
@@ -88,51 +88,54 @@ pub(super) fn populate_access_facts(
     body: ReadOnlyBodyAndCache<'_, 'tcx>,
     location_table: &LocationTable,
     move_data: &MoveData<'_>,
-    drop_used: &mut Vec<(Local, Location)>,
+    dropped_at: &mut Vec<(Local, Location)>,
 ) {
     debug!("populate_access_facts()");
 
     if let Some(facts) = typeck.borrowck_context.all_facts.as_mut() {
         let mut extractor = UseFactsExtractor {
-            var_defined: &mut facts.var_defined,
-            var_used: &mut facts.var_used,
-            var_drop_used: drop_used,
-            path_accessed_at: &mut facts.path_accessed_at,
+            var_defined_at: &mut facts.var_defined_at,
+            var_used_at: &mut facts.var_used_at,
+            var_dropped_at: &mut facts.var_dropped_at,
+            path_accessed_at_base: &mut facts.path_accessed_at_base,
             location_table,
             move_data,
         };
         extractor.visit_body(body);
 
-        facts.var_drop_used.extend(
-            drop_used.iter().map(|&(local, location)| (local, location_table.mid_index(location))),
+        facts.var_dropped_at.extend(
+            dropped_at.iter().map(|&(local, location)| (local, location_table.mid_index(location))),
         );
 
         for (local, local_decl) in body.local_decls.iter_enumerated() {
-            debug!("add var_uses_regions facts - local={:?}, type={:?}", local, local_decl.ty);
+            debug!(
+                "add use_of_var_derefs_origin facts - local={:?}, type={:?}",
+                local, local_decl.ty
+            );
             let _prof_timer = typeck.infcx.tcx.prof.generic_activity("polonius_fact_generation");
             let universal_regions = &typeck.borrowck_context.universal_regions;
             typeck.infcx.tcx.for_each_free_region(&local_decl.ty, |region| {
                 let region_vid = universal_regions.to_region_vid(region);
-                facts.var_uses_region.push((local, region_vid));
+                facts.use_of_var_derefs_origin.push((local, region_vid));
             });
         }
     }
 }
 
 // For every potentially drop()-touched region `region` in `local`'s type
-// (`kind`), emit a Polonius `var_drops_region(local, region)` fact.
-pub(super) fn add_var_drops_regions(
+// (`kind`), emit a Polonius `use_of_var_derefs_origin(local, origin)` fact.
+pub(super) fn add_drop_of_var_derefs_origin(
     typeck: &mut TypeChecker<'_, 'tcx>,
     local: Local,
     kind: &GenericArg<'tcx>,
 ) {
-    debug!("add_var_drops_region(local={:?}, kind={:?}", local, kind);
+    debug!("add_drop_of_var_derefs_origin(local={:?}, kind={:?}", local, kind);
     if let Some(facts) = typeck.borrowck_context.all_facts.as_mut() {
         let _prof_timer = typeck.infcx.tcx.prof.generic_activity("polonius_fact_generation");
         let universal_regions = &typeck.borrowck_context.universal_regions;
         typeck.infcx.tcx.for_each_free_region(kind, |drop_live_region| {
             let region_vid = universal_regions.to_region_vid(drop_live_region);
-            facts.var_drops_region.push((local, region_vid));
+            facts.drop_of_var_derefs_origin.push((local, region_vid));
         });
     }
 }