From 810dbf7770cfaa52ed5cdc2f833fa11e4034c029 Mon Sep 17 00:00:00 2001 From: Bastian Kauschke Date: Sat, 23 May 2020 12:02:54 +0200 Subject: [PATCH] take mir::PlaceElem by value --- src/librustc_codegen_ssa/mir/analyze.rs | 4 ++-- src/librustc_codegen_ssa/mir/place.rs | 14 +++++++------- src/librustc_middle/mir/tcx.rs | 6 +++--- src/librustc_middle/mir/visit.rs | 16 ++++++++-------- .../borrow_check/places_conflict.rs | 18 +++++++++--------- src/librustc_mir/borrow_check/renumber.rs | 8 ++++---- .../borrow_check/type_check/mod.rs | 6 +++--- src/librustc_mir/dataflow/drop_flag_effects.rs | 4 ++-- .../dataflow/move_paths/builder.rs | 6 +++--- src/librustc_mir/interpret/operand.rs | 6 +++--- src/librustc_mir/interpret/place.rs | 8 ++++---- .../transform/check_consts/qualifs.rs | 4 ++-- .../transform/check_consts/validation.rs | 2 +- src/librustc_mir/transform/elaborate_drops.rs | 10 +++++----- src/librustc_mir/transform/promote_consts.rs | 4 ++-- 15 files changed, 58 insertions(+), 58 deletions(-) diff --git a/src/librustc_codegen_ssa/mir/analyze.rs b/src/librustc_codegen_ssa/mir/analyze.rs index 5e3a37e20bd4f..fa0f29acc7433 100644 --- a/src/librustc_codegen_ssa/mir/analyze.rs +++ b/src/librustc_codegen_ssa/mir/analyze.rs @@ -104,7 +104,7 @@ impl> LocalAnalyzer<'mir, 'a, 'tcx, Bx> { ) { 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 @@ impl> LocalAnalyzer<'mir, 'a, 'tcx, Bx> { // 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, ); diff --git a/src/librustc_codegen_ssa/mir/place.rs b/src/librustc_codegen_ssa/mir/place.rs index aaba2ec1362ac..2be0679382900 100644 --- a/src/librustc_codegen_ssa/mir/place.rs +++ b/src/librustc_codegen_ssa/mir/place.rs @@ -429,7 +429,7 @@ impl<'a, 'tcx, Bx: BuilderMethods<'a, 'tcx>> FunctionCx<'a, 'tcx, Bx> { 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 @@ impl<'a, 'tcx, Bx: BuilderMethods<'a, 'tcx>> FunctionCx<'a, 'tcx, Bx> { 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 @@ impl<'a, 'tcx, Bx: BuilderMethods<'a, 'tcx>> FunctionCx<'a, 'tcx, Bx> { 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 @@ impl<'a, 'tcx, Bx: BuilderMethods<'a, 'tcx>> FunctionCx<'a, 'tcx, Bx> { 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 @@ impl<'a, 'tcx, Bx: BuilderMethods<'a, 'tcx>> FunctionCx<'a, 'tcx, Bx> { 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 @@ impl<'a, 'tcx, Bx: BuilderMethods<'a, 'tcx>> FunctionCx<'a, 'tcx, Bx> { subslice } - mir::ProjectionElem::Downcast(_, v) => cg_base.project_downcast(bx, *v), + mir::ProjectionElem::Downcast(_, v) => cg_base.project_downcast(bx, v), } } }; diff --git a/src/librustc_middle/mir/tcx.rs b/src/librustc_middle/mir/tcx.rs index 17edd9f4cb643..4747aec2d5c24 100644 --- a/src/librustc_middle/mir/tcx.rs +++ b/src/librustc_middle/mir/tcx.rs @@ -56,8 +56,8 @@ impl<'tcx> PlaceTy<'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 @@ impl<'tcx> Place<'tcx> { { 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) }) } diff --git a/src/librustc_middle/mir/visit.rs b/src/librustc_middle/mir/visit.rs index 02164244771c9..a29b7b75294b7 100644 --- a/src/librustc_middle/mir/visit.rs +++ b/src/librustc_middle/mir/visit.rs @@ -903,7 +903,7 @@ macro_rules! visit_place_fns { 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 @@ macro_rules! visit_place_fns { fn process_projection_elem( &mut self, - elem: &PlaceElem<'tcx>, + elem: PlaceElem<'tcx>, location: Location, ) -> Option> { 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 @@ macro_rules! visit_place_fns { &mut self, local: Local, proj_base: &[PlaceElem<'tcx>], - elem: &PlaceElem<'tcx>, + elem: PlaceElem<'tcx>, context: PlaceContext, location: Location, ) { @@ -990,7 +990,7 @@ macro_rules! visit_place_fns { 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 @@ macro_rules! visit_place_fns { &mut self, _local: Local, _proj_base: &[PlaceElem<'tcx>], - elem: &PlaceElem<'tcx>, + elem: PlaceElem<'tcx>, _context: PlaceContext, location: Location, ) { @@ -1010,7 +1010,7 @@ macro_rules! visit_place_fns { } ProjectionElem::Index(local) => { self.visit_local( - local, + &local, PlaceContext::NonMutatingUse(NonMutatingUseContext::Copy), location, ); diff --git a/src/librustc_mir/borrow_check/places_conflict.rs b/src/librustc_mir/borrow_check/places_conflict.rs index 809b749f1e71f..246e4826e0e76 100644 --- a/src/librustc_mir/borrow_check/places_conflict.rs +++ b/src/librustc_mir/borrow_check/places_conflict.rs @@ -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, diff --git a/src/librustc_mir/borrow_check/renumber.rs b/src/librustc_mir/borrow_check/renumber.rs index 5956896881941..5df033b48c1f9 100644 --- a/src/librustc_mir/borrow_check/renumber.rs +++ b/src/librustc_mir/borrow_check/renumber.rs @@ -66,14 +66,14 @@ impl<'a, 'tcx> MutVisitor<'tcx> for NLLVisitor<'a, 'tcx> { fn process_projection_elem( &mut self, - elem: &PlaceElem<'tcx>, + elem: PlaceElem<'tcx>, _: Location, ) -> Option> { 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)); } } diff --git a/src/librustc_mir/borrow_check/type_check/mod.rs b/src/librustc_mir/borrow_check/type_check/mod.rs index 1a64dcbf439d9..ac7da7ee42d66 100644 --- a/src/librustc_mir/borrow_check/type_check/mod.rs +++ b/src/librustc_mir/borrow_check/type_check/mod.rs @@ -497,7 +497,7 @@ impl<'a, 'b, 'tcx> TypeVerifier<'a, 'b, 'tcx> { 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 @@ impl<'a, 'b, 'tcx> TypeVerifier<'a, 'b, 'tcx> { 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(|| { diff --git a/src/librustc_mir/dataflow/drop_flag_effects.rs b/src/librustc_mir/dataflow/drop_flag_effects.rs index 91b342ae5c36a..6dd06743e2d5b 100644 --- a/src/librustc_mir/dataflow/drop_flag_effects.rs +++ b/src/librustc_mir/dataflow/drop_flag_effects.rs @@ -12,12 +12,12 @@ pub fn move_path_children_matching<'tcx, F>( mut cond: F, ) -> Option 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); } diff --git a/src/librustc_mir/dataflow/move_paths/builder.rs b/src/librustc_mir/dataflow/move_paths/builder.rs index b89884a4492f8..427ab1ca5cd22 100644 --- a/src/librustc_mir/dataflow/move_paths/builder.rs +++ b/src/librustc_mir/dataflow/move_paths/builder.rs @@ -158,7 +158,7 @@ impl<'b, 'a, 'tcx> Gatherer<'b, 'a, 'tcx> { }; 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 @@ impl<'b, 'a, 'tcx> Gatherer<'b, 'a, 'tcx> { 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 @@ impl<'b, 'a, 'tcx> Gatherer<'b, 'a, '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 { diff --git a/src/librustc_mir/interpret/operand.rs b/src/librustc_mir/interpret/operand.rs index 8edfbbb3c22cb..95bc9810dab80 100644 --- a/src/librustc_mir/interpret/operand.rs +++ b/src/librustc_mir/interpret/operand.rs @@ -400,10 +400,10 @@ impl<'mir, 'tcx: 'mir, M: Machine<'mir, 'tcx>> InterpCx<'mir, 'tcx, M> { 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 @@ impl<'mir, 'tcx: 'mir, M: Machine<'mir, 'tcx>> InterpCx<'mir, 'tcx, M> { 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) diff --git a/src/librustc_mir/interpret/place.rs b/src/librustc_mir/interpret/place.rs index 4943e148731ed..dc6967c2c49e5 100644 --- a/src/librustc_mir/interpret/place.rs +++ b/src/librustc_mir/interpret/place.rs @@ -517,10 +517,10 @@ where 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 @@ where pub fn place_projection( &mut self, base: PlaceTy<'tcx, M::PointerTag>, - proj_elem: &mir::ProjectionElem>, + &proj_elem: &mir::ProjectionElem>, ) -> 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(), diff --git a/src/librustc_mir/transform/check_consts/qualifs.rs b/src/librustc_mir/transform/check_consts/qualifs.rs index fc6860b40e8d2..05a7c78d59d39 100644 --- a/src/librustc_mir/transform/check_consts/qualifs.rs +++ b/src/librustc_mir/transform/check_consts/qualifs.rs @@ -206,8 +206,8 @@ where 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 diff --git a/src/librustc_mir/transform/check_consts/validation.rs b/src/librustc_mir/transform/check_consts/validation.rs index 987c9e24fc3c3..80094e154bf66 100644 --- a/src/librustc_mir/transform/check_consts/validation.rs +++ b/src/librustc_mir/transform/check_consts/validation.rs @@ -432,7 +432,7 @@ impl Visitor<'tcx> for Validator<'mir, 'tcx> { &mut self, place_local: Local, proj_base: &[PlaceElem<'tcx>], - elem: &PlaceElem<'tcx>, + elem: PlaceElem<'tcx>, context: PlaceContext, location: Location, ) { diff --git a/src/librustc_mir/transform/elaborate_drops.rs b/src/librustc_mir/transform/elaborate_drops.rs index e379e5ee656b7..e4129f447d532 100644 --- a/src/librustc_mir/transform/elaborate_drops.rs +++ b/src/librustc_mir/transform/elaborate_drops.rs @@ -213,7 +213,7 @@ impl<'a, 'b, 'tcx> DropElaborator<'a, 'tcx> for Elaborator<'a, 'b, 'tcx> { fn field_subpath(&self, path: Self::Path, field: Field) -> Option { 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 @@ impl<'a, 'b, 'tcx> DropElaborator<'a, 'tcx> for Elaborator<'a, 'b, 'tcx> { fn array_subpath(&self, path: Self::Path, index: u32, size: u32) -> Option { 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 @@ impl<'a, 'b, 'tcx> DropElaborator<'a, 'tcx> for Elaborator<'a, 'b, 'tcx> { fn deref_subpath(&self, path: Self::Path) -> Option { 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 { dataflow::move_path_children_matching(self.ctxt.move_data(), path, |e| match e { - ProjectionElem::Downcast(_, idx) => *idx == variant, + ProjectionElem::Downcast(_, idx) => idx == variant, _ => false, }) } diff --git a/src/librustc_mir/transform/promote_consts.rs b/src/librustc_mir/transform/promote_consts.rs index 13a8b9a1000c9..6caa2b48f3d45 100644 --- a/src/librustc_mir/transform/promote_consts.rs +++ b/src/librustc_mir/transform/promote_consts.rs @@ -340,7 +340,7 @@ impl<'tcx> Validator<'_, 'tcx> { // `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 @@ impl<'tcx> Validator<'_, 'tcx> { 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)