about summary refs log tree commit diff
diff options
context:
space:
mode:
authorNiko Matsakis <niko@alum.mit.edu>2017-12-03 12:17:20 -0500
committerNiko Matsakis <niko@alum.mit.edu>2017-12-15 10:10:57 -0500
commitebd086b67fe19d9fd861ec26eddf3eee2f734378 (patch)
tree4687026a595c782ff64a31162b1e6a1df26446ed
parent1c57468840f708e52db9b1e59b536c4f4783e823 (diff)
downloadrust-ebd086b67fe19d9fd861ec26eddf3eee2f734378.tar.gz
rust-ebd086b67fe19d9fd861ec26eddf3eee2f734378.zip
move `LivenessResults` from `nll` into `liveness` analysis
-rw-r--r--src/librustc_mir/borrow_check/nll/mod.rs25
-rw-r--r--src/librustc_mir/util/liveness.rs33
2 files changed, 35 insertions, 23 deletions
diff --git a/src/librustc_mir/borrow_check/nll/mod.rs b/src/librustc_mir/borrow_check/nll/mod.rs
index ffbb3d31917..725694fd5b7 100644
--- a/src/librustc_mir/borrow_check/nll/mod.rs
+++ b/src/librustc_mir/borrow_check/nll/mod.rs
@@ -16,7 +16,7 @@ use rustc::util::nodemap::FxHashMap;
 use std::collections::BTreeSet;
 use std::io;
 use transform::MirSource;
-use util::liveness::{self, LivenessMode, LivenessResult, LocalSet};
+use util::liveness::{LivenessResults, LocalSet};
 use borrow_check::FlowAtLocation;
 use dataflow::MaybeInitializedLvals;
 use dataflow::move_paths::MoveData;
@@ -86,23 +86,7 @@ pub(in borrow_check) fn compute_regions<'cx, 'gcx, 'tcx>(
     subtype_constraint_generation::generate(&mut regioncx, mir, constraint_sets);
 
     // Compute what is live where.
-    let liveness = &LivenessResults {
-        regular: liveness::liveness_of_locals(
-            &mir,
-            LivenessMode {
-                include_regular_use: true,
-                include_drops: false,
-            },
-        ),
-
-        drop: liveness::liveness_of_locals(
-            &mir,
-            LivenessMode {
-                include_regular_use: false,
-                include_drops: true,
-            },
-        ),
-    };
+    let liveness = &LivenessResults::compute(mir);
 
     // Generate non-subtyping constraints.
     constraint_generation::generate_constraints(
@@ -136,11 +120,6 @@ pub(in borrow_check) fn compute_regions<'cx, 'gcx, 'tcx>(
     (regioncx, closure_region_requirements)
 }
 
-struct LivenessResults {
-    regular: LivenessResult,
-    drop: LivenessResult,
-}
-
 fn dump_mir_results<'a, 'gcx, 'tcx>(
     infcx: &InferCtxt<'a, 'gcx, 'tcx>,
     liveness: &LivenessResults,
diff --git a/src/librustc_mir/util/liveness.rs b/src/librustc_mir/util/liveness.rs
index 45c3fcd8a61..5163f74dd25 100644
--- a/src/librustc_mir/util/liveness.rs
+++ b/src/librustc_mir/util/liveness.rs
@@ -80,6 +80,39 @@ pub struct LivenessMode {
     pub include_drops: bool,
 }
 
+/// A combination of liveness results, used in NLL.
+pub struct LivenessResults {
+    /// Liveness results where a regular use makes a variable X live,
+    /// but not a drop.
+    pub regular: LivenessResult,
+
+    /// Liveness results where a drop makes a variable X live,
+    /// but not a regular use.
+    pub drop: LivenessResult,
+}
+
+impl LivenessResults {
+    pub fn compute<'tcx>(mir: &Mir<'tcx>) -> LivenessResults {
+        LivenessResults {
+            regular: liveness_of_locals(
+                &mir,
+                LivenessMode {
+                    include_regular_use: true,
+                    include_drops: false,
+                },
+            ),
+
+            drop: liveness_of_locals(
+                &mir,
+                LivenessMode {
+                    include_regular_use: false,
+                    include_drops: true,
+                },
+            ),
+        }
+    }
+}
+
 /// Compute which local variables are live within the given function
 /// `mir`. The liveness mode `mode` determines what sorts of uses are
 /// considered to make a variable live (e.g., do drops count?).