unique borrows are mutating uses
This commit is contained in:
parent
99ff5afeb8
commit
cfd0623411
9 changed files with 7 additions and 19 deletions
|
@ -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.
|
||||||
|
|
|
@ -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,
|
||||||
}
|
}
|
||||||
|
|
|
@ -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,
|
||||||
|
|
|
@ -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)
|
||||||
}
|
}
|
||||||
|
|
|
@ -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)
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
|
@ -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)
|
||||||
|
|
|
@ -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) => {
|
||||||
|
|
|
@ -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.
|
||||||
|
|
|
@ -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(_) => {
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue