[−][src]Function rustc_mir::borrow_check::nll::type_check::liveness::trace::trace
pub(super) fn trace<'gcx, 'tcx>(
typeck: &mut TypeChecker<'_, 'gcx, 'tcx>,
mir: &Mir<'tcx>,
elements: &Rc<RegionValueElements>,
flow_inits: &mut FlowAtLocation<MaybeInitializedPlaces<'_, 'gcx, 'tcx>>,
move_data: &MoveData<'tcx>,
liveness_map: &NllLivenessMap
)
🔬 This is a nightly-only experimental API. (rustc_private
)
this crate is being loaded from the sysroot, an unstable location; did you mean to load this crate from crates.io via Cargo.toml
instead?
This is the heart of the liveness computation. For each variable X that requires a liveness computation, it walks over all the uses of X and does a reverse depth-first search ("trace") through the MIR. This search stops when we find a definition of that variable. The points visited in this search is the USE-LIVE set for the variable; of those points is added to all the regions that appear in the variable's type.
We then also walks through each drop of those variables and does
another search, stopping when we reach a use or definition. This
is the DROP-LIVE set of points. Each of the points in the
DROP-LIVE set are to the liveness sets for regions found in the
dropck_outlives
result of the variable's type (in particular,
this respects #[may_dangle]
annotations).