]> git.lizzy.rs Git - rust.git/commitdiff
Prepare simplify MutVisitor to have projections interned
authorSantiago Pastorino <spastorino@gmail.com>
Mon, 7 Oct 2019 20:58:28 +0000 (17:58 -0300)
committerSantiago Pastorino <spastorino@gmail.com>
Fri, 18 Oct 2019 02:06:55 +0000 (22:06 -0400)
src/librustc_mir/transform/simplify.rs

index 9ffff9a92fa53d041255af2ac45ce90c17f1af05..57bc1c8fab969a2988e435ae1612b76b8b8ed4de 100644 (file)
@@ -366,7 +366,27 @@ fn visit_basic_block_data(&mut self, block: BasicBlock, data: &mut BasicBlockDat
         });
         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();
+    }
 }