]> git.lizzy.rs Git - rust.git/blobdiff - compiler/rustc_mir/src/dataflow/move_paths/builder.rs
Use PlaceRef more consistently in rustc_mir
[rust.git] / compiler / rustc_mir / src / dataflow / move_paths / builder.rs
index 3e45061a9cd6bf8fd9f0eae7b89c13a935a80711..ee78ff00c9b2baa022045ee9a5db2483bbe7fac9 100644 (file)
@@ -362,7 +362,7 @@ fn gather_rvalue(&mut self, rvalue: &Rvalue<'tcx>) {
     fn gather_terminator(&mut self, term: &Terminator<'tcx>) {
         match term.kind {
             TerminatorKind::Goto { target: _ }
-            | TerminatorKind::FalseEdges { .. }
+            | TerminatorKind::FalseEdge { .. }
             | TerminatorKind::FalseUnwind { .. }
             // In some sense returning moves the return place into the current
             // call's destination, however, since there are no statements after
@@ -518,14 +518,10 @@ fn gather_init(&mut self, place: PlaceRef<'tcx>, kind: InitKind) {
 
         // Check if we are assigning into a field of a union, if so, lookup the place
         // of the union so it is marked as initialized again.
-        if let [proj_base @ .., ProjectionElem::Field(_, _)] = place.projection {
-            if let ty::Adt(def, _) =
-                Place::ty_from(place.local, proj_base, self.builder.body, self.builder.tcx)
-                    .ty
-                    .kind()
-            {
+        if let Some((place_base, ProjectionElem::Field(_, _))) = place.last_projection() {
+            if let ty::Adt(def, _) = place_base.ty(self.builder.body, self.builder.tcx).ty.kind() {
                 if def.is_union() {
-                    place = PlaceRef { local: place.local, projection: proj_base }
+                    place = place_base;
                 }
             }
         }