1
Fork 0

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:
Rémy Rakic 2024-12-30 11:12:53 +00:00
parent ff1aaa52ff
commit 79d761d93c
5 changed files with 8 additions and 14 deletions

View file

@ -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;
} }

View file

@ -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))

View file

@ -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 {

View file

@ -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;
} }

View file

@ -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