From 2af0dd06254de0b0fcb57c20c4f56b119711904e Mon Sep 17 00:00:00 2001 From: csmoe <35686186+csmoe@users.noreply.github.com> Date: Tue, 28 Aug 2018 22:24:01 +0800 Subject: [PATCH] Rewrite place workflow in rustc_mir/util --- src/librustc_mir/util/alignment.rs | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/src/librustc_mir/util/alignment.rs b/src/librustc_mir/util/alignment.rs index 9a77f18f078e3..9fd42b6865a62 100644 --- a/src/librustc_mir/util/alignment.rs +++ b/src/librustc_mir/util/alignment.rs @@ -52,21 +52,21 @@ fn is_within_packed<'a, 'tcx, L>( where L: HasLocalDecls<'tcx>, { - if !place.elems.is_empty() { - for (i, elem) in place.elems.iter().cloned().enumerate().rev() { + if !place.has_no_projection() { + let mut base_ty = place.base.ty(local_decls); + for elem in place.elems.iter() { match elem { // encountered a Deref, which is ABI-aligned ProjectionElem::Deref => break, ProjectionElem::Field(..) => { - let base_place = place.elem_base(tcx, i); - let ty = base_place.ty(local_decls, tcx).to_ty(tcx); - match ty.sty { + match base_ty.sty { ty::TyAdt(def, _) if def.repr.packed() => return true, - _ => continue, + _ => {}, } } - _ => continue, + _ => {}, } + base_ty = tcx::PlaceTy::from(base_ty).projection_ty(tcx, elem).to_ty(tcx); } }