diff options
| author | Niko Matsakis <niko@alum.mit.edu> | 2017-12-03 12:17:20 -0500 |
|---|---|---|
| committer | Niko Matsakis <niko@alum.mit.edu> | 2017-12-15 10:10:57 -0500 |
| commit | ebd086b67fe19d9fd861ec26eddf3eee2f734378 (patch) | |
| tree | 4687026a595c782ff64a31162b1e6a1df26446ed /src | |
| parent | 1c57468840f708e52db9b1e59b536c4f4783e823 (diff) | |
| download | rust-ebd086b67fe19d9fd861ec26eddf3eee2f734378.tar.gz rust-ebd086b67fe19d9fd861ec26eddf3eee2f734378.zip | |
move `LivenessResults` from `nll` into `liveness` analysis
Diffstat (limited to 'src')
| -rw-r--r-- | src/librustc_mir/borrow_check/nll/mod.rs | 25 | ||||
| -rw-r--r-- | src/librustc_mir/util/liveness.rs | 33 |
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?). |
