diff options
| author | Matthew Jasper <mjjasper1@gmail.com> | 2019-02-02 17:56:14 +0000 |
|---|---|---|
| committer | Matthew Jasper <mjjasper1@gmail.com> | 2019-02-21 19:03:34 +0000 |
| commit | 87ec3b24f62edc6324281a2b851a87cf1d94c0dc (patch) | |
| tree | 5b4d0d2ee70451949a4e332f6d13a23a922f69d8 | |
| parent | 2c840ae18dc53d55192269adee39d77a8652b2f7 (diff) | |
| download | rust-87ec3b24f62edc6324281a2b851a87cf1d94c0dc.tar.gz rust-87ec3b24f62edc6324281a2b851a87cf1d94c0dc.zip | |
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.
| -rw-r--r-- | src/librustc_mir/borrow_check/borrow_set.rs | 44 |
1 files changed, 16 insertions, 28 deletions
diff --git a/src/librustc_mir/borrow_check/borrow_set.rs b/src/librustc_mir/borrow_check/borrow_set.rs index 53e4ffc8bd6..2a3a616317c 100644 --- a/src/librustc_mir/borrow_check/borrow_set.rs +++ b/src/librustc_mir/borrow_check/borrow_set.rs @@ -3,9 +3,7 @@ use crate::borrow_check::nll::ToRegionVid; use crate::dataflow::indexes::BorrowIndex; use crate::dataflow::move_paths::MoveData; use rustc::mir::traversal; -use rustc::mir::visit::{ - PlaceContext, Visitor, NonUseContext, MutatingUseContext, NonMutatingUseContext -}; +use rustc::mir::visit::{PlaceContext, Visitor, NonUseContext, MutatingUseContext}; use rustc::mir::{self, Location, Mir, Local}; use rustc::ty::{RegionVid, TyCtxt}; use rustc::util::nodemap::{FxHashMap, FxHashSet}; @@ -257,31 +255,21 @@ impl<'a, 'gcx, 'tcx> Visitor<'tcx> for GatherBorrows<'a, 'gcx, 'tcx> { ); } - // Otherwise, this is the unique later use - // 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, - // we are 'transitioning' from `NotActivated` to `ActivatedAt`) and - // we've not found any other activations (checked above). - assert_eq!( - borrow_data.activation_location, - TwoPhaseActivation::NotActivated, - "never found an activation for this borrow!", - ); - - self.activation_map - .entry(location) - .or_default() - .push(borrow_index); - TwoPhaseActivation::ActivatedAt(location) - } - }; + // Otherwise, this is the unique later use that we expect. + // Double check: This borrow is indeed a two-phase borrow (that is, + // we are 'transitioning' from `NotActivated` to `ActivatedAt`) and + // we've not found any other activations (checked above). + assert_eq!( + borrow_data.activation_location, + TwoPhaseActivation::NotActivated, + "never found an activation for this borrow!", + ); + self.activation_map + .entry(location) + .or_default() + .push(borrow_index); + + borrow_data.activation_location = TwoPhaseActivation::ActivatedAt(location); } } |
