Skip to content

Commit ebd086b

Browse files
committed
move LivenessResults from nll into liveness analysis
1 parent 1c57468 commit ebd086b

File tree

2 files changed

+35
-23
lines changed

2 files changed

+35
-23
lines changed

src/librustc_mir/borrow_check/nll/mod.rs

Lines changed: 2 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@ use rustc::util::nodemap::FxHashMap;
1616
use std::collections::BTreeSet;
1717
use std::io;
1818
use transform::MirSource;
19-
use util::liveness::{self, LivenessMode, LivenessResult, LocalSet};
19+
use util::liveness::{LivenessResults, LocalSet};
2020
use borrow_check::FlowAtLocation;
2121
use dataflow::MaybeInitializedLvals;
2222
use dataflow::move_paths::MoveData;
@@ -86,23 +86,7 @@ pub(in borrow_check) fn compute_regions<'cx, 'gcx, 'tcx>(
8686
subtype_constraint_generation::generate(&mut regioncx, mir, constraint_sets);
8787

8888
// Compute what is live where.
89-
let liveness = &LivenessResults {
90-
regular: liveness::liveness_of_locals(
91-
&mir,
92-
LivenessMode {
93-
include_regular_use: true,
94-
include_drops: false,
95-
},
96-
),
97-
98-
drop: liveness::liveness_of_locals(
99-
&mir,
100-
LivenessMode {
101-
include_regular_use: false,
102-
include_drops: true,
103-
},
104-
),
105-
};
89+
let liveness = &LivenessResults::compute(mir);
10690

10791
// Generate non-subtyping constraints.
10892
constraint_generation::generate_constraints(
@@ -136,11 +120,6 @@ pub(in borrow_check) fn compute_regions<'cx, 'gcx, 'tcx>(
136120
(regioncx, closure_region_requirements)
137121
}
138122

139-
struct LivenessResults {
140-
regular: LivenessResult,
141-
drop: LivenessResult,
142-
}
143-
144123
fn dump_mir_results<'a, 'gcx, 'tcx>(
145124
infcx: &InferCtxt<'a, 'gcx, 'tcx>,
146125
liveness: &LivenessResults,

src/librustc_mir/util/liveness.rs

Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -80,6 +80,39 @@ pub struct LivenessMode {
8080
pub include_drops: bool,
8181
}
8282

83+
/// A combination of liveness results, used in NLL.
84+
pub struct LivenessResults {
85+
/// Liveness results where a regular use makes a variable X live,
86+
/// but not a drop.
87+
pub regular: LivenessResult,
88+
89+
/// Liveness results where a drop makes a variable X live,
90+
/// but not a regular use.
91+
pub drop: LivenessResult,
92+
}
93+
94+
impl LivenessResults {
95+
pub fn compute<'tcx>(mir: &Mir<'tcx>) -> LivenessResults {
96+
LivenessResults {
97+
regular: liveness_of_locals(
98+
&mir,
99+
LivenessMode {
100+
include_regular_use: true,
101+
include_drops: false,
102+
},
103+
),
104+
105+
drop: liveness_of_locals(
106+
&mir,
107+
LivenessMode {
108+
include_regular_use: false,
109+
include_drops: true,
110+
},
111+
),
112+
}
113+
}
114+
}
115+
83116
/// Compute which local variables are live within the given function
84117
/// `mir`. The liveness mode `mode` determines what sorts of uses are
85118
/// considered to make a variable live (e.g., do drops count?).

0 commit comments

Comments
 (0)