about summary refs log tree commit diff
diff options
context:
space:
mode:
authorSantiago Pastorino <spastorino@gmail.com>2019-10-07 17:58:28 -0300
committerSantiago Pastorino <spastorino@gmail.com>2019-10-17 22:06:55 -0400
commit591cc9aede4aec9b8816b8489eb98c2f2a3bfe90 (patch)
tree0019ebc7cdae540a9e12884f872cc20e8659f02a
parente069e9ccacbe92de1c893be5ad77fd5d6173f937 (diff)
downloadrust-591cc9aede4aec9b8816b8489eb98c2f2a3bfe90.tar.gz
rust-591cc9aede4aec9b8816b8489eb98c2f2a3bfe90.zip
Prepare simplify MutVisitor to have projections interned
-rw-r--r--src/librustc_mir/transform/simplify.rs20
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();
+    }
 }