X-Git-Url: https://git.lizzy.rs/?a=blobdiff_plain;f=src%2Flibrustc_mir%2Fshim.rs;h=6daca5e261431f7d4149c79b1945badd4e355f53;hb=87420cd1bc9b032290e55e1569c6c45398eec929;hp=d4df0f82eea7812583d839caa7601dcf94675634;hpb=24587d20dfa6ddc2391e6edee81ef090f92858fa;p=rust.git diff --git a/src/librustc_mir/shim.rs b/src/librustc_mir/shim.rs index d4df0f82eea..6daca5e2614 100644 --- a/src/librustc_mir/shim.rs +++ b/src/librustc_mir/shim.rs @@ -112,7 +112,7 @@ fn make_shim<'tcx>(tcx: TyCtxt<'tcx>, instance: ty::InstanceDef<'tcx>) -> &'tcx }; debug!("make_shim({:?}) = untransformed {:?}", instance, result); - run_passes(tcx, &mut result, instance, MirPhase::Const, &[ + run_passes(tcx, &mut result, instance, None, MirPhase::Const, &[ &add_moves_for_packed_drops::AddMovesForPackedDrops, &no_landing_pads::NoLandingPads, &remove_noop_landing_pads::RemoveNoopLandingPads, @@ -201,7 +201,6 @@ fn build_drop_shim<'tcx>(tcx: TyCtxt<'tcx>, def_id: DefId, ty: Option>) SourceScopeData { span: span, parent_scope: None }, 1 ), ClearCrossCrate::Clear, - IndexVec::new(), None, local_decls_for_sig(&sig, span), IndexVec::new(), @@ -218,7 +217,7 @@ fn build_drop_shim<'tcx>(tcx: TyCtxt<'tcx>, def_id: DefId, ty: Option>) // Function arguments should be retagged, and we make this one raw. body.basic_blocks_mut()[START_BLOCK].statements.insert(0, Statement { source_info, - kind: StatementKind::Retag(RetagKind::Raw, dropee_ptr.clone()), + kind: StatementKind::Retag(RetagKind::Raw, box(dropee_ptr.clone())), }); } let patch = { @@ -309,7 +308,7 @@ fn build_clone_shim<'tcx>(tcx: TyCtxt<'tcx>, def_id: DefId, self_ty: Ty<'tcx>) - let mut builder = CloneShimBuilder::new(tcx, def_id, self_ty); let is_copy = self_ty.is_copy_modulo_regions(tcx, param_env, builder.span); - let dest = Place::RETURN_PLACE; + let dest = Place::return_place(); let src = Place::from(Local::new(1+0)).deref(); match self_ty.sty { @@ -324,7 +323,7 @@ fn build_clone_shim<'tcx>(tcx: TyCtxt<'tcx>, def_id: DefId, self_ty: Ty<'tcx>) - substs.upvar_tys(def_id, tcx) ) } - ty::Tuple(tys) => builder.tuple_like_shim(dest, src, tys.iter().map(|k| k.expect_ty())), + ty::Tuple(..) => builder.tuple_like_shim(dest, src, self_ty.tuple_fields()), _ => { bug!("clone shim for `{:?}` which is not `Copy` and is not an aggregate", self_ty) } @@ -369,7 +368,6 @@ fn into_mir(self) -> Body<'tcx> { SourceScopeData { span: self.span, parent_scope: None }, 1 ), ClearCrossCrate::Clear, - IndexVec::new(), None, self.local_decls, IndexVec::new(), @@ -417,8 +415,10 @@ fn copy_shim(&mut self) { let rcvr = Place::from(Local::new(1+0)).deref(); let ret_statement = self.make_statement( StatementKind::Assign( - Place::RETURN_PLACE, - box Rvalue::Use(Operand::Copy(rcvr)) + box( + Place::return_place(), + Rvalue::Use(Operand::Copy(rcvr)) + ) ) ); self.block(vec![ret_statement], TerminatorKind::Return, false); @@ -445,7 +445,6 @@ fn make_clone_call( let func_ty = tcx.mk_fn_def(self.def_id, substs); let func = Operand::Constant(box Constant { span: self.span, - ty: func_ty, user_ty: None, literal: ty::Const::zero_sized(tcx, func_ty), }); @@ -461,8 +460,10 @@ fn make_clone_call( // `let ref_loc: &ty = &src;` let statement = self.make_statement( StatementKind::Assign( - ref_loc.clone(), - box Rvalue::Ref(tcx.lifetimes.re_erased, BorrowKind::Shared, src) + box( + ref_loc.clone(), + Rvalue::Ref(tcx.lifetimes.re_erased, BorrowKind::Shared, src) + ) ) ); @@ -489,8 +490,10 @@ fn loop_header( let cond = self.make_place(Mutability::Mut, tcx.types.bool); let compute_cond = self.make_statement( StatementKind::Assign( - cond.clone(), - box Rvalue::BinaryOp(BinOp::Ne, Operand::Copy(end), Operand::Copy(beg)) + box( + cond.clone(), + Rvalue::BinaryOp(BinOp::Ne, Operand::Copy(end), Operand::Copy(beg)) + ) ) ); @@ -505,7 +508,6 @@ fn loop_header( fn make_usize(&self, value: u64) -> Box> { box Constant { span: self.span, - ty: self.tcx.types.usize, user_ty: None, literal: ty::Const::from_usize(self.tcx, value), } @@ -525,14 +527,18 @@ fn array_shim(&mut self, dest: Place<'tcx>, src: Place<'tcx>, ty: Ty<'tcx>, len: let inits = vec![ self.make_statement( StatementKind::Assign( - Place::from(beg), - box Rvalue::Use(Operand::Constant(self.make_usize(0))) + box( + Place::from(beg), + Rvalue::Use(Operand::Constant(self.make_usize(0))) + ) ) ), self.make_statement( StatementKind::Assign( - end.clone(), - box Rvalue::Use(Operand::Constant(self.make_usize(len))) + box( + end.clone(), + Rvalue::Use(Operand::Constant(self.make_usize(len))) + ) ) ) ]; @@ -563,11 +569,13 @@ fn array_shim(&mut self, dest: Place<'tcx>, src: Place<'tcx>, ty: Ty<'tcx>, len: let statements = vec![ self.make_statement( StatementKind::Assign( - Place::from(beg), - box Rvalue::BinaryOp( - BinOp::Add, - Operand::Copy(Place::from(beg)), - Operand::Constant(self.make_usize(1)) + box( + Place::from(beg), + Rvalue::BinaryOp( + BinOp::Add, + Operand::Copy(Place::from(beg)), + Operand::Constant(self.make_usize(1)) + ) ) ) ) @@ -586,8 +594,10 @@ fn array_shim(&mut self, dest: Place<'tcx>, src: Place<'tcx>, ty: Ty<'tcx>, len: let beg = self.local_decls.push(temp_decl(Mutability::Mut, tcx.types.usize, span)); let init = self.make_statement( StatementKind::Assign( - Place::from(beg), - box Rvalue::Use(Operand::Constant(self.make_usize(0))) + box( + Place::from(beg), + Rvalue::Use(Operand::Constant(self.make_usize(0))) + ) ) ); self.block(vec![init], TerminatorKind::Goto { target: BasicBlock::new(6) }, true); @@ -613,11 +623,13 @@ fn array_shim(&mut self, dest: Place<'tcx>, src: Place<'tcx>, ty: Ty<'tcx>, len: // `goto #6;` let statement = self.make_statement( StatementKind::Assign( - Place::from(beg), - box Rvalue::BinaryOp( - BinOp::Add, - Operand::Copy(Place::from(beg)), - Operand::Constant(self.make_usize(1)) + box( + Place::from(beg), + Rvalue::BinaryOp( + BinOp::Add, + Operand::Copy(Place::from(beg)), + Operand::Constant(self.make_usize(1)) + ) ) ) ); @@ -731,8 +743,10 @@ fn build_call_shim<'tcx>( statements.push(Statement { source_info, kind: StatementKind::Assign( - Place::from(ref_rcvr), - box Rvalue::Ref(tcx.lifetimes.re_erased, borrow_kind, rcvr_l) + box( + Place::from(ref_rcvr), + Rvalue::Ref(tcx.lifetimes.re_erased, borrow_kind, rcvr_l) + ) ) }); Operand::Move(Place::from(ref_rcvr)) @@ -745,7 +759,6 @@ fn build_call_shim<'tcx>( let ty = tcx.type_of(def_id); (Operand::Constant(box Constant { span, - ty, user_ty: None, literal: ty::Const::zero_sized(tcx, ty), }), @@ -778,7 +791,7 @@ fn build_call_shim<'tcx>( block(&mut blocks, statements, TerminatorKind::Call { func: callee, args, - destination: Some((Place::RETURN_PLACE, + destination: Some((Place::return_place(), BasicBlock::new(1))), cleanup: if let Adjustment::RefMut = rcvr_adjustment { Some(BasicBlock::new(3)) @@ -816,7 +829,6 @@ fn build_call_shim<'tcx>( SourceScopeData { span: span, parent_scope: None }, 1 ), ClearCrossCrate::Clear, - IndexVec::new(), None, local_decls, IndexVec::new(), @@ -874,7 +886,7 @@ pub fn build_adt_ctor(tcx: TyCtxt<'_>, ctor_id: DefId) -> &Body<'_> { debug!("build_ctor: variant_index={:?}", variant_index); let statements = expand_aggregate( - Place::RETURN_PLACE, + Place::return_place(), adt_def .variants[variant_index] .fields @@ -903,7 +915,6 @@ pub fn build_adt_ctor(tcx: TyCtxt<'_>, ctor_id: DefId) -> &Body<'_> { SourceScopeData { span: span, parent_scope: None }, 1 ), ClearCrossCrate::Clear, - IndexVec::new(), None, local_decls, IndexVec::new(),