remove allow_two_phase_borrow
it's been simplified over the years, but now it's no longer useful. - document its replacement in `BorrowKind` - use that everywhere instead
This commit is contained in:
parent
ff1aaa52ff
commit
79d761d93c
5 changed files with 8 additions and 14 deletions
|
@ -11,7 +11,6 @@ use rustc_mir_dataflow::move_paths::MoveData;
|
||||||
use tracing::debug;
|
use tracing::debug;
|
||||||
|
|
||||||
use crate::BorrowIndex;
|
use crate::BorrowIndex;
|
||||||
use crate::path_utils::allow_two_phase_borrow;
|
|
||||||
use crate::place_ext::PlaceExt;
|
use crate::place_ext::PlaceExt;
|
||||||
|
|
||||||
pub struct BorrowSet<'tcx> {
|
pub struct BorrowSet<'tcx> {
|
||||||
|
@ -350,7 +349,7 @@ impl<'a, 'tcx> GatherBorrows<'a, 'tcx> {
|
||||||
start_location, assigned_place, borrow_index,
|
start_location, assigned_place, borrow_index,
|
||||||
);
|
);
|
||||||
|
|
||||||
if !allow_two_phase_borrow(kind) {
|
if !kind.allows_two_phase_borrow() {
|
||||||
debug!(" -> {:?}", start_location);
|
debug!(" -> {:?}", start_location);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
|
@ -1076,7 +1076,7 @@ impl<'a, 'tcx> MirBorrowckCtxt<'a, '_, 'tcx> {
|
||||||
(Read(kind), BorrowKind::Mut { .. }) => {
|
(Read(kind), BorrowKind::Mut { .. }) => {
|
||||||
// Reading from mere reservations of mutable-borrows is OK.
|
// Reading from mere reservations of mutable-borrows is OK.
|
||||||
if !is_active(this.dominators(), borrow, location) {
|
if !is_active(this.dominators(), borrow, location) {
|
||||||
assert!(allow_two_phase_borrow(borrow.kind));
|
assert!(borrow.kind.allows_two_phase_borrow());
|
||||||
return Control::Continue;
|
return Control::Continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1184,7 +1184,7 @@ impl<'a, 'tcx> MirBorrowckCtxt<'a, '_, 'tcx> {
|
||||||
}
|
}
|
||||||
BorrowKind::Mut { .. } => {
|
BorrowKind::Mut { .. } => {
|
||||||
let wk = WriteKind::MutableBorrow(bk);
|
let wk = WriteKind::MutableBorrow(bk);
|
||||||
if allow_two_phase_borrow(bk) {
|
if bk.allows_two_phase_borrow() {
|
||||||
(Deep, Reservation(wk))
|
(Deep, Reservation(wk))
|
||||||
} else {
|
} else {
|
||||||
(Deep, Write(wk))
|
(Deep, Write(wk))
|
||||||
|
|
|
@ -1,19 +1,12 @@
|
||||||
use rustc_abi::FieldIdx;
|
use rustc_abi::FieldIdx;
|
||||||
use rustc_data_structures::graph::dominators::Dominators;
|
use rustc_data_structures::graph::dominators::Dominators;
|
||||||
use rustc_middle::mir::{BasicBlock, Body, BorrowKind, Location, Place, PlaceRef, ProjectionElem};
|
use rustc_middle::mir::{BasicBlock, Body, Location, Place, PlaceRef, ProjectionElem};
|
||||||
use rustc_middle::ty::TyCtxt;
|
use rustc_middle::ty::TyCtxt;
|
||||||
use tracing::debug;
|
use tracing::debug;
|
||||||
|
|
||||||
use crate::borrow_set::{BorrowData, BorrowSet, TwoPhaseActivation};
|
use crate::borrow_set::{BorrowData, BorrowSet, TwoPhaseActivation};
|
||||||
use crate::{AccessDepth, BorrowIndex, places_conflict};
|
use crate::{AccessDepth, BorrowIndex, places_conflict};
|
||||||
|
|
||||||
/// Returns `true` if the borrow represented by `kind` is
|
|
||||||
/// allowed to be split into separate Reservation and
|
|
||||||
/// Activation phases.
|
|
||||||
pub(super) fn allow_two_phase_borrow(kind: BorrowKind) -> bool {
|
|
||||||
kind.allows_two_phase_borrow()
|
|
||||||
}
|
|
||||||
|
|
||||||
/// Control for the path borrow checking code
|
/// Control for the path borrow checking code
|
||||||
#[derive(Copy, Clone, PartialEq, Eq, Debug)]
|
#[derive(Copy, Clone, PartialEq, Eq, Debug)]
|
||||||
pub(super) enum Control {
|
pub(super) enum Control {
|
||||||
|
|
|
@ -260,7 +260,7 @@ impl<'a, 'tcx> LoanInvalidationsGenerator<'a, 'tcx> {
|
||||||
}
|
}
|
||||||
BorrowKind::Mut { .. } => {
|
BorrowKind::Mut { .. } => {
|
||||||
let wk = WriteKind::MutableBorrow(bk);
|
let wk = WriteKind::MutableBorrow(bk);
|
||||||
if allow_two_phase_borrow(bk) {
|
if bk.allows_two_phase_borrow() {
|
||||||
(Deep, Reservation(wk))
|
(Deep, Reservation(wk))
|
||||||
} else {
|
} else {
|
||||||
(Deep, Write(wk))
|
(Deep, Write(wk))
|
||||||
|
@ -378,7 +378,7 @@ impl<'a, 'tcx> LoanInvalidationsGenerator<'a, 'tcx> {
|
||||||
// Reading from mere reservations of mutable-borrows is OK.
|
// Reading from mere reservations of mutable-borrows is OK.
|
||||||
if !is_active(this.dominators, borrow, location) {
|
if !is_active(this.dominators, borrow, location) {
|
||||||
// If the borrow isn't active yet, reads don't invalidate it
|
// If the borrow isn't active yet, reads don't invalidate it
|
||||||
assert!(allow_two_phase_borrow(borrow.kind));
|
assert!(borrow.kind.allows_two_phase_borrow());
|
||||||
return Control::Continue;
|
return Control::Continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -455,6 +455,8 @@ impl BorrowKind {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// Returns whether borrows represented by this kind are allowed to be split into separate
|
||||||
|
/// Reservation and Activation phases.
|
||||||
pub fn allows_two_phase_borrow(&self) -> bool {
|
pub fn allows_two_phase_borrow(&self) -> bool {
|
||||||
match *self {
|
match *self {
|
||||||
BorrowKind::Shared
|
BorrowKind::Shared
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue