diff options
| author | Santiago Pastorino <spastorino@gmail.com> | 2019-10-07 17:58:28 -0300 |
|---|---|---|
| committer | Santiago Pastorino <spastorino@gmail.com> | 2019-10-17 22:06:55 -0400 |
| commit | 591cc9aede4aec9b8816b8489eb98c2f2a3bfe90 (patch) | |
| tree | 0019ebc7cdae540a9e12884f872cc20e8659f02a | |
| parent | e069e9ccacbe92de1c893be5ad77fd5d6173f937 (diff) | |
| download | rust-591cc9aede4aec9b8816b8489eb98c2f2a3bfe90.tar.gz rust-591cc9aede4aec9b8816b8489eb98c2f2a3bfe90.zip | |
Prepare simplify MutVisitor to have projections interned
| -rw-r--r-- | src/librustc_mir/transform/simplify.rs | 20 |
1 files changed, 20 insertions, 0 deletions
diff --git a/src/librustc_mir/transform/simplify.rs b/src/librustc_mir/transform/simplify.rs index 9ffff9a92fa..57bc1c8fab9 100644 --- a/src/librustc_mir/transform/simplify.rs +++ b/src/librustc_mir/transform/simplify.rs @@ -366,7 +366,27 @@ impl<'tcx> MutVisitor<'tcx> for LocalUpdater { }); self.super_basic_block_data(block, data); } + fn visit_local(&mut self, l: &mut Local, _: PlaceContext, _: Location) { *l = self.map[*l].unwrap(); } + + fn visit_place( + &mut self, + place: &mut Place<'tcx>, + context: PlaceContext, + location: Location, + ) { + self.visit_place_base(&mut place.base, context, location); + + let new_projection: Vec<_> = place.projection.iter().map(|elem| + if let PlaceElem::Index(local) = elem { + PlaceElem::Index(self.map[*local].unwrap()) + } else { + elem.clone() + } + ).collect(); + + place.projection = new_projection.into_boxed_slice(); + } } |
