]> git.lizzy.rs Git - rust.git/commitdiff
comment what `trace` does
authorNiko Matsakis <niko@alum.mit.edu>
Sun, 19 Aug 2018 14:45:59 +0000 (07:45 -0700)
committerNiko Matsakis <niko@alum.mit.edu>
Mon, 27 Aug 2018 17:57:55 +0000 (13:57 -0400)
src/librustc_mir/borrow_check/nll/type_check/liveness/trace.rs

index e8d22827117d1edb58cd488dc3fd96e3a065187e..5d0c8646f7036a205153fbb7414865a0e9d88597 100644 (file)
 use std::rc::Rc;
 use util::liveness::LiveVariableMap;
 
+/// 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).
 pub(super) fn trace(
     typeck: &mut TypeChecker<'_, 'gcx, 'tcx>,
     mir: &Mir<'tcx>,