]> git.lizzy.rs Git - rust.git/commitdiff
take mir::PlaceElem by value
authorBastian Kauschke <bastian_kauschke@hotmail.de>
Sat, 23 May 2020 10:02:54 +0000 (12:02 +0200)
committerBastian Kauschke <bastian_kauschke@hotmail.de>
Sat, 23 May 2020 10:24:19 +0000 (12:24 +0200)
15 files changed:
src/librustc_codegen_ssa/mir/analyze.rs
src/librustc_codegen_ssa/mir/place.rs
src/librustc_middle/mir/tcx.rs
src/librustc_middle/mir/visit.rs
src/librustc_mir/borrow_check/places_conflict.rs
src/librustc_mir/borrow_check/renumber.rs
src/librustc_mir/borrow_check/type_check/mod.rs
src/librustc_mir/dataflow/drop_flag_effects.rs
src/librustc_mir/dataflow/move_paths/builder.rs
src/librustc_mir/interpret/operand.rs
src/librustc_mir/interpret/place.rs
src/librustc_mir/transform/check_consts/qualifs.rs
src/librustc_mir/transform/check_consts/validation.rs
src/librustc_mir/transform/elaborate_drops.rs
src/librustc_mir/transform/promote_consts.rs

index 5e3a37e20bd4f1beb6f0d7513ffcebf39caea1ce..fa0f29acc74334c0ddc7097349ffc556f6657f58 100644 (file)
@@ -104,7 +104,7 @@ fn process_place(
     ) {
         let cx = self.fx.cx;
 
-        if let [proj_base @ .., elem] = place_ref.projection {
+        if let &[ref proj_base @ .., elem] = place_ref.projection {
             let mut base_context = if context.is_mutating_use() {
                 PlaceContext::MutatingUse(MutatingUseContext::Projection)
             } else {
@@ -186,7 +186,7 @@ fn process_place(
             // now that we have moved to the "slice of projections" representation.
             if let mir::ProjectionElem::Index(local) = elem {
                 self.visit_local(
-                    local,
+                    &local,
                     PlaceContext::NonMutatingUse(NonMutatingUseContext::Copy),
                     location,
                 );
index aaba2ec1362ac77e25b1b4b5331c59983a7d8fad..2be0679382900650e9494f3f5e71a77eeacb9f4a 100644 (file)
@@ -429,7 +429,7 @@ pub fn codegen_place(
                 self.codegen_consume(bx, mir::PlaceRef { local, projection: proj_base })
                     .deref(bx.cx())
             }
-            mir::PlaceRef { local, projection: [proj_base @ .., elem] } => {
+            mir::PlaceRef { local, projection: &[ref proj_base @ .., elem] } => {
                 // FIXME turn this recursion into iteration
                 let cg_base =
                     self.codegen_place(bx, mir::PlaceRef { local, projection: proj_base });
@@ -440,7 +440,7 @@ pub fn codegen_place(
                         cg_base.project_field(bx, field.index())
                     }
                     mir::ProjectionElem::Index(index) => {
-                        let index = &mir::Operand::Copy(mir::Place::from(*index));
+                        let index = &mir::Operand::Copy(mir::Place::from(index));
                         let index = self.codegen_operand(bx, index);
                         let llindex = index.immediate();
                         cg_base.project_index(bx, llindex)
@@ -450,7 +450,7 @@ pub fn codegen_place(
                         from_end: false,
                         min_length: _,
                     } => {
-                        let lloffset = bx.cx().const_usize(*offset as u64);
+                        let lloffset = bx.cx().const_usize(offset as u64);
                         cg_base.project_index(bx, lloffset)
                     }
                     mir::ProjectionElem::ConstantIndex {
@@ -458,14 +458,14 @@ pub fn codegen_place(
                         from_end: true,
                         min_length: _,
                     } => {
-                        let lloffset = bx.cx().const_usize(*offset as u64);
+                        let lloffset = bx.cx().const_usize(offset as u64);
                         let lllen = cg_base.len(bx.cx());
                         let llindex = bx.sub(lllen, lloffset);
                         cg_base.project_index(bx, llindex)
                     }
                     mir::ProjectionElem::Subslice { from, to, from_end } => {
                         let mut subslice =
-                            cg_base.project_index(bx, bx.cx().const_usize(*from as u64));
+                            cg_base.project_index(bx, bx.cx().const_usize(from as u64));
                         let projected_ty =
                             PlaceTy::from_ty(cg_base.layout.ty).projection_ty(tcx, elem).ty;
                         subslice.layout = bx.cx().layout_of(self.monomorphize(&projected_ty));
@@ -474,7 +474,7 @@ pub fn codegen_place(
                             assert!(from_end, "slice subslices should be `from_end`");
                             subslice.llextra = Some(bx.sub(
                                 cg_base.llextra.unwrap(),
-                                bx.cx().const_usize((*from as u64) + (*to as u64)),
+                                bx.cx().const_usize((from as u64) + (to as u64)),
                             ));
                         }
 
@@ -487,7 +487,7 @@ pub fn codegen_place(
 
                         subslice
                     }
-                    mir::ProjectionElem::Downcast(_, v) => cg_base.project_downcast(bx, *v),
+                    mir::ProjectionElem::Downcast(_, v) => cg_base.project_downcast(bx, v),
                 }
             }
         };
index 17edd9f4cb643d5f83d100173792563700cc1d5e..4747aec2d5c24217a2625e7ea6df5d3e9fd109a2 100644 (file)
@@ -56,8 +56,8 @@ pub fn field_ty(self, tcx: TyCtxt<'tcx>, f: &Field) -> Ty<'tcx> {
     /// Convenience wrapper around `projection_ty_core` for
     /// `PlaceElem`, where we can just use the `Ty` that is already
     /// stored inline on field projection elems.
-    pub fn projection_ty(self, tcx: TyCtxt<'tcx>, elem: &PlaceElem<'tcx>) -> PlaceTy<'tcx> {
-        self.projection_ty_core(tcx, ty::ParamEnv::empty(), elem, |_, _, ty| ty)
+    pub fn projection_ty(self, tcx: TyCtxt<'tcx>, elem: PlaceElem<'tcx>) -> PlaceTy<'tcx> {
+        self.projection_ty_core(tcx, ty::ParamEnv::empty(), &elem, |_, _, ty| ty)
     }
 
     /// `place_ty.projection_ty_core(tcx, elem, |...| { ... })`
@@ -124,7 +124,7 @@ pub fn ty_from<D>(
     {
         projection
             .iter()
-            .fold(PlaceTy::from_ty(local_decls.local_decls()[local].ty), |place_ty, elem| {
+            .fold(PlaceTy::from_ty(local_decls.local_decls()[local].ty), |place_ty, &elem| {
                 place_ty.projection_ty(tcx, elem)
             })
     }
index 02164244771c9ad92ddef6662d23f0d344d53596..a29b7b75294b7d026b3d2339069211ae5e49986b 100644 (file)
@@ -903,7 +903,7 @@ fn process_projection(
             let mut projection = Cow::Borrowed(projection);
 
             for i in 0..projection.len() {
-                if let Some(elem) = projection.get(i) {
+                if let Some(&elem) = projection.get(i) {
                     if let Some(elem) = self.process_projection_elem(elem, location) {
                         // This converts the borrowed projection into `Cow::Owned(_)` and returns a
                         // clone of the projection so we can mutate and reintern later.
@@ -921,19 +921,19 @@ fn process_projection(
 
         fn process_projection_elem(
             &mut self,
-            elem: &PlaceElem<'tcx>,
+            elem: PlaceElem<'tcx>,
             location: Location,
         ) -> Option<PlaceElem<'tcx>> {
             match elem {
                 PlaceElem::Index(local) => {
-                    let mut new_local = *local;
+                    let mut new_local = local;
                     self.visit_local(
                         &mut new_local,
                         PlaceContext::NonMutatingUse(NonMutatingUseContext::Copy),
                         location,
                     );
 
-                    if new_local == *local { None } else { Some(PlaceElem::Index(new_local)) }
+                    if new_local == local { None } else { Some(PlaceElem::Index(new_local)) }
                 }
                 PlaceElem::Deref
                 | PlaceElem::Field(..)
@@ -959,7 +959,7 @@ fn visit_projection_elem(
             &mut self,
             local: Local,
             proj_base: &[PlaceElem<'tcx>],
-            elem: &PlaceElem<'tcx>,
+            elem: PlaceElem<'tcx>,
             context: PlaceContext,
             location: Location,
         ) {
@@ -990,7 +990,7 @@ fn super_projection(
             location: Location,
         ) {
             let mut cursor = projection;
-            while let [proj_base @ .., elem] = cursor {
+            while let &[ref proj_base @ .., elem] = cursor {
                 cursor = proj_base;
                 self.visit_projection_elem(local, cursor, elem, context, location);
             }
@@ -1000,7 +1000,7 @@ fn super_projection_elem(
             &mut self,
             _local: Local,
             _proj_base: &[PlaceElem<'tcx>],
-            elem: &PlaceElem<'tcx>,
+            elem: PlaceElem<'tcx>,
             _context: PlaceContext,
             location: Location,
         ) {
@@ -1010,7 +1010,7 @@ fn super_projection_elem(
                 }
                 ProjectionElem::Index(local) => {
                     self.visit_local(
-                        local,
+                        &local,
                         PlaceContext::NonMutatingUse(NonMutatingUseContext::Copy),
                         location,
                     );
index 809b749f1e71f253669481f49fe8c5dd8b2d696f..246e4826e0e767676d15355662894392fbe639c6 100644 (file)
@@ -138,7 +138,7 @@ fn place_components_conflict<'tcx>(
     }
 
     // loop invariant: borrow_c is always either equal to access_c or disjoint from it.
-    for (i, (borrow_c, access_c)) in
+    for (i, (borrow_c, &access_c)) in
         borrow_place.projection.iter().zip(access_place.projection.iter()).enumerate()
     {
         debug!("borrow_conflicts_with_place: borrow_c = {:?}", borrow_c);
@@ -163,8 +163,8 @@ fn place_components_conflict<'tcx>(
             body,
             borrow_local,
             borrow_proj_base,
-            &borrow_c,
-            &access_c,
+            borrow_c,
+            access_c,
             bias,
         ) {
             Overlap::Arbitrary => {
@@ -313,8 +313,8 @@ fn place_projection_conflict<'tcx>(
     body: &Body<'tcx>,
     pi1_local: Local,
     pi1_proj_base: &[PlaceElem<'tcx>],
-    pi1_elem: &PlaceElem<'tcx>,
-    pi2_elem: &PlaceElem<'tcx>,
+    pi1_elem: PlaceElem<'tcx>,
+    pi2_elem: PlaceElem<'tcx>,
     bias: PlaceConflictBias,
 ) -> Overlap {
     match (pi1_elem, pi2_elem) {
@@ -420,24 +420,24 @@ fn place_projection_conflict<'tcx>(
             }
         }
         (
-            &ProjectionElem::ConstantIndex {
+            ProjectionElem::ConstantIndex {
                 offset: offset_from_begin,
                 min_length: min_length1,
                 from_end: false,
             },
-            &ProjectionElem::ConstantIndex {
+            ProjectionElem::ConstantIndex {
                 offset: offset_from_end,
                 min_length: min_length2,
                 from_end: true,
             },
         )
         | (
-            &ProjectionElem::ConstantIndex {
+            ProjectionElem::ConstantIndex {
                 offset: offset_from_end,
                 min_length: min_length1,
                 from_end: true,
             },
-            &ProjectionElem::ConstantIndex {
+            ProjectionElem::ConstantIndex {
                 offset: offset_from_begin,
                 min_length: min_length2,
                 from_end: false,
index 5956896881941b9037de272a8ce8f935905e3aa4..5df033b48c1f9f5153a1c12005be45a5b0f45c27 100644 (file)
@@ -66,14 +66,14 @@ fn visit_ty(&mut self, ty: &mut Ty<'tcx>, ty_context: TyContext) {
 
     fn process_projection_elem(
         &mut self,
-        elem: &PlaceElem<'tcx>,
+        elem: PlaceElem<'tcx>,
         _: Location,
     ) -> Option<PlaceElem<'tcx>> {
         if let PlaceElem::Field(field, ty) = elem {
-            let new_ty = self.renumber_regions(ty);
+            let new_ty = self.renumber_regions(&ty);
 
-            if new_ty != *ty {
-                return Some(PlaceElem::Field(*field, new_ty));
+            if new_ty != ty {
+                return Some(PlaceElem::Field(field, new_ty));
             }
         }
 
index 1a64dcbf439d9eb75612af17893e5fa0675c8227..ac7da7ee42d66b212db34d44254269b72f21b5e2 100644 (file)
@@ -497,7 +497,7 @@ fn sanitize_place(
                     return PlaceTy::from_ty(self.tcx().types.err);
                 }
             }
-            place_ty = self.sanitize_projection(place_ty, &elem, place, location)
+            place_ty = self.sanitize_projection(place_ty, elem, place, location)
         }
 
         if let PlaceContext::NonMutatingUse(NonMutatingUseContext::Copy) = context {
@@ -611,14 +611,14 @@ fn sanitize_promoted(&mut self, promoted_body: &'b Body<'tcx>, location: Locatio
     fn sanitize_projection(
         &mut self,
         base: PlaceTy<'tcx>,
-        pi: &PlaceElem<'tcx>,
+        pi: PlaceElem<'tcx>,
         place: &Place<'tcx>,
         location: Location,
     ) -> PlaceTy<'tcx> {
         debug!("sanitize_projection: {:?} {:?} {:?}", base, pi, place);
         let tcx = self.tcx();
         let base_ty = base.ty;
-        match *pi {
+        match pi {
             ProjectionElem::Deref => {
                 let deref_ty = base_ty.builtin_deref(true);
                 PlaceTy::from_ty(deref_ty.map(|t| t.ty).unwrap_or_else(|| {
index 91b342ae5c36a7efc74c173d38256fa94099e825..6dd06743e2d5bdf187008aff53505c95ce1ec7ee 100644 (file)
@@ -12,12 +12,12 @@ pub fn move_path_children_matching<'tcx, F>(
     mut cond: F,
 ) -> Option<MovePathIndex>
 where
-    F: FnMut(&mir::PlaceElem<'tcx>) -> bool,
+    F: FnMut(mir::PlaceElem<'tcx>) -> bool,
 {
     let mut next_child = move_data.move_paths[path].first_child;
     while let Some(child_index) = next_child {
         let move_path_children = &move_data.move_paths[child_index];
-        if let Some(elem) = move_path_children.place.projection.last() {
+        if let Some(&elem) = move_path_children.place.projection.last() {
             if cond(elem) {
                 return Some(child_index);
             }
index b89884a4492f8a887fd2456596a367698cdad4c0..427ab1ca5cd229d20722df05bcd30e5296246e04 100644 (file)
@@ -158,7 +158,7 @@ fn move_path_for(&mut self, place: Place<'tcx>) -> Result<MovePathIndex, MoveErr
             };
 
             if union_path.is_none() {
-                base = self.add_move_path(base, &elem, |tcx| Place {
+                base = self.add_move_path(base, elem, |tcx| Place {
                     local: place.local,
                     projection: tcx.intern_place_elems(&place.projection[..i + 1]),
                 });
@@ -176,7 +176,7 @@ fn move_path_for(&mut self, place: Place<'tcx>) -> Result<MovePathIndex, MoveErr
     fn add_move_path(
         &mut self,
         base: MovePathIndex,
-        elem: &PlaceElem<'tcx>,
+        elem: PlaceElem<'tcx>,
         mk_place: impl FnOnce(TyCtxt<'tcx>) -> Place<'tcx>,
     ) -> MovePathIndex {
         let MoveDataBuilder {
@@ -485,7 +485,7 @@ fn gather_move(&mut self, place: Place<'tcx>) {
                 let elem =
                     ProjectionElem::ConstantIndex { offset, min_length: len, from_end: false };
                 let path =
-                    self.add_move_path(base_path, &elem, |tcx| tcx.mk_place_elem(base_place, elem));
+                    self.add_move_path(base_path, elem, |tcx| tcx.mk_place_elem(base_place, elem));
                 self.record_move(place, path);
             }
         } else {
index 8edfbbb3c22cb989b7a6120c07f71199277d1209..95bc9810dab80f92d0eb0c1720a9e6f9e98418cd 100644 (file)
@@ -400,10 +400,10 @@ pub fn operand_downcast(
     pub fn operand_projection(
         &self,
         base: OpTy<'tcx, M::PointerTag>,
-        proj_elem: &mir::PlaceElem<'tcx>,
+        proj_elem: mir::PlaceElem<'tcx>,
     ) -> InterpResult<'tcx, OpTy<'tcx, M::PointerTag>> {
         use rustc_middle::mir::ProjectionElem::*;
-        Ok(match *proj_elem {
+        Ok(match proj_elem {
             Field(field, _) => self.operand_field(base, field.index())?,
             Downcast(_, variant) => self.operand_downcast(base, variant)?,
             Deref => self.deref_operand(base)?.into(),
@@ -466,7 +466,7 @@ pub fn eval_place_to_op(
         let op = place
             .projection
             .iter()
-            .try_fold(base_op, |op, elem| self.operand_projection(op, &elem))?;
+            .try_fold(base_op, |op, elem| self.operand_projection(op, elem))?;
 
         trace!("eval_place_to_op: got {:?}", *op);
         Ok(op)
index 4943e148731eda380bcd555822bb9b9cd9604a51..dc6967c2c49e52728cde62d86c6a6f70e40dabc7 100644 (file)
@@ -517,10 +517,10 @@ pub(super) fn mplace_downcast(
     pub(super) fn mplace_projection(
         &self,
         base: MPlaceTy<'tcx, M::PointerTag>,
-        proj_elem: &mir::PlaceElem<'tcx>,
+        proj_elem: mir::PlaceElem<'tcx>,
     ) -> InterpResult<'tcx, MPlaceTy<'tcx, M::PointerTag>> {
         use rustc_middle::mir::ProjectionElem::*;
-        Ok(match *proj_elem {
+        Ok(match proj_elem {
             Field(field, _) => self.mplace_field(base, field.index())?,
             Downcast(_, variant) => self.mplace_downcast(base, variant)?,
             Deref => self.deref_operand(base.into())?,
@@ -605,10 +605,10 @@ pub fn place_downcast(
     pub fn place_projection(
         &mut self,
         base: PlaceTy<'tcx, M::PointerTag>,
-        proj_elem: &mir::ProjectionElem<mir::Local, Ty<'tcx>>,
+        &proj_elem: &mir::ProjectionElem<mir::Local, Ty<'tcx>>,
     ) -> InterpResult<'tcx, PlaceTy<'tcx, M::PointerTag>> {
         use rustc_middle::mir::ProjectionElem::*;
-        Ok(match *proj_elem {
+        Ok(match proj_elem {
             Field(field, _) => self.place_field(base, field.index())?,
             Downcast(_, variant) => self.place_downcast(base, variant)?,
             Deref => self.deref_operand(self.place_to_op(base)?)?.into(),
index fc6860b40e8d27528c433313fda4f16e4a7d7294..05a7c78d59d395fa200da22501999273a92ebce0 100644 (file)
@@ -206,8 +206,8 @@ pub fn in_place<Q, F>(cx: &ConstCx<'_, 'tcx>, in_local: &mut F, place: PlaceRef<
     F: FnMut(Local) -> bool,
 {
     let mut projection = place.projection;
-    while let [ref proj_base @ .., proj_elem] = projection {
-        match *proj_elem {
+    while let &[ref proj_base @ .., proj_elem] = projection {
+        match proj_elem {
             ProjectionElem::Index(index) if in_local(index) => return true,
 
             ProjectionElem::Deref
index 987c9e24fc3c33044c720b0abc4fa5522644dd49..80094e154bf66dcbc3d56f27b5ca8b4898ce191e 100644 (file)
@@ -432,7 +432,7 @@ fn visit_projection_elem(
         &mut self,
         place_local: Local,
         proj_base: &[PlaceElem<'tcx>],
-        elem: &PlaceElem<'tcx>,
+        elem: PlaceElem<'tcx>,
         context: PlaceContext,
         location: Location,
     ) {
index e379e5ee656b755a874ba26a508f866c42f99e69..e4129f447d532532b17355d4139b6355fc414041 100644 (file)
@@ -213,7 +213,7 @@ fn clear_drop_flag(&mut self, loc: Location, path: Self::Path, mode: DropFlagMod
 
     fn field_subpath(&self, path: Self::Path, field: Field) -> Option<Self::Path> {
         dataflow::move_path_children_matching(self.ctxt.move_data(), path, |e| match e {
-            ProjectionElem::Field(idx, _) => *idx == field,
+            ProjectionElem::Field(idx, _) => idx == field,
             _ => false,
         })
     }
@@ -221,9 +221,9 @@ fn field_subpath(&self, path: Self::Path, field: Field) -> Option<Self::Path> {
     fn array_subpath(&self, path: Self::Path, index: u32, size: u32) -> Option<Self::Path> {
         dataflow::move_path_children_matching(self.ctxt.move_data(), path, |e| match e {
             ProjectionElem::ConstantIndex { offset, min_length, from_end } => {
-                debug_assert!(size == *min_length, "min_length should be exact for arrays");
+                debug_assert!(size == min_length, "min_length should be exact for arrays");
                 assert!(!from_end, "from_end should not be used for array element ConstantIndex");
-                *offset == index
+                offset == index
             }
             _ => false,
         })
@@ -231,13 +231,13 @@ fn array_subpath(&self, path: Self::Path, index: u32, size: u32) -> Option<Self:
 
     fn deref_subpath(&self, path: Self::Path) -> Option<Self::Path> {
         dataflow::move_path_children_matching(self.ctxt.move_data(), path, |e| {
-            *e == ProjectionElem::Deref
+            e == ProjectionElem::Deref
         })
     }
 
     fn downcast_subpath(&self, path: Self::Path, variant: VariantIdx) -> Option<Self::Path> {
         dataflow::move_path_children_matching(self.ctxt.move_data(), path, |e| match e {
-            ProjectionElem::Downcast(_, idx) => *idx == variant,
+            ProjectionElem::Downcast(_, idx) => idx == variant,
             _ => false,
         })
     }
index 13a8b9a1000c957523c1bd11a8991a566cd775f7..6caa2b48f3d45357a077032c0d3cd234d60e0335 100644 (file)
@@ -340,7 +340,7 @@ fn validate_candidate(&self, candidate: Candidate) -> Result<(), Unpromotable> {
                             // `let _: &'static _ = &(Cell::new(1), 2).1;`
                             let mut place_projection = &place.projection[..];
                             // FIXME(eddyb) use a forward loop instead of a reverse one.
-                            while let [proj_base @ .., elem] = place_projection {
+                            while let &[ref proj_base @ .., elem] = place_projection {
                                 // FIXME(eddyb) this is probably excessive, with
                                 // the exception of `union` member accesses.
                                 let ty =
@@ -676,7 +676,7 @@ fn validate_rvalue(&self, rvalue: &Rvalue<'tcx>) -> Result<(), Unpromotable> {
                 if has_mut_interior {
                     let mut place_projection = place.projection;
                     // FIXME(eddyb) use a forward loop instead of a reverse one.
-                    while let [proj_base @ .., elem] = place_projection {
+                    while let &[ref proj_base @ .., elem] = place_projection {
                         // FIXME(eddyb) this is probably excessive, with
                         // the exception of `union` member accesses.
                         let ty = Place::ty_from(place.local, proj_base, self.body, self.tcx)