diff options
| author | Mark Simulacrum <mark.simulacrum@gmail.com> | 2017-01-02 14:47:15 -0700 |
|---|---|---|
| committer | Mark Simulacrum <mark.simulacrum@gmail.com> | 2017-01-04 11:38:11 -0700 |
| commit | ca328e1bb4629f7a3ef26c23b759781c4b90588c (patch) | |
| tree | 7a7f04b2250cad44c90156beac7eaa27594c0271 | |
| parent | c3fe2590f583e4bb36fd39b7ce32924f696b5081 (diff) | |
| download | rust-ca328e1bb4629f7a3ef26c23b759781c4b90588c.tar.gz rust-ca328e1bb4629f7a3ef26c23b759781c4b90588c.zip | |
Simplify code further
| -rw-r--r-- | src/librustc_trans/mir/block.rs | 18 | ||||
| -rw-r--r-- | src/librustc_trans/mir/lvalue.rs | 19 |
2 files changed, 11 insertions, 26 deletions
diff --git a/src/librustc_trans/mir/block.rs b/src/librustc_trans/mir/block.rs index a62c25f2afc..b9e58f79a51 100644 --- a/src/librustc_trans/mir/block.rs +++ b/src/librustc_trans/mir/block.rs @@ -242,20 +242,14 @@ impl<'a, 'tcx> MirContext<'a, 'tcx> { return; } - let lvalue = self.trans_lvalue(&bcx, location); + let mut lvalue = self.trans_lvalue(&bcx, location); let drop_fn = glue::get_drop_glue(bcx.ccx, ty); let drop_ty = glue::get_drop_glue_type(bcx.ccx.shared(), ty); - let ptr = if bcx.ccx.shared().type_is_sized(ty) { - let value = if drop_ty != ty { - bcx.pointercast(lvalue.llval, type_of::type_of(bcx.ccx, drop_ty).ptr_to()) - } else { - lvalue.llval - }; - LvalueRef::new_sized_ty(value, ty) - } else { - LvalueRef::new_unsized_ty(lvalue.llval, lvalue.llextra, ty) - }; - let args = &[ptr.llval, ptr.llextra][..1 + ptr.has_extra() as usize]; + if bcx.ccx.shared().type_is_sized(ty) && drop_ty != ty { + lvalue.llval = bcx.pointercast( + lvalue.llval, type_of::type_of(bcx.ccx, drop_ty).ptr_to()); + } + let args = &[lvalue.llval, lvalue.llextra][..1 + lvalue.has_extra() as usize]; if let Some(unwind) = unwind { bcx.invoke( drop_fn, diff --git a/src/librustc_trans/mir/lvalue.rs b/src/librustc_trans/mir/lvalue.rs index a538a16dc95..bd6e70639bb 100644 --- a/src/librustc_trans/mir/lvalue.rs +++ b/src/librustc_trans/mir/lvalue.rs @@ -50,13 +50,6 @@ impl<'a, 'tcx> LvalueRef<'tcx> { LvalueRef::new_sized(llval, LvalueTy::from_ty(ty)) } - pub fn new_unsized(llval: ValueRef, llextra: ValueRef, ty: LvalueTy<'tcx>) -> LvalueRef<'tcx> { - LvalueRef { - llval: llval, - llextra: llextra, - ty: ty, - } - } pub fn new_unsized_ty(llval: ValueRef, llextra: ValueRef, ty: Ty<'tcx>) -> LvalueRef<'tcx> { LvalueRef { llval: llval, @@ -81,7 +74,7 @@ impl<'a, 'tcx> LvalueRef<'tcx> { !self.llextra.is_null() } - pub fn struct_field_ptr( + fn struct_field_ptr( self, bcx: &Builder<'a, 'tcx>, st: &layout::Struct, @@ -298,14 +291,12 @@ impl<'a, 'tcx> MirContext<'a, 'tcx> { let (llprojected, llextra) = match projection.elem { mir::ProjectionElem::Deref => bug!(), mir::ProjectionElem::Field(ref field, _) => { - let is_sized = self.ccx.shared().type_is_sized(projected_ty.to_ty(tcx)); - let base = if is_sized { - LvalueRef::new_sized(tr_base.llval, tr_base.ty) + let llextra = if self.ccx.shared().type_is_sized(projected_ty.to_ty(tcx)) { + ptr::null_mut() } else { - LvalueRef::new_unsized(tr_base.llval, tr_base.llextra, tr_base.ty) + tr_base.llextra }; - let llprojected = base.trans_field_ptr(bcx, field.index()); - (llprojected, base.llextra) + (tr_base.trans_field_ptr(bcx, field.index()), llextra) } mir::ProjectionElem::Index(ref index) => { let index = self.trans_operand(bcx, index); |
