From 83a3e04ed0ba59a1cdff333d4017019817cbf911 Mon Sep 17 00:00:00 2001 From: Dylan MacKenzie Date: Tue, 17 Sep 2019 16:25:31 -0700 Subject: [PATCH] Don't treat locals as mutably borrowed after they're dropped --- .../dataflow/impls/indirect_mutation.rs | 17 +++++------------ 1 file changed, 5 insertions(+), 12 deletions(-) diff --git a/src/librustc_mir/dataflow/impls/indirect_mutation.rs b/src/librustc_mir/dataflow/impls/indirect_mutation.rs index f45fdb214635..934b843cc40b 100644 --- a/src/librustc_mir/dataflow/impls/indirect_mutation.rs +++ b/src/librustc_mir/dataflow/impls/indirect_mutation.rs @@ -135,18 +135,11 @@ impl<'tcx> Visitor<'tcx> for TransferFunction<'_, '_, 'tcx> { fn visit_terminator(&mut self, terminator: &mir::Terminator<'tcx>, location: Location) { self.super_terminator(terminator, location); - match &terminator.kind { - // Drop terminators borrow the location - mir::TerminatorKind::Drop { location: dropped_place, .. } | - mir::TerminatorKind::DropAndReplace { location: dropped_place, .. } => { - match dropped_place.base { - mir::PlaceBase::Local(dropped_local) if !dropped_place.is_indirect() - => self.trans.gen(dropped_local), - - _ => (), - } - } - _ => (), + if let mir::TerminatorKind::Drop { location: _, .. } + | mir::TerminatorKind::DropAndReplace { location: _, .. } = &terminator.kind + { + // Although drop terminators mutably borrow the location being dropped, that borrow + // cannot live beyond the drop terminator because the dropped location is invalidated. } } }