From 5f7b74f832b33280e685dd8b89ef218c27c746e3 Mon Sep 17 00:00:00 2001 From: Niko Matsakis Date: Fri, 6 Apr 2018 15:57:21 -0400 Subject: [PATCH] construct the `BorrowSet` outside of `borrows` --- src/librustc_mir/borrow_check/mod.rs | 6 ++++-- src/librustc_mir/dataflow/impls/borrows.rs | 15 ++++++++------- src/librustc_mir/dataflow/impls/mod.rs | 1 - 3 files changed, 12 insertions(+), 10 deletions(-) diff --git a/src/librustc_mir/borrow_check/mod.rs b/src/librustc_mir/borrow_check/mod.rs index 6efe0c39d07b..3cc79d947d6b 100644 --- a/src/librustc_mir/borrow_check/mod.rs +++ b/src/librustc_mir/borrow_check/mod.rs @@ -46,7 +46,7 @@ use util::collect_writes::FindAssignments; use std::iter; -use self::borrow_set::BorrowData; +use self::borrow_set::{BorrowSet, BorrowData}; use self::flows::Flows; use self::prefixes::PrefixSet; use self::MutateMode::{JustWrite, WriteAndRead}; @@ -192,6 +192,8 @@ fn do_mir_borrowck<'a, 'gcx, 'tcx>( |bd, i| DebugFormatted::new(&bd.move_data().inits[i]), )); + let borrow_set = BorrowSet::build(tcx, mir); + // If we are in non-lexical mode, compute the non-lexical lifetimes. let (opt_regioncx, opt_closure_req) = if let Some(free_regions) = free_regions { let (regioncx, opt_closure_req) = nll::compute_regions( @@ -216,7 +218,7 @@ fn do_mir_borrowck<'a, 'gcx, 'tcx>( id, &attributes, &dead_unwinds, - Borrows::new(tcx, mir, opt_regioncx.clone(), def_id, body_id), + Borrows::new(tcx, mir, opt_regioncx.clone(), def_id, body_id, borrow_set), |rs, i| { DebugFormatted::new(&(i.kind(), rs.location(i.borrow_index()))) } diff --git a/src/librustc_mir/dataflow/impls/borrows.rs b/src/librustc_mir/dataflow/impls/borrows.rs index 79f2915e12c0..25f1278d7fa6 100644 --- a/src/librustc_mir/dataflow/impls/borrows.rs +++ b/src/librustc_mir/dataflow/impls/borrows.rs @@ -69,17 +69,18 @@ impl ReserveOrActivateIndex { } impl<'a, 'gcx, 'tcx> Borrows<'a, 'gcx, 'tcx> { - pub fn new(tcx: TyCtxt<'a, 'gcx, 'tcx>, - mir: &'a Mir<'tcx>, - nonlexical_regioncx: Option>>, - def_id: DefId, - body_id: Option) - -> Self { + crate fn new( + tcx: TyCtxt<'a, 'gcx, 'tcx>, + mir: &'a Mir<'tcx>, + nonlexical_regioncx: Option>>, + def_id: DefId, + body_id: Option, + borrow_set: BorrowSet<'tcx> + ) -> Self { let scope_tree = tcx.region_scope_tree(def_id); let root_scope = body_id.map(|body_id| { region::Scope::CallSite(tcx.hir.body(body_id).value.hir_id.local_id) }); - let borrow_set = BorrowSet::build(tcx, mir); Borrows { tcx: tcx, diff --git a/src/librustc_mir/dataflow/impls/mod.rs b/src/librustc_mir/dataflow/impls/mod.rs index 72b6f9d54fd6..f64fd64b283e 100644 --- a/src/librustc_mir/dataflow/impls/mod.rs +++ b/src/librustc_mir/dataflow/impls/mod.rs @@ -38,7 +38,6 @@ mod borrowed_locals; pub use self::borrowed_locals::*; -#[allow(dead_code)] pub(super) mod borrows; /// `MaybeInitializedPlaces` tracks all places that might be