diff options
| author | dianqk <dianqk@dianqk.net> | 2025-08-06 20:41:30 +0800 |
|---|---|---|
| committer | dianqk <dianqk@dianqk.net> | 2025-08-06 20:41:39 +0800 |
| commit | d55cc9a9bd7ddb7f8757910a74e451fb812ace89 (patch) | |
| tree | 897332d4f8442aed65e92b797aca08abe3412599 | |
| parent | 7cd950546b4ce68843b4cbdb1ab3a43776202d3a (diff) | |
| download | rust-d55cc9a9bd7ddb7f8757910a74e451fb812ace89.tar.gz rust-d55cc9a9bd7ddb7f8757910a74e451fb812ace89.zip | |
mir: Do not modify NonUse in `super_projection_elem`
| -rw-r--r-- | compiler/rustc_middle/src/mir/visit.rs | 34 |
1 files changed, 20 insertions, 14 deletions
diff --git a/compiler/rustc_middle/src/mir/visit.rs b/compiler/rustc_middle/src/mir/visit.rs index 929ebe1aee1..42a68b29ec7 100644 --- a/compiler/rustc_middle/src/mir/visit.rs +++ b/compiler/rustc_middle/src/mir/visit.rs @@ -1205,18 +1205,19 @@ macro_rules! visit_place_fns { self.super_projection_elem(place_ref, elem, context, location); } - fn super_place(&mut self, place: &Place<'tcx>, context: PlaceContext, location: Location) { - let mut context = context; - - if !place.projection.is_empty() { - if context.is_use() { - // ^ Only change the context if it is a real use, not a "use" in debuginfo. - context = if context.is_mutating_use() { - PlaceContext::MutatingUse(MutatingUseContext::Projection) - } else { - PlaceContext::NonMutatingUse(NonMutatingUseContext::Projection) - }; - } + fn super_place( + &mut self, + place: &Place<'tcx>, + mut context: PlaceContext, + location: Location, + ) { + if !place.projection.is_empty() && context.is_use() { + // ^ Only change the context if it is a real use, not a "use" in debuginfo. + context = if context.is_mutating_use() { + PlaceContext::MutatingUse(MutatingUseContext::Projection) + } else { + PlaceContext::NonMutatingUse(NonMutatingUseContext::Projection) + }; } self.visit_local(place.local, context, location); @@ -1239,7 +1240,7 @@ macro_rules! visit_place_fns { &mut self, _place_ref: PlaceRef<'tcx>, elem: PlaceElem<'tcx>, - _context: PlaceContext, + context: PlaceContext, location: Location, ) { match elem { @@ -1252,7 +1253,12 @@ macro_rules! visit_place_fns { ProjectionElem::Index(local) => { self.visit_local( local, - PlaceContext::NonMutatingUse(NonMutatingUseContext::Copy), + if context.is_use() { + // ^ Only change the context if it is a real use, not a "use" in debuginfo. + PlaceContext::NonMutatingUse(NonMutatingUseContext::Copy) + } else { + context + }, location, ); } |
