Rollup merge of #110826 - cjgillot:place-mention-use, r=JakobDegen,lcnr
Make PlaceMention a non-mutating use. Fixes https://github.com/rust-lang/rust/issues/110781 r? `@JakobDegen` I don't agree with your statement in https://github.com/rust-lang/rust/issues/110781#issuecomment-1520841434. I suggest that we start fixing `PlaceContext` to be accurate enough for optimizations to use it. This structure is very convenient to use in visitors, and we perhaps have an opportunity to make it less of a footgun.
This commit is contained in:
commit
0ac8ebdf11
8 changed files with 49 additions and 10 deletions
|
@ -410,7 +410,7 @@ macro_rules! make_mir_visitor {
|
|||
StatementKind::PlaceMention(place) => {
|
||||
self.visit_place(
|
||||
place,
|
||||
PlaceContext::NonUse(NonUseContext::PlaceMention),
|
||||
PlaceContext::NonMutatingUse(NonMutatingUseContext::PlaceMention),
|
||||
location
|
||||
);
|
||||
}
|
||||
|
@ -1251,6 +1251,11 @@ pub enum NonMutatingUseContext {
|
|||
UniqueBorrow,
|
||||
/// AddressOf for *const pointer.
|
||||
AddressOf,
|
||||
/// PlaceMention statement.
|
||||
///
|
||||
/// This statement is executed as a check that the `Place` is live without reading from it,
|
||||
/// so it must be considered as a non-mutating use.
|
||||
PlaceMention,
|
||||
/// Used as base for another place, e.g., `x` in `x.y`. Will not mutate the place.
|
||||
/// For example, the projection `x.y` is not marked as a mutation in these cases:
|
||||
/// ```ignore (illustrative)
|
||||
|
@ -1301,8 +1306,6 @@ pub enum NonUseContext {
|
|||
AscribeUserTy,
|
||||
/// The data of a user variable, for debug info.
|
||||
VarDebugInfo,
|
||||
/// PlaceMention statement.
|
||||
PlaceMention,
|
||||
}
|
||||
|
||||
#[derive(Copy, Clone, Debug, PartialEq, Eq)]
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue