diff --git a/src/librustc_mir/transform/generator.rs b/src/librustc_mir/transform/generator.rs index b4d6bb09a157..748db9ac8036 100644 --- a/src/librustc_mir/transform/generator.rs +++ b/src/librustc_mir/transform/generator.rs @@ -140,18 +140,6 @@ impl<'a, 'tcx> MutVisitor<'tcx> for TransformVisitor<'a, 'tcx> { fn visit_basic_block_data(&mut self, block: BasicBlock, data: &mut BasicBlockData<'tcx>) { - let ret_val = match data.terminator().kind { - TerminatorKind::Return => Some((1, - self.return_block, - Operand::Consume(Lvalue::Local(self.new_ret_local)), - None)), - TerminatorKind::Yield { ref value, resume, drop } => Some((0, - resume, - value.clone(), - drop)), - _ => None - }; - // Remove StorageLive and StorageDead statements for remapped locals data.retain_statements(|s| { match s.kind { @@ -166,6 +154,18 @@ impl<'a, 'tcx> MutVisitor<'tcx> for TransformVisitor<'a, 'tcx> { } }); + let ret_val = match data.terminator().kind { + TerminatorKind::Return => Some((1, + self.return_block, + Operand::Consume(Lvalue::Local(self.new_ret_local)), + None)), + TerminatorKind::Yield { ref value, resume, drop } => Some((0, + resume, + value.clone(), + drop)), + _ => None + }; + if let Some((state_idx, resume, v, drop)) = ret_val { let bb_idx = { let bb_targets = &mut self.bb_targets;