Open
Description
I tried this code:
//@ edition:2021
// skip-filecheck
#![allow(unused)]
use std::future::Future;
use std::ops::{AsyncFn, AsyncFnMut, AsyncFnOnce};
use std::pin::pin;
use std::task::*;
pub fn block_on<T>(fut: impl Future<Output = T>) -> T {
let mut fut = pin!(fut);
let ctx = &mut Context::from_waker(Waker::noop());
loop {
match fut.as_mut().poll(ctx) {
Poll::Pending => {}
Poll::Ready(t) => break t,
}
}
}
async fn call(f: &impl AsyncFn(i32)) {
f(0).await;
}
async fn call_mut(f: &mut impl AsyncFnMut(i32)) {
f(0).await;
}
async fn call_once(f: impl AsyncFnOnce(i32)) {
f(1).await;
}
async fn call_normal<F: Future<Output = ()>>(f: &impl Fn(i32) -> F) {
f(1).await;
}
async fn call_normal_mut<F: Future<Output = ()>>(f: &mut impl FnMut(i32) -> F) {
f(1).await;
}
// EMIT_MIR async_closure_shims.main-{closure#0}-{closure#0}.coroutine_closure_by_move.0.mir
// EMIT_MIR async_closure_shims.main-{closure#0}-{closure#0}-{closure#0}.built.after.mir
// EMIT_MIR async_closure_shims.main-{closure#0}-{closure#0}-{synthetic#0}.built.after.mir
// EMIT_MIR async_closure_shims.main-{closure#0}-{closure#1}.coroutine_closure_by_ref.0.mir
// EMIT_MIR async_closure_shims.main-{closure#0}-{closure#1}.coroutine_closure_by_move.0.mir
// EMIT_MIR async_closure_shims.main-{closure#0}-{closure#1}-{closure#0}.built.after.mir
// EMIT_MIR async_closure_shims.main-{closure#0}-{closure#1}-{synthetic#0}.built.after.mir
pub fn main() {
block_on(async {
let b = 2i32;
let mut async_closure = async move |a: i32| {
let a = &a;
let b = &b;
};
call(&async_closure).await;
call_mut(&mut async_closure).await;
call_once(async_closure).await;
let b = 2i32;
let mut async_closure = async |a: i32| {
let a = &a;
let b = &b;
};
call_normal(&async_closure).await;
call_normal_mut(&mut async_closure).await;
call_once(async_closure).await;
});
}
`rustc async_closure_shims.rs -Zthreads=16 --edition=2021; md5sum async_closure_shims
I expected to see this happen: explanation
same md5 every time
Instead, this happened: explanation
different md5 from time to time
Meta
rustc --version --verbose
:
rustc 1.88.0-nightly (25cdf1f67 2025-04-28)
binary: rustc
commit-hash: 25cdf1f67463c9365d8d83778c933ec7480e940b
commit-date: 2025-04-28
host: x86_64-unknown-linux-gnu
release: 1.88.0-nightly
LLVM version: 20.1.2
Backtrace
--- /proc/self/fd/11 2025-04-29 06:44:18.100415395 +0200
+++ /proc/self/fd/12 2025-04-29 06:44:18.097415424 +0200
@@ -49,8 +49,8 @@
β000002f0β 78 38 36 2d 36 34 2e 73 β 6f 2e 32 00 04 00 00 00 βx86-64.sβo.2ββ’ββββ
β00000300β 10 00 00 00 01 00 00 00 β 47 4e 55 00 00 00 00 00 ββ’ββββ’ββββGNUββββββ
β00000310β 04 00 00 00 04 00 00 00 β 00 00 00 00 04 00 00 00 ββ’ββββ’βββββββββ’ββββ
-β00000320β 14 00 00 00 03 00 00 00 β 47 4e 55 00 67 24 f6 cd ββ’ββββ’ββββGNUβg$ΓΓβ
-β00000330β 69 dd 6a eb ff 37 f1 29 β 4d ef 35 87 ab c4 b5 26 βiΓjΓΓ7Γ)βMΓ5ΓΓΓΓ&β
+β00000320β 14 00 00 00 03 00 00 00 β 47 4e 55 00 d5 f4 67 b4 ββ’ββββ’ββββGNUβΓΓgΓβ
+β00000330β 2f 28 18 02 c7 8a a5 0a β 1d 7b 09 7b 4e 5c fa e1 β/(β’β’ΓΓΓ_ββ’{_{N\ΓΓβ
β00000340β 00 00 00 00 00 00 00 00 β 00 00 00 00 00 00 00 00 βββββββββββββββββββ
β00000350β 00 00 00 00 00 00 00 00 β 01 00 00 00 12 00 00 00 βββββββββββ’ββββ’ββββ
β00000360β 00 00 00 00 00 00 00 00 β 00 00 00 00 00 00 00 00 βββββββββββββββββββ
@@ -3787,9 +3787,9 @@
β0000ed20β e0 83 00 00 0e 00 00 00 β 00 00 00 00 18 00 00 00 βΓΓβββ’βββββββββ’ββββ
β0000ed30β 18 03 00 00 dc 83 00 00 β 53 00 00 00 00 44 0e 20 ββ’β’ββΓΓβββSββββDβ’ β
β0000ed40β 02 41 0e 08 41 0e 20 00 β 18 00 00 00 34 03 00 00 ββ’Aβ’β’Aβ’ βββ’βββ4β’βββ
-β0000ed50β 20 84 00 00 52 00 00 00 β 00 44 0e 20 02 40 0e 08 β ΓββRβββββDβ’ β’@β’β’β
+β0000ed50β 20 84 00 00 53 00 00 00 β 00 44 0e 20 02 41 0e 08 β ΓββSβββββDβ’ β’Aβ’β’β
β0000ed60β 41 0e 20 00 18 00 00 00 β 50 03 00 00 64 84 00 00 βAβ’ ββ’ββββPβ’ββdΓβββ
-β0000ed70β 53 00 00 00 00 44 0e 20 β 02 41 0e 08 41 0e 20 00 βSββββDβ’ ββ’Aβ’β’Aβ’ ββ
+β0000ed70β 52 00 00 00 00 44 0e 20 β 02 40 0e 08 41 0e 20 00 βRββββDβ’ ββ’@β’β’Aβ’ ββ
β0000ed80β 14 00 00 00 6c 03 00 00 β a8 84 00 00 17 00 00 00 ββ’βββlβ’βββΓΓβββ’ββββ
β0000ed90β 00 41 0e 10 55 0e 08 00 β 10 00 00 00 84 03 00 00 ββAβ’β’Uβ’β’βββ’βββΓβ’βββ
β0000eda0β b0 84 00 00 05 00 00 00 β 00 00 00 00 10 00 00 00 βΓΓβββ’βββββββββ’ββββ
@@ -5441,7 +5441,7 @@
β00015480β 0c 1f 04 00 48 8b 7c 24 β 28 48 83 c7 04 e8 5e f5 β_β’β’βHΓ|$β(HΓΓβ’Γ^Γβ
β00015490β ff ff e9 7a ff ff ff 48 β 89 c1 89 d0 48 89 4c 24 βΓΓΓzΓΓΓHβΓΓΓΓHΓL$β
β000154a0β 58 89 44 24 60 eb dd 48 β 8b 7c 24 10 48 8b 74 24 βXΓD$`ΓΓHβΓ|$β’HΓt$β
-β000154b0β 50 e8 ba 0c 00 00 88 44 β 24 0f eb 00 8a 44 24 0f βPΓΓ_ββΓDβ$β’ΓβΓD$β’β
+β000154b0β 50 e8 1a 0d 00 00 88 44 β 24 0f eb 00 8a 44 24 0f βPΓβ’_ββΓDβ$β’ΓβΓD$β’β
β000154c0β 24 01 0f b6 c0 48 a9 01 β 00 00 00 74 19 c6 44 24 β$β’β’ΓΓHΓβ’ββββtβ’ΓD$β
β000154d0β 37 01 48 8b 44 24 28 c6 β 40 10 03 8a 44 24 37 24 β7β’HΓD$(Γβ@β’β’ΓD$7$β
β000154e0β 01 48 83 c4 68 c3 48 8b β 7c 24 28 48 83 c7 04 e8 ββ’HΓΓhΓHΓβ|$(HΓΓβ’Γβ
@@ -5465,7 +5465,7 @@
β00015600β 00 ff 15 89 1d 04 00 48 β 8b 7c 24 20 48 83 c7 08 ββΓβ’Γβ’β’βHβΓ|$ HΓΓβ’β
β00015610β e8 eb f3 ff ff e9 78 ff β ff ff 48 89 c1 89 d0 48 βΓΓΓΓΓΓxΓβΓΓHΓΓΓΓHβ
β00015620β 89 4c 24 58 89 44 24 60 β eb dd 48 8b 7c 24 08 48 βΓL$XΓD$`βΓΓHΓ|$β’Hβ
-β00015630β 8b 74 24 50 e8 97 0b 00 β 00 88 44 24 07 eb 00 8a βΓt$PΓΓβ’βββΓD$β’ΓβΓβ
+β00015630β 8b 74 24 50 e8 37 0b 00 β 00 88 44 24 07 eb 00 8a βΓt$PΓ7β’βββΓD$β’ΓβΓβ
β00015640β 44 24 07 24 01 0f b6 c0 β 48 a9 01 00 00 00 74 19 βD$β’$β’β’ΓΓβHΓβ’βββtβ’β
β00015650β c6 44 24 2f 01 48 8b 44 β 24 20 c6 40 18 03 8a 44 βΓD$/β’HΓDβ$ Γ@β’β’ΓDβ
β00015660β 24 2f 24 01 48 83 c4 68 β c3 48 8b 7c 24 20 48 83 β$/$β’HΓΓhβΓHΓ|$ HΓβ
@@ -5490,7 +5490,7 @@
β00015790β 00 ff 15 f9 1b 04 00 48 β 8b 7c 24 20 48 83 c7 08 ββΓβ’Γβ’β’βHβΓ|$ HΓΓβ’β
β000157a0β e8 5b f2 ff ff e9 78 ff β ff ff 48 89 c1 89 d0 48 βΓ[ΓΓΓΓxΓβΓΓHΓΓΓΓHβ
β000157b0β 89 4c 24 58 89 44 24 60 β eb dd 48 8b 7c 24 08 48 βΓL$XΓD$`βΓΓHΓ|$β’Hβ
-β000157c0β 8b 74 24 50 e8 07 0a 00 β 00 88 44 24 07 eb 00 8a βΓt$PΓβ’_βββΓD$β’ΓβΓβ
+β000157c0β 8b 74 24 50 e8 a7 09 00 β 00 88 44 24 07 eb 00 8a βΓt$PΓΓ_βββΓD$β’ΓβΓβ
β000157d0β 44 24 07 24 01 0f b6 c0 β 48 a9 01 00 00 00 74 19 βD$β’$β’β’ΓΓβHΓβ’βββtβ’β
β000157e0β c6 44 24 2f 01 48 8b 44 β 24 20 c6 40 18 03 8a 44 βΓD$/β’HΓDβ$ Γ@β’β’ΓDβ
β000157f0β 24 2f 24 01 48 83 c4 68 β c3 48 8b 7c 24 20 48 83 β$/$β’HΓΓhβΓHΓ|$ HΓβ
@@ -5515,7 +5515,7 @@
β00015920β 00 ff 15 69 1a 04 00 48 β 8b 7c 24 20 48 83 c7 08 ββΓβ’iβ’β’βHβΓ|$ HΓΓβ’β
β00015930β e8 cb f0 ff ff e9 78 ff β ff ff 48 89 c1 89 d0 48 βΓΓΓΓΓΓxΓβΓΓHΓΓΓΓHβ
β00015940β 89 4c 24 58 89 44 24 60 β eb dd 48 8b 7c 24 08 48 βΓL$XΓD$`βΓΓHΓ|$β’Hβ
-β00015950β 8b 74 24 50 e8 77 08 00 β 00 88 44 24 07 eb 00 8a βΓt$PΓwβ’βββΓD$β’ΓβΓβ
+β00015950β 8b 74 24 50 e8 17 08 00 β 00 88 44 24 07 eb 00 8a βΓt$PΓβ’β’βββΓD$β’ΓβΓβ
β00015960β 44 24 07 24 01 0f b6 c0 β 48 a9 01 00 00 00 74 19 βD$β’$β’β’ΓΓβHΓβ’βββtβ’β
β00015970β c6 44 24 2f 01 48 8b 44 β 24 20 c6 40 18 03 8a 44 βΓD$/β’HΓDβ$ Γ@β’β’ΓDβ
β00015980β 24 2f 24 01 48 83 c4 68 β c3 48 8b 7c 24 20 48 83 β$/$β’HΓΓhβΓHΓ|$ HΓβ
@@ -5646,17 +5646,17 @@
β00016150β 01 48 83 c4 18 c3 48 8d β 3d 2b ea 03 00 ff 15 25 ββ’HΓΓβ’ΓHΓβ=+Γβ’βΓβ’%β
β00016160β 12 04 00 cc cc cc cc cc β cc cc cc cc cc cc cc cc ββ’β’βΓΓΓΓΓβΓΓΓΓΓΓΓΓβ
β00016170β 48 83 ec 18 48 89 7c 24 β 08 48 8b 44 24 08 0f b6 βHΓΓβ’HΓ|$ββ’HΓD$β’β’Γβ
-β00016180β 40 08 a9 01 00 00 00 74 β 08 31 c0 a8 01 75 fa eb β@β’Γβ’βββtββ’1ΓΓβ’uΓΓβ
-β00016190β 24 48 8b 44 24 08 8b 00 β 89 44 24 14 c6 44 24 13 β$HΓD$β’ΓββΓD$β’ΓD$β’β
-β000161a0β 00 48 8b 44 24 08 c6 40 β 08 01 8a 44 24 13 24 01 ββHΓD$β’Γ@ββ’β’ΓD$β’$β’β
-β000161b0β 48 83 c4 18 c3 48 8d 3d β cc e9 03 00 ff 15 c6 11 βHΓΓβ’ΓHΓ=βΓΓβ’βΓβ’Γβ’β
-β000161c0β 04 00 cc cc cc cc cc cc β cc cc cc cc cc cc cc cc ββ’βΓΓΓΓΓΓβΓΓΓΓΓΓΓΓβ
+β00016180β 40 0c a9 01 00 00 00 74 β 08 31 c0 a8 01 75 fa eb β@_Γβ’βββtββ’1ΓΓβ’uΓΓβ
+β00016190β 25 48 8b 44 24 08 8b 40 β 08 89 44 24 14 c6 44 24 β%HΓD$β’Γ@ββ’ΓD$β’ΓD$β
+β000161a0β 13 00 48 8b 44 24 08 c6 β 40 0c 01 8a 44 24 13 24 ββ’βHΓD$β’Γβ@_β’ΓD$β’$β
+β000161b0β 01 48 83 c4 18 c3 48 8d β 3d e3 e9 03 00 ff 15 c5 ββ’HΓΓβ’ΓHΓβ=ΓΓβ’βΓβ’Γβ
+β000161c0β 11 04 00 cc cc cc cc cc β cc cc cc cc cc cc cc cc ββ’β’βΓΓΓΓΓβΓΓΓΓΓΓΓΓβ
β000161d0β 48 83 ec 18 48 89 7c 24 β 08 48 8b 44 24 08 0f b6 βHΓΓβ’HΓ|$ββ’HΓD$β’β’Γβ
-β000161e0β 40 0c a9 01 00 00 00 74 β 08 31 c0 a8 01 75 fa eb β@_Γβ’βββtββ’1ΓΓβ’uΓΓβ
-β000161f0β 25 48 8b 44 24 08 8b 40 β 08 89 44 24 14 c6 44 24 β%HΓD$β’Γ@ββ’ΓD$β’ΓD$β
-β00016200β 13 00 48 8b 44 24 08 c6 β 40 0c 01 8a 44 24 13 24 ββ’βHΓD$β’Γβ@_β’ΓD$β’$β
-β00016210β 01 48 83 c4 18 c3 48 8d β 3d 83 e9 03 00 ff 15 65 ββ’HΓΓβ’ΓHΓβ=ΓΓβ’βΓβ’eβ
-β00016220β 11 04 00 cc cc cc cc cc β cc cc cc cc cc cc cc cc ββ’β’βΓΓΓΓΓβΓΓΓΓΓΓΓΓβ
+β000161e0β 40 08 a9 01 00 00 00 74 β 08 31 c0 a8 01 75 fa eb β@β’Γβ’βββtββ’1ΓΓβ’uΓΓβ
+β000161f0β 24 48 8b 44 24 08 8b 00 β 89 44 24 14 c6 44 24 13 β$HΓD$β’ΓββΓD$β’ΓD$β’β
+β00016200β 00 48 8b 44 24 08 c6 40 β 08 01 8a 44 24 13 24 01 ββHΓD$β’Γ@ββ’β’ΓD$β’$β’β
+β00016210β 48 83 c4 18 c3 48 8d 3d β 6c e9 03 00 ff 15 66 11 βHΓΓβ’ΓHΓ=βlΓβ’βΓβ’fβ’β
+β00016220β 04 00 cc cc cc cc cc cc β cc cc cc cc cc cc cc cc ββ’βΓΓΓΓΓΓβΓΓΓΓΓΓΓΓβ
β00016230β 50 48 89 f2 48 63 f7 48 β 8d 3d 82 f7 ff ff 31 c9 βPHΓΓHcΓHβΓ=ΓΓΓΓ1Γβ
β00016240β e8 cb e5 ff ff 59 c3 cc β cc cc cc cc cc cc cc cc βΓΓΓΓΓYΓΓβΓΓΓΓΓΓΓΓβ
β00016250β e9 9b fa 01 00 cc cc cc β cc cc cc cc cc cc cc cc βΓΓΓβ’βΓΓΓβΓΓΓΓΓΓΓΓβ
@@ -226718,12 +226718,12 @@
β00376e60β 5f 16 00 00 02 00 0f 00 β 90 63 01 00 00 00 00 00 β_β’βββ’ββ’ββΓcβ’ββββββ
β00376e70β 0b 00 00 00 00 00 00 00 β 96 16 00 00 02 00 0f 00 ββ’ββββββββΓβ’βββ’ββ’ββ
β00376e80β a0 63 01 00 00 00 00 00 β 75 01 00 00 00 00 00 00 βΓcβ’ββββββuβ’βββββββ
-β00376e90β eb 16 00 00 02 00 0f 00 β 70 71 01 00 00 00 00 00 βΓβ’βββ’ββ’ββpqβ’ββββββ
+β00376e90β eb 16 00 00 02 00 0f 00 β d0 71 01 00 00 00 00 00 βΓβ’βββ’ββ’ββΓqβ’ββββββ
β00376ea0β 52 00 00 00 00 00 00 00 β 79 17 00 00 00 00 0b 00 βRββββββββyβ’βββββ’ββ
β00376eb0β 70 5b 00 00 00 00 00 00 β 00 00 00 00 00 00 00 00 βp[ββββββββββββββββ
β00376ec0β 8c 17 00 00 02 00 0f 00 β 20 65 01 00 00 00 00 00 βΓβ’βββ’ββ’ββ eβ’ββββββ
β00376ed0β 78 01 00 00 00 00 00 00 β e1 17 00 00 02 00 0f 00 βxβ’βββββββΓβ’βββ’ββ’ββ
-β00376ee0β d0 71 01 00 00 00 00 00 β 53 00 00 00 00 00 00 00 βΓqβ’ββββββSββββββββ
+β00376ee0β 70 71 01 00 00 00 00 00 β 53 00 00 00 00 00 00 00 βpqβ’ββββββSββββββββ
β00376ef0β 6f 18 00 00 00 00 0b 00 β a4 5b 00 00 00 00 00 00 βoβ’βββββ’ββΓ[βββββββ
β00376f00β 00 00 00 00 00 00 00 00 β 82 18 00 00 02 00 0f 00 ββββββββββΓβ’βββ’ββ’ββ
β00376f10β a0 66 01 00 00 00 00 00 β 0b 00 00 00 00 00 00 00 βΓfβ’βββββββ’ββββββββ