Skip to content

Commit 55f4495

Browse files
Re-parent the by-move body
1 parent a6aa8c6 commit 55f4495

4 files changed

+8
-7
lines changed

compiler/rustc_mir_transform/src/coroutine/by_move_body.rs

+2-1
Original file line numberDiff line numberDiff line change
@@ -208,7 +208,8 @@ pub fn coroutine_by_move_body_def_id<'tcx>(
208208
let mut by_move_body = body.clone();
209209
MakeByMoveBody { tcx, field_remapping, by_move_coroutine_ty }.visit_body(&mut by_move_body);
210210

211-
let body_def = tcx.create_def(coroutine_def_id, kw::Empty, DefKind::SyntheticCoroutineBody);
211+
// This will always be `{closure#1}`, since the original coroutine is `{closure#0}`.
212+
let body_def = tcx.create_def(parent_def_id, kw::Empty, DefKind::SyntheticCoroutineBody);
212213
by_move_body.source =
213214
mir::MirSource::from_instance(InstanceKind::Item(body_def.def_id().to_def_id()));
214215
dump_mir(tcx, false, "built", &"after", &by_move_body, |_, _| Ok(()));
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
1-
// MIR for `main::{closure#0}::{closure#0}::{closure#0}::{closure#0}` after built
1+
// MIR for `main::{closure#0}::{closure#0}::{closure#1}` after built
22

3-
fn main::{closure#0}::{closure#0}::{closure#0}::{closure#0}(_1: {async closure body@$DIR/async_closure_shims.rs:55:53: 58:10}, _2: ResumeTy) -> ()
3+
fn main::{closure#0}::{closure#0}::{closure#1}(_1: {async closure body@$DIR/async_closure_shims.rs:55:53: 58:10}, _2: ResumeTy) -> ()
44
yields ()
55
{
66
debug _task_context => _2;
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
1-
// MIR for `main::{closure#0}::{closure#1}::{closure#0}::{closure#0}` after built
1+
// MIR for `main::{closure#0}::{closure#1}::{closure#1}` after built
22

3-
fn main::{closure#0}::{closure#1}::{closure#0}::{closure#0}(_1: {async closure body@$DIR/async_closure_shims.rs:64:48: 67:10}, _2: ResumeTy) -> ()
3+
fn main::{closure#0}::{closure#1}::{closure#1}(_1: {async closure body@$DIR/async_closure_shims.rs:64:48: 67:10}, _2: ResumeTy) -> ()
44
yields ()
55
{
66
debug _task_context => _2;

tests/mir-opt/async_closure_shims.rs

+2-2
Original file line numberDiff line numberDiff line change
@@ -44,11 +44,11 @@ async fn call_normal_mut<F: Future<Output = ()>>(f: &mut impl FnMut(i32) -> F) {
4444

4545
// EMIT_MIR async_closure_shims.main-{closure#0}-{closure#0}.coroutine_closure_by_move.0.mir
4646
// EMIT_MIR async_closure_shims.main-{closure#0}-{closure#0}-{closure#0}.built.after.mir
47-
// EMIT_MIR async_closure_shims.main-{closure#0}-{closure#0}-{closure#0}-{closure#0}.built.after.mir
47+
// EMIT_MIR async_closure_shims.main-{closure#0}-{closure#0}-{closure#1}.built.after.mir
4848
// EMIT_MIR async_closure_shims.main-{closure#0}-{closure#1}.coroutine_closure_by_ref.0.mir
4949
// EMIT_MIR async_closure_shims.main-{closure#0}-{closure#1}.coroutine_closure_by_move.0.mir
5050
// EMIT_MIR async_closure_shims.main-{closure#0}-{closure#1}-{closure#0}.built.after.mir
51-
// EMIT_MIR async_closure_shims.main-{closure#0}-{closure#1}-{closure#0}-{closure#0}.built.after.mir
51+
// EMIT_MIR async_closure_shims.main-{closure#0}-{closure#1}-{closure#1}.built.after.mir
5252
pub fn main() {
5353
block_on(async {
5454
let b = 2i32;

0 commit comments

Comments
 (0)