diff options
| author | Jonas Schievink <jonasschievink@gmail.com> | 2020-02-19 23:38:31 +0100 |
|---|---|---|
| committer | Jonas Schievink <jonasschievink@gmail.com> | 2020-02-19 23:38:31 +0100 |
| commit | 689615724535d00c093c6c5dff0accaf6e38d9bc (patch) | |
| tree | 55aa14a3636edca630c1d82d0ab7b47c2bdc93d8 | |
| parent | 71c4f76153590fc1744c7f73b94d2d39ae2e2f23 (diff) | |
| download | rust-689615724535d00c093c6c5dff0accaf6e38d9bc.tar.gz rust-689615724535d00c093c6c5dff0accaf6e38d9bc.zip | |
Remap the resume place if necessary
| -rw-r--r-- | src/librustc_mir/transform/generator.rs | 9 |
1 files changed, 9 insertions, 0 deletions
diff --git a/src/librustc_mir/transform/generator.rs b/src/librustc_mir/transform/generator.rs index b3dc87d1a16..a94f03301f3 100644 --- a/src/librustc_mir/transform/generator.rs +++ b/src/librustc_mir/transform/generator.rs @@ -325,6 +325,15 @@ impl MutVisitor<'tcx> for TransformVisitor<'tcx> { // Yield let state = 3 + self.suspension_points.len(); + // The resume arg target location might itself be remapped if its base local is + // live across a yield. + let resume_arg = + if let Some(&(ty, variant, idx)) = self.remap.get(&resume_arg.local) { + self.make_field(variant, idx, ty) + } else { + resume_arg + }; + self.suspension_points.push(SuspensionPoint { state, resume, |
