X-Git-Url: https://git.lizzy.rs/?a=blobdiff_plain;f=src%2Flibrustc_mir%2Ftransform%2Fadd_retag.rs;h=466f6060827ec1d7b15f95538157982bfbb841e0;hb=e9c41148c0c834d13d6f45bfd99c8f23781c5d31;hp=524a19e3434f3c8f3f8b0ace4862113517db23b1;hpb=e2b4165a6c2fbab4c1bde97d0c2e47b4602f7bc0;p=rust.git diff --git a/src/librustc_mir/transform/add_retag.rs b/src/librustc_mir/transform/add_retag.rs index 524a19e3434..466f6060827 100644 --- a/src/librustc_mir/transform/add_retag.rs +++ b/src/librustc_mir/transform/add_retag.rs @@ -17,12 +17,11 @@ fn is_stable( place: PlaceRef<'_, '_>, ) -> bool { - if let Some(proj) = &place.projection { - match proj.elem { + place.projection.iter().all(|elem| { + match elem { // Which place this evaluates to can change with any memory write, // so cannot assume this to be stable. - ProjectionElem::Deref => - false, + ProjectionElem::Deref => false, // Array indices are intersting, but MIR building generates a *fresh* // temporary for every array access, so the index cannot be changed as // a side-effect. @@ -31,15 +30,9 @@ fn is_stable( ProjectionElem::Field { .. } | ProjectionElem::ConstantIndex { .. } | ProjectionElem::Subslice { .. } | - ProjectionElem::Downcast { .. } => - is_stable(PlaceRef { - base: place.base, - projection: &proj.base, - }), + ProjectionElem::Downcast { .. } => true, } - } else { - true - } + }) } /// Determine whether this type may be a reference (or box), and thus needs retagging. @@ -65,8 +58,8 @@ fn may_be_reference<'tcx>(ty: Ty<'tcx>) -> bool { } } -impl MirPass for AddRetag { - fn run_pass<'tcx>(&self, tcx: TyCtxt<'tcx>, _src: MirSource<'tcx>, body: &mut Body<'tcx>) { +impl<'tcx> MirPass<'tcx> for AddRetag { + fn run_pass(&self, tcx: TyCtxt<'tcx>, _src: MirSource<'tcx>, body: &mut Body<'tcx>) { if !tcx.sess.opts.debugging_opts.mir_emit_retag { return; }