1
Fork 0

unique borrows are mutating uses

This commit is contained in:
lcnr 2023-05-29 17:15:48 +02:00
parent 99ff5afeb8
commit cfd0623411
9 changed files with 7 additions and 19 deletions

View file

@ -50,7 +50,6 @@ pub fn categorize(context: PlaceContext) -> Option<DefUse> {
PlaceContext::MutatingUse(MutatingUseContext::Borrow) | PlaceContext::MutatingUse(MutatingUseContext::Borrow) |
PlaceContext::NonMutatingUse(NonMutatingUseContext::SharedBorrow) | PlaceContext::NonMutatingUse(NonMutatingUseContext::SharedBorrow) |
PlaceContext::NonMutatingUse(NonMutatingUseContext::ShallowBorrow) | PlaceContext::NonMutatingUse(NonMutatingUseContext::ShallowBorrow) |
PlaceContext::NonMutatingUse(NonMutatingUseContext::UniqueBorrow) |
// `PlaceMention` and `AscribeUserType` both evaluate the place, which must not // `PlaceMention` and `AscribeUserType` both evaluate the place, which must not
// contain dangling references. // contain dangling references.

View file

@ -766,8 +766,8 @@ impl<'a, 'b, 'tcx> TypeVerifier<'a, 'b, 'tcx> {
PlaceContext::MutatingUse(_) => ty::Invariant, PlaceContext::MutatingUse(_) => ty::Invariant,
PlaceContext::NonUse(StorageDead | StorageLive | VarDebugInfo) => ty::Invariant, PlaceContext::NonUse(StorageDead | StorageLive | VarDebugInfo) => ty::Invariant,
PlaceContext::NonMutatingUse( PlaceContext::NonMutatingUse(
Inspect | Copy | Move | PlaceMention | SharedBorrow | ShallowBorrow | UniqueBorrow Inspect | Copy | Move | PlaceMention | SharedBorrow | ShallowBorrow | AddressOf
| AddressOf | Projection, | Projection,
) => ty::Covariant, ) => ty::Covariant,
PlaceContext::NonUse(AscribeUserTy(variance)) => variance, PlaceContext::NonUse(AscribeUserTy(variance)) => variance,
} }

View file

@ -234,7 +234,6 @@ impl<'mir, 'a, 'tcx, Bx: BuilderMethods<'a, 'tcx>> Visitor<'tcx>
| PlaceContext::NonMutatingUse( | PlaceContext::NonMutatingUse(
NonMutatingUseContext::Inspect NonMutatingUseContext::Inspect
| NonMutatingUseContext::SharedBorrow | NonMutatingUseContext::SharedBorrow
| NonMutatingUseContext::UniqueBorrow
| NonMutatingUseContext::ShallowBorrow | NonMutatingUseContext::ShallowBorrow
| NonMutatingUseContext::AddressOf | NonMutatingUseContext::AddressOf
| NonMutatingUseContext::Projection, | NonMutatingUseContext::Projection,

View file

@ -412,9 +412,7 @@ impl<'tcx> Visitor<'tcx> for Checker<'_, 'tcx> {
BorrowKind::Shallow => { BorrowKind::Shallow => {
PlaceContext::NonMutatingUse(NonMutatingUseContext::ShallowBorrow) PlaceContext::NonMutatingUse(NonMutatingUseContext::ShallowBorrow)
} }
BorrowKind::Unique => { BorrowKind::Unique => PlaceContext::MutatingUse(MutatingUseContext::Borrow),
PlaceContext::NonMutatingUse(NonMutatingUseContext::UniqueBorrow)
}
BorrowKind::Mut { .. } => { BorrowKind::Mut { .. } => {
PlaceContext::MutatingUse(MutatingUseContext::Borrow) PlaceContext::MutatingUse(MutatingUseContext::Borrow)
} }

View file

@ -650,8 +650,8 @@ macro_rules! make_mir_visitor {
BorrowKind::Shallow => PlaceContext::NonMutatingUse( BorrowKind::Shallow => PlaceContext::NonMutatingUse(
NonMutatingUseContext::ShallowBorrow NonMutatingUseContext::ShallowBorrow
), ),
BorrowKind::Unique => PlaceContext::NonMutatingUse( BorrowKind::Unique => PlaceContext::MutatingUse(
NonMutatingUseContext::UniqueBorrow MutatingUseContext::Borrow
), ),
BorrowKind::Mut { .. } => BorrowKind::Mut { .. } =>
PlaceContext::MutatingUse(MutatingUseContext::Borrow), PlaceContext::MutatingUse(MutatingUseContext::Borrow),
@ -1265,8 +1265,6 @@ pub enum NonMutatingUseContext {
SharedBorrow, SharedBorrow,
/// Shallow borrow. /// Shallow borrow.
ShallowBorrow, ShallowBorrow,
/// Unique borrow.
UniqueBorrow,
/// AddressOf for *const pointer. /// AddressOf for *const pointer.
AddressOf, AddressOf,
/// PlaceMention statement. /// PlaceMention statement.
@ -1345,9 +1343,7 @@ impl PlaceContext {
matches!( matches!(
self, self,
PlaceContext::NonMutatingUse( PlaceContext::NonMutatingUse(
NonMutatingUseContext::SharedBorrow NonMutatingUseContext::SharedBorrow | NonMutatingUseContext::ShallowBorrow
| NonMutatingUseContext::ShallowBorrow
| NonMutatingUseContext::UniqueBorrow
) | PlaceContext::MutatingUse(MutatingUseContext::Borrow) ) | PlaceContext::MutatingUse(MutatingUseContext::Borrow)
) )
} }

View file

@ -199,8 +199,7 @@ impl DefUse {
| NonMutatingUseContext::Move | NonMutatingUseContext::Move
| NonMutatingUseContext::PlaceMention | NonMutatingUseContext::PlaceMention
| NonMutatingUseContext::ShallowBorrow | NonMutatingUseContext::ShallowBorrow
| NonMutatingUseContext::SharedBorrow | NonMutatingUseContext::SharedBorrow,
| NonMutatingUseContext::UniqueBorrow,
) => Some(DefUse::Use), ) => Some(DefUse::Use),
PlaceContext::MutatingUse(MutatingUseContext::Projection) PlaceContext::MutatingUse(MutatingUseContext::Projection)

View file

@ -772,7 +772,6 @@ impl<'tcx> Visitor<'tcx> for CanConstProp {
// mutation. // mutation.
| NonMutatingUse(NonMutatingUseContext::SharedBorrow) | NonMutatingUse(NonMutatingUseContext::SharedBorrow)
| NonMutatingUse(NonMutatingUseContext::ShallowBorrow) | NonMutatingUse(NonMutatingUseContext::ShallowBorrow)
| NonMutatingUse(NonMutatingUseContext::UniqueBorrow)
| NonMutatingUse(NonMutatingUseContext::AddressOf) | NonMutatingUse(NonMutatingUseContext::AddressOf)
| MutatingUse(MutatingUseContext::Borrow) | MutatingUse(MutatingUseContext::Borrow)
| MutatingUse(MutatingUseContext::AddressOf) => { | MutatingUse(MutatingUseContext::AddressOf) => {

View file

@ -130,7 +130,6 @@ impl<'tcx> MutVisitor<'tcx> for Replacer<'_, 'tcx> {
PlaceContext::NonMutatingUse( PlaceContext::NonMutatingUse(
NonMutatingUseContext::SharedBorrow NonMutatingUseContext::SharedBorrow
| NonMutatingUseContext::ShallowBorrow | NonMutatingUseContext::ShallowBorrow
| NonMutatingUseContext::UniqueBorrow
| NonMutatingUseContext::AddressOf, | NonMutatingUseContext::AddressOf,
) => true, ) => true,
// For debuginfo, merging locals is ok. // For debuginfo, merging locals is ok.

View file

@ -216,7 +216,6 @@ impl<'tcx> Visitor<'tcx> for SsaVisitor<'_> {
PlaceContext::NonMutatingUse( PlaceContext::NonMutatingUse(
NonMutatingUseContext::SharedBorrow NonMutatingUseContext::SharedBorrow
| NonMutatingUseContext::ShallowBorrow | NonMutatingUseContext::ShallowBorrow
| NonMutatingUseContext::UniqueBorrow
| NonMutatingUseContext::AddressOf, | NonMutatingUseContext::AddressOf,
) )
| PlaceContext::MutatingUse(_) => { | PlaceContext::MutatingUse(_) => {