Skip to content

Commit d97a7d2

Browse files
committed
Make sure we aren't using dead locals
1 parent efc7d46 commit d97a7d2

File tree

1 file changed

+6
-5
lines changed

1 file changed

+6
-5
lines changed

src/librustc_mir/transform/generator.rs

+6-5
Original file line numberDiff line numberDiff line change
@@ -244,6 +244,12 @@ impl<'a, 'tcx> MutVisitor<'tcx> for TransformVisitor<'a, 'tcx> {
244244

245245
if let Some((state_idx, resume, v, drop)) = ret_val {
246246
let source_info = data.terminator().source_info;
247+
// We must assign the value first in case it gets declared dead below
248+
data.statements.push(Statement {
249+
source_info,
250+
kind: StatementKind::Assign(Lvalue::Local(RETURN_POINTER),
251+
self.make_state(state_idx, v)),
252+
});
247253
let state = if let Some(resume) = resume { // Yield
248254
let state = 3 + self.suspension_points.len() as u32;
249255

@@ -272,11 +278,6 @@ impl<'a, 'tcx> MutVisitor<'tcx> for TransformVisitor<'a, 'tcx> {
272278
1 // state for returned
273279
};
274280
data.statements.push(self.set_state(state, source_info));
275-
data.statements.push(Statement {
276-
source_info,
277-
kind: StatementKind::Assign(Lvalue::Local(RETURN_POINTER),
278-
self.make_state(state_idx, v)),
279-
});
280281
data.terminator.as_mut().unwrap().kind = TerminatorKind::Return;
281282
}
282283

0 commit comments

Comments
 (0)