1
Fork 0

Activate two phase borrows on all uses

Two phase borrows are only used for adjustments now, so there's no need
to not activate them for shared borrows.
This commit is contained in:
Matthew Jasper 2019-02-02 17:56:14 +00:00
parent 2c840ae18d
commit 87ec3b24f6

View file

@ -3,9 +3,7 @@ use crate::borrow_check::nll::ToRegionVid;
use crate::dataflow::indexes::BorrowIndex; use crate::dataflow::indexes::BorrowIndex;
use crate::dataflow::move_paths::MoveData; use crate::dataflow::move_paths::MoveData;
use rustc::mir::traversal; use rustc::mir::traversal;
use rustc::mir::visit::{ use rustc::mir::visit::{PlaceContext, Visitor, NonUseContext, MutatingUseContext};
PlaceContext, Visitor, NonUseContext, MutatingUseContext, NonMutatingUseContext
};
use rustc::mir::{self, Location, Mir, Local}; use rustc::mir::{self, Location, Mir, Local};
use rustc::ty::{RegionVid, TyCtxt}; use rustc::ty::{RegionVid, TyCtxt};
use rustc::util::nodemap::{FxHashMap, FxHashSet}; use rustc::util::nodemap::{FxHashMap, FxHashSet};
@ -257,15 +255,7 @@ impl<'a, 'gcx, 'tcx> Visitor<'tcx> for GatherBorrows<'a, 'gcx, 'tcx> {
); );
} }
// Otherwise, this is the unique later use // Otherwise, this is the unique later use that we expect.
// that we expect.
borrow_data.activation_location = match context {
// The use of TMP in a shared borrow does not
// count as an actual activation.
PlaceContext::NonMutatingUse(NonMutatingUseContext::SharedBorrow(..)) |
PlaceContext::NonMutatingUse(NonMutatingUseContext::ShallowBorrow(..)) =>
TwoPhaseActivation::NotActivated,
_ => {
// Double check: This borrow is indeed a two-phase borrow (that is, // Double check: This borrow is indeed a two-phase borrow (that is,
// we are 'transitioning' from `NotActivated` to `ActivatedAt`) and // we are 'transitioning' from `NotActivated` to `ActivatedAt`) and
// we've not found any other activations (checked above). // we've not found any other activations (checked above).
@ -274,14 +264,12 @@ impl<'a, 'gcx, 'tcx> Visitor<'tcx> for GatherBorrows<'a, 'gcx, 'tcx> {
TwoPhaseActivation::NotActivated, TwoPhaseActivation::NotActivated,
"never found an activation for this borrow!", "never found an activation for this borrow!",
); );
self.activation_map self.activation_map
.entry(location) .entry(location)
.or_default() .or_default()
.push(borrow_index); .push(borrow_index);
TwoPhaseActivation::ActivatedAt(location)
} borrow_data.activation_location = TwoPhaseActivation::ActivatedAt(location);
};
} }
} }