diff options
| author | John Kåre Alsaker <john.kare.alsaker@gmail.com> | 2017-09-11 12:15:35 +0200 |
|---|---|---|
| committer | John Kåre Alsaker <john.kare.alsaker@gmail.com> | 2017-09-13 23:28:11 +0200 |
| commit | d97a7d259432e50bb1c9daaeb9e1174d51f2aaee (patch) | |
| tree | 7d5aa5e27a1c4abdac2d66efa7ebc04e5855eaa3 | |
| parent | efc7d46188c6696ae873b2b71ead7e34fc4501ab (diff) | |
| download | rust-d97a7d259432e50bb1c9daaeb9e1174d51f2aaee.tar.gz rust-d97a7d259432e50bb1c9daaeb9e1174d51f2aaee.zip | |
Make sure we aren't using dead locals
| -rw-r--r-- | src/librustc_mir/transform/generator.rs | 11 |
1 files changed, 6 insertions, 5 deletions
diff --git a/src/librustc_mir/transform/generator.rs b/src/librustc_mir/transform/generator.rs index 3be21b72731..0517963a1a0 100644 --- a/src/librustc_mir/transform/generator.rs +++ b/src/librustc_mir/transform/generator.rs @@ -244,6 +244,12 @@ impl<'a, 'tcx> MutVisitor<'tcx> for TransformVisitor<'a, 'tcx> { if let Some((state_idx, resume, v, drop)) = ret_val { let source_info = data.terminator().source_info; + // We must assign the value first in case it gets declared dead below + data.statements.push(Statement { + source_info, + kind: StatementKind::Assign(Lvalue::Local(RETURN_POINTER), + self.make_state(state_idx, v)), + }); let state = if let Some(resume) = resume { // Yield let state = 3 + self.suspension_points.len() as u32; @@ -272,11 +278,6 @@ impl<'a, 'tcx> MutVisitor<'tcx> for TransformVisitor<'a, 'tcx> { 1 // state for returned }; data.statements.push(self.set_state(state, source_info)); - data.statements.push(Statement { - source_info, - kind: StatementKind::Assign(Lvalue::Local(RETURN_POINTER), - self.make_state(state_idx, v)), - }); data.terminator.as_mut().unwrap().kind = TerminatorKind::Return; } |
