Open
Description
auto-reduced (treereduce-rust):
//@compile-flags: --edition=2024 -Zlint-mir
#![feature(async_drop)]
use std::{
future::{async_drop_in_place, AsyncDrop, Future},
pin::{pin, Pin},
sync::{mpsc, Arc},
task::{Context, Poll, Wake, Waker},
};
struct Foo {
my_resource_handle: usize,
}
impl Foo {
fn new(my_resource_handle: usize) -> Self {
let out = Foo { my_resource_handle };
out
}
}
impl Drop for Foo {
fn drop(&mut self) {}
}
impl AsyncDrop for Foo {
async fn drop(self: Pin<&mut Self>) {}
}
fn main() {}
async fn bar(ident_base: usize) {
let _vec: [Foo; 4] = [
Foo::new(ident_base),
Foo::new(ident_base + 1),
Foo::new(ident_base + 2),
Foo::new(ident_base + 3),
];
}
original code
original:
//@ run-pass
//@ check-run-results
// struct `Foo` has both sync and async drop.
// Struct `Complex` contains three `Foo` fields and has complex async drop glue.
#![feature(async_drop)]
#![allow(incomplete_features)]
use std::mem::ManuallyDrop;
//@ edition: 2021
#[inline(never)]
fn myprintln(msg: &str, my_resource_handle: usize) {
println!("{} : {}", msg, my_resource_handle);
}
use std::{
future::{Future, async_drop_in_place, AsyncDrop},
pin::{pin, Pin},
sync::{mpsc, Arc},
task::{Context, Poll, Wake, Waker},
};
struct Foo {
my_resource_handle: usize,
}
impl Foo {
fn new(my_resource_handle: usize) -> Self {
let out = Foo {
my_resource_handle,
};
myprintln("{} : {}", my_resource_handle);
out
}
}
impl Drop for Foo {
fn drop(&mut self) {
myprintln("Foo::drop()", self.my_resource_handle);
}
}
impl AsyncDrop for Foo {
async fn drop(self: Pin<&mut Self>) {
myprintln("Foo::async drop()", self.my_resource_handle);
}
}
fn main() {
{
let _ = Foo::new(7);
}
println!("Middle");
{
block_on(bar(10));
}
println!("Done")
}
async fn bar(ident_base: usize) {
let _vec: [Foo; 4] = [
Foo::new(ident_base),
Foo::new(ident_base + 1),
Foo::new(ident_base + 2),
Foo::new(ident_base + 3)
];
}
fn block_on<F>(fut_unpin: F) -> F::Output
where
F: Future,
{
let mut fut_pin = pin!(ManuallyDrop::new(fut_unpin));
let mut fut: Pin<&mut F> = unsafe {
Pin::map_unchecked_mut(fut_pin.as_mut(), |x| &mut **x)
};
let (waker, rx) = simple_waker();
let mut context = Context::from_waker(&waker);
let rv = loop {
match fut.as_mut().poll(&mut context) {
Poll::Ready(out) => break out,
// expect wake in polls
Poll::Pending => rx.try_recv().unwrap(),
}
};
let drop_fut_unpin = unsafe { async_drop_in_place(fut.get_unchecked_mut()) };
let mut drop_fut: Pin<&mut _> = pin!(drop_fut_unpin);
loop {
match drop_fut.as_mut().poll(&mut context) {
Poll::Ready(()) => break,
Poll::Pending => rx.try_recv().unwrap(),
}
}
rv
}
fn simple_waker() -> (Waker, mpsc::Receiver<()>) {
struct SimpleWaker {
tx: std::sync::mpsc::Sender<()>,
}
impl Wake for SimpleWaker {
fn wake(self: Arc<Self>) {
self.tx.send(()).unwrap();
}
}
let (tx, rx) = mpsc::channel();
(Waker::from(Arc::new(SimpleWaker { tx })), rx)
}
Version information
rustc 1.89.0-nightly (e314b97ee 2025-06-16)
binary: rustc
commit-hash: e314b97ee54091b6bcf33db4770c93d82fded8bc
commit-date: 2025-06-16
host: x86_64-unknown-linux-gnu
release: 1.89.0-nightly
LLVM version: 20.1.5
Command:
/home/matthias/.rustup/toolchains/master/bin/rustc --edition=2024 -Zlint-mir
Program output
warning: the feature `async_drop` is incomplete and may not be safe to use and/or cause compiler crashes
--> /tmp/icemaker_global_tempdir.bKTOtfhuUm9A/rustc_testrunner_tmpdir_reporting.BhA5t2N8nShp/mvce.rs:1:12
|
1 | #![feature(async_drop)]
| ^^^^^^^^^^
|
= note: see issue #126482 <https://github.com/rust-lang/rust/issues/126482> for more information
= note: `#[warn(incomplete_features)]` on by default
warning: unused imports: `Arc`, `Context`, `Future`, `Poll`, `Wake`, `Waker`, `async_drop_in_place`, `mpsc`, and `pin`
--> /tmp/icemaker_global_tempdir.bKTOtfhuUm9A/rustc_testrunner_tmpdir_reporting.BhA5t2N8nShp/mvce.rs:4:14
|
4 | future::{async_drop_in_place, AsyncDrop, Future},
| ^^^^^^^^^^^^^^^^^^^ ^^^^^^
5 | pin::{pin, Pin},
| ^^^
6 | sync::{mpsc, Arc},
| ^^^^ ^^^
7 | task::{Context, Poll, Wake, Waker},
| ^^^^^^^ ^^^^ ^^^^ ^^^^^
|
= note: `#[warn(unused_imports)]` on by default
warning: field `my_resource_handle` is never read
--> /tmp/icemaker_global_tempdir.bKTOtfhuUm9A/rustc_testrunner_tmpdir_reporting.BhA5t2N8nShp/mvce.rs:11:5
|
10 | struct Foo {
| --- field in this struct
11 | my_resource_handle: usize,
| ^^^^^^^^^^^^^^^^^^
|
= note: `#[warn(dead_code)]` on by default
warning: associated function `new` is never used
--> /tmp/icemaker_global_tempdir.bKTOtfhuUm9A/rustc_testrunner_tmpdir_reporting.BhA5t2N8nShp/mvce.rs:15:8
|
14 | impl Foo {
| -------- associated function in this implementation
15 | fn new(my_resource_handle: usize) -> Self {
| ^^^
warning: function `bar` is never used
--> /tmp/icemaker_global_tempdir.bKTOtfhuUm9A/rustc_testrunner_tmpdir_reporting.BhA5t2N8nShp/mvce.rs:32:10
|
32 | async fn bar(ident_base: usize) {
| ^^^
warning: 5 warnings emitted
note: no errors encountered even though delayed bugs were created
note: those delayed bugs will now be shown as internal compiler errors
error: internal compiler error: broken MIR in AsyncDropGlue(DefId(2:15416 ~ core[0a08]::future::async_drop::async_drop_in_place::{closure#0}), Coroutine(DefId(2:15416 ~ core[0a08]::future::async_drop::async_drop_in_place::{closure#0}), [[Foo; 4_usize], (), std::future::ResumeTy, (), (), CoroutineWitness(DefId(2:15416 ~ core[0a08]::future::async_drop::async_drop_in_place::{closure#0}), [[Foo; 4_usize]]), (*mut [Foo; 4_usize],)])) (after pass MentionedItems) at bb12[2]:
StorageLive(_19) which already has storage here
--> /home/matthias/.rustup/toolchains/master/lib/rustlib/src/rust/library/core/src/future/async_drop.rs:46:70
|
46 | pub async unsafe fn async_drop_in_place<T: ?Sized>(_to_drop: *mut T) {
| ______________________________________________________________________^
... |
49 | | }
| |_^
|
note: delayed at compiler/rustc_mir_transform/src/lint.rs:96:26
0: <rustc_errors::DiagCtxtInner>::emit_diagnostic
1: <rustc_errors::DiagCtxtHandle>::emit_diagnostic
2: <rustc_span::ErrorGuaranteed as rustc_errors::diagnostic::EmissionGuarantee>::emit_producing_guarantee
3: <rustc_errors::DiagCtxtHandle>::span_delayed_bug::<rustc_span::span_encoding::Span, alloc::string::String>
4: <rustc_mir_transform::lint::Lint>::fail::<alloc::string::String>
5: <rustc_mir_transform::lint::Lint as rustc_middle::mir::visit::Visitor>::visit_statement
6: rustc_mir_transform::lint::lint_body
7: rustc_mir_transform::pass_manager::run_passes_inner
8: rustc_mir_transform::shim::make_shim
9: rustc_query_impl::plumbing::__rust_begin_short_backtrace::<rustc_query_impl::query_impl::mir_shims::dynamic_query::{closure#2}::{closure#0}, rustc_middle::query::erase::Erased<[u8; 8]>>
10: <rustc_query_impl::query_impl::mir_shims::dynamic_query::{closure#2} as core::ops::function::FnOnce<(rustc_middle::ty::context::TyCtxt, rustc_middle::ty::instance::InstanceKind)>>::call_once
11: rustc_query_system::query::plumbing::try_execute_query::<rustc_query_impl::DynamicConfig<rustc_query_system::query::caches::DefaultCache<rustc_middle::ty::instance::InstanceKind, rustc_middle::query::erase::Erased<[u8; 8]>>, false, false, false>, rustc_query_impl::plumbing::QueryCtxt, false>
12: rustc_query_impl::query_impl::mir_shims::get_query_non_incr::__rust_end_short_backtrace
13: <rustc_middle::ty::context::TyCtxt>::coroutine_layout
14: rustc_ty_utils::layout::layout_of_uncached
15: rustc_ty_utils::layout::layout_of
16: rustc_query_impl::plumbing::__rust_begin_short_backtrace::<rustc_query_impl::query_impl::layout_of::dynamic_query::{closure#2}::{closure#0}, rustc_middle::query::erase::Erased<[u8; 16]>>
17: rustc_query_system::query::plumbing::try_execute_query::<rustc_query_impl::DynamicConfig<rustc_query_system::query::caches::DefaultCache<rustc_middle::ty::PseudoCanonicalInput<rustc_middle::ty::Ty>, rustc_middle::query::erase::Erased<[u8; 16]>>, false, true, false>, rustc_query_impl::plumbing::QueryCtxt, false>
18: rustc_query_impl::query_impl::layout_of::get_query_non_incr::__rust_end_short_backtrace
19: rustc_ty_utils::layout::layout_of_uncached
20: rustc_ty_utils::layout::layout_of
21: rustc_query_impl::plumbing::__rust_begin_short_backtrace::<rustc_query_impl::query_impl::layout_of::dynamic_query::{closure#2}::{closure#0}, rustc_middle::query::erase::Erased<[u8; 16]>>
22: rustc_query_system::query::plumbing::try_execute_query::<rustc_query_impl::DynamicConfig<rustc_query_system::query::caches::DefaultCache<rustc_middle::ty::PseudoCanonicalInput<rustc_middle::ty::Ty>, rustc_middle::query::erase::Erased<[u8; 16]>>, false, true, false>, rustc_query_impl::plumbing::QueryCtxt, false>
23: rustc_query_impl::query_impl::layout_of::get_query_non_incr::__rust_end_short_backtrace
24: rustc_ty_utils::layout::layout_of_uncached
25: rustc_ty_utils::layout::layout_of
26: rustc_query_impl::plumbing::__rust_begin_short_backtrace::<rustc_query_impl::query_impl::layout_of::dynamic_query::{closure#2}::{closure#0}, rustc_middle::query::erase::Erased<[u8; 16]>>
27: rustc_query_system::query::plumbing::try_execute_query::<rustc_query_impl::DynamicConfig<rustc_query_system::query::caches::DefaultCache<rustc_middle::ty::PseudoCanonicalInput<rustc_middle::ty::Ty>, rustc_middle::query::erase::Erased<[u8; 16]>>, false, true, false>, rustc_query_impl::plumbing::QueryCtxt, false>
28: rustc_query_impl::query_impl::layout_of::get_query_non_incr::__rust_end_short_backtrace
29: rustc_ty_utils::layout::layout_of
30: rustc_query_impl::plumbing::__rust_begin_short_backtrace::<rustc_query_impl::query_impl::layout_of::dynamic_query::{closure#2}::{closure#0}, rustc_middle::query::erase::Erased<[u8; 16]>>
31: rustc_query_system::query::plumbing::try_execute_query::<rustc_query_impl::DynamicConfig<rustc_query_system::query::caches::DefaultCache<rustc_middle::ty::PseudoCanonicalInput<rustc_middle::ty::Ty>, rustc_middle::query::erase::Erased<[u8; 16]>>, false, true, false>, rustc_query_impl::plumbing::QueryCtxt, false>
32: rustc_query_impl::query_impl::layout_of::get_query_non_incr::__rust_end_short_backtrace
33: <rustc_middle::ty::layout::LayoutCx as rustc_middle::ty::layout::LayoutOf>::spanned_layout_of
34: <core::iter::adapters::GenericShunt<core::iter::adapters::by_ref_sized::ByRefSized<core::iter::adapters::map::Map<core::slice::iter::Iter<rustc_middle::mir::query::CoroutineSavedTy>, rustc_ty_utils::layout::layout_of_uncached::{closure#12}>>, core::result::Result<core::convert::Infallible, &rustc_middle::ty::layout::LayoutError>> as core::iter::traits::iterator::Iterator>::next
35: core::iter::adapters::try_process::<core::iter::adapters::by_ref_sized::ByRefSized<core::iter::adapters::map::Map<core::slice::iter::Iter<rustc_middle::mir::query::CoroutineSavedTy>, rustc_ty_utils::layout::layout_of_uncached::{closure#12}>>, rustc_abi::layout::ty::TyAndLayout<rustc_middle::ty::Ty>, core::result::Result<core::convert::Infallible, &rustc_middle::ty::layout::LayoutError>, <core::iter::adapters::map::Map<core::slice::iter::Iter<rustc_middle::mir::query::CoroutineSavedTy>, rustc_ty_utils::layout::layout_of_uncached::{closure#12}> as core::iter::traits::iterator::Iterator>::try_collect<rustc_index::vec::IndexVec<rustc_middle::mir::query::CoroutineSavedLocal, rustc_abi::layout::ty::TyAndLayout<rustc_middle::ty::Ty>>>::{closure#0}, rustc_index::vec::IndexVec<rustc_middle::mir::query::CoroutineSavedLocal, rustc_abi::layout::ty::TyAndLayout<rustc_middle::ty::Ty>>>
36: rustc_ty_utils::layout::layout_of_uncached
37: rustc_ty_utils::layout::layout_of
38: rustc_query_impl::plumbing::__rust_begin_short_backtrace::<rustc_query_impl::query_impl::layout_of::dynamic_query::{closure#2}::{closure#0}, rustc_middle::query::erase::Erased<[u8; 16]>>
39: rustc_query_system::query::plumbing::try_execute_query::<rustc_query_impl::DynamicConfig<rustc_query_system::query::caches::DefaultCache<rustc_middle::ty::PseudoCanonicalInput<rustc_middle::ty::Ty>, rustc_middle::query::erase::Erased<[u8; 16]>>, false, true, false>, rustc_query_impl::plumbing::QueryCtxt, false>
40: rustc_query_impl::query_impl::layout_of::get_query_non_incr::__rust_end_short_backtrace
41: <rustc_mir_transform::known_panics_lint::KnownPanicsLint as rustc_mir_transform::pass_manager::MirLint>::run_lint
42: rustc_mir_transform::run_analysis_to_runtime_passes
43: rustc_mir_transform::mir_drops_elaborated_and_const_checked
44: rustc_query_impl::plumbing::__rust_begin_short_backtrace::<rustc_query_impl::query_impl::mir_drops_elaborated_and_const_checked::dynamic_query::{closure#2}::{closure#0}, rustc_middle::query::erase::Erased<[u8; 8]>>
45: rustc_query_system::query::plumbing::try_execute_query::<rustc_query_impl::DynamicConfig<rustc_data_structures::vec_cache::VecCache<rustc_span::def_id::LocalDefId, rustc_middle::query::erase::Erased<[u8; 8]>, rustc_query_system::dep_graph::graph::DepNodeIndex>, false, false, false>, rustc_query_impl::plumbing::QueryCtxt, false>
46: rustc_query_impl::query_impl::mir_drops_elaborated_and_const_checked::get_query_non_incr::__rust_end_short_backtrace
47: <rustc_middle::ty::context::TyCtxt>::par_hir_body_owners::<rustc_interface::passes::run_required_analyses::{closure#1}::{closure#0}>::{closure#0}
48: rustc_interface::passes::analysis
49: rustc_query_impl::plumbing::__rust_begin_short_backtrace::<rustc_query_impl::query_impl::analysis::dynamic_query::{closure#2}::{closure#0}, rustc_middle::query::erase::Erased<[u8; 0]>>
50: rustc_query_system::query::plumbing::try_execute_query::<rustc_query_impl::DynamicConfig<rustc_query_system::query::caches::SingleCache<rustc_middle::query::erase::Erased<[u8; 0]>>, false, false, false>, rustc_query_impl::plumbing::QueryCtxt, false>
51: rustc_query_impl::query_impl::analysis::get_query_non_incr::__rust_end_short_backtrace
52: rustc_interface::passes::create_and_enter_global_ctxt::<core::option::Option<rustc_interface::queries::Linker>, rustc_driver_impl::run_compiler::{closure#0}::{closure#2}>::{closure#2}::{closure#0}
53: rustc_interface::interface::run_compiler::<(), rustc_driver_impl::run_compiler::{closure#0}>::{closure#1}
54: std::sys::backtrace::__rust_begin_short_backtrace::<rustc_interface::util::run_in_thread_with_globals<rustc_interface::util::run_in_thread_pool_with_globals<rustc_interface::interface::run_compiler<(), rustc_driver_impl::run_compiler::{closure#0}>::{closure#1}, ()>::{closure#0}, ()>::{closure#0}::{closure#0}, ()>
55: <<std::thread::Builder>::spawn_unchecked_<rustc_interface::util::run_in_thread_with_globals<rustc_interface::util::run_in_thread_pool_with_globals<rustc_interface::interface::run_compiler<(), rustc_driver_impl::run_compiler::{closure#0}>::{closure#1}, ()>::{closure#0}, ()>::{closure#0}::{closure#0}, ()>::{closure#1} as core::ops::function::FnOnce<()>>::call_once::{shim:vtable#0}
56: std::sys::pal::unix::thread::Thread::new::thread_start
57: <unknown>
58: <unknown>
--> /home/matthias/.rustup/toolchains/master/lib/rustlib/src/rust/library/core/src/future/async_drop.rs:46:70
|
46 | pub async unsafe fn async_drop_in_place<T: ?Sized>(_to_drop: *mut T) {
| ______________________________________________________________________^
... |
49 | | }
| |_^
error: internal compiler error: broken MIR in AsyncDropGlue(DefId(2:15416 ~ core[0a08]::future::async_drop::async_drop_in_place::{closure#0}), Coroutine(DefId(2:15416 ~ core[0a08]::future::async_drop::async_drop_in_place::{closure#0}), [[Foo; 4_usize], (), std::future::ResumeTy, (), (), CoroutineWitness(DefId(2:15416 ~ core[0a08]::future::async_drop::async_drop_in_place::{closure#0}), [[Foo; 4_usize]]), (*mut [Foo; 4_usize],)])) (after pass MentionedItems) at bb8[2]:
StorageLive(_12) which already has storage here
--> /home/matthias/.rustup/toolchains/master/lib/rustlib/src/rust/library/core/src/future/async_drop.rs:46:70
|
46 | pub async unsafe fn async_drop_in_place<T: ?Sized>(_to_drop: *mut T) {
| ______________________________________________________________________^
... |
49 | | }
| |_^
|
note: delayed at compiler/rustc_mir_transform/src/lint.rs:96:26
0: <rustc_errors::DiagCtxtInner>::emit_diagnostic
1: <rustc_errors::DiagCtxtHandle>::emit_diagnostic
2: <rustc_span::ErrorGuaranteed as rustc_errors::diagnostic::EmissionGuarantee>::emit_producing_guarantee
3: <rustc_errors::DiagCtxtHandle>::span_delayed_bug::<rustc_span::span_encoding::Span, alloc::string::String>
4: <rustc_mir_transform::lint::Lint>::fail::<alloc::string::String>
5: <rustc_mir_transform::lint::Lint as rustc_middle::mir::visit::Visitor>::visit_statement
6: rustc_mir_transform::lint::lint_body
7: rustc_mir_transform::pass_manager::run_passes_inner
8: rustc_mir_transform::shim::make_shim
9: rustc_query_impl::plumbing::__rust_begin_short_backtrace::<rustc_query_impl::query_impl::mir_shims::dynamic_query::{closure#2}::{closure#0}, rustc_middle::query::erase::Erased<[u8; 8]>>
10: <rustc_query_impl::query_impl::mir_shims::dynamic_query::{closure#2} as core::ops::function::FnOnce<(rustc_middle::ty::context::TyCtxt, rustc_middle::ty::instance::InstanceKind)>>::call_once
11: rustc_query_system::query::plumbing::try_execute_query::<rustc_query_impl::DynamicConfig<rustc_query_system::query::caches::DefaultCache<rustc_middle::ty::instance::InstanceKind, rustc_middle::query::erase::Erased<[u8; 8]>>, false, false, false>, rustc_query_impl::plumbing::QueryCtxt, false>
12: rustc_query_impl::query_impl::mir_shims::get_query_non_incr::__rust_end_short_backtrace
13: <rustc_middle::ty::context::TyCtxt>::coroutine_layout
14: rustc_ty_utils::layout::layout_of_uncached
15: rustc_ty_utils::layout::layout_of
16: rustc_query_impl::plumbing::__rust_begin_short_backtrace::<rustc_query_impl::query_impl::layout_of::dynamic_query::{closure#2}::{closure#0}, rustc_middle::query::erase::Erased<[u8; 16]>>
17: rustc_query_system::query::plumbing::try_execute_query::<rustc_query_impl::DynamicConfig<rustc_query_system::query::caches::DefaultCache<rustc_middle::ty::PseudoCanonicalInput<rustc_middle::ty::Ty>, rustc_middle::query::erase::Erased<[u8; 16]>>, false, true, false>, rustc_query_impl::plumbing::QueryCtxt, false>
18: rustc_query_impl::query_impl::layout_of::get_query_non_incr::__rust_end_short_backtrace
19: rustc_ty_utils::layout::layout_of_uncached
20: rustc_ty_utils::layout::layout_of
21: rustc_query_impl::plumbing::__rust_begin_short_backtrace::<rustc_query_impl::query_impl::layout_of::dynamic_query::{closure#2}::{closure#0}, rustc_middle::query::erase::Erased<[u8; 16]>>
22: rustc_query_system::query::plumbing::try_execute_query::<rustc_query_impl::DynamicConfig<rustc_query_system::query::caches::DefaultCache<rustc_middle::ty::PseudoCanonicalInput<rustc_middle::ty::Ty>, rustc_middle::query::erase::Erased<[u8; 16]>>, false, true, false>, rustc_query_impl::plumbing::QueryCtxt, false>
23: rustc_query_impl::query_impl::layout_of::get_query_non_incr::__rust_end_short_backtrace
24: rustc_ty_utils::layout::layout_of_uncached
25: rustc_ty_utils::layout::layout_of
26: rustc_query_impl::plumbing::__rust_begin_short_backtrace::<rustc_query_impl::query_impl::layout_of::dynamic_query::{closure#2}::{closure#0}, rustc_middle::query::erase::Erased<[u8; 16]>>
27: rustc_query_system::query::plumbing::try_execute_query::<rustc_query_impl::DynamicConfig<rustc_query_system::query::caches::DefaultCache<rustc_middle::ty::PseudoCanonicalInput<rustc_middle::ty::Ty>, rustc_middle::query::erase::Erased<[u8; 16]>>, false, true, false>, rustc_query_impl::plumbing::QueryCtxt, false>
28: rustc_query_impl::query_impl::layout_of::get_query_non_incr::__rust_end_short_backtrace
29: rustc_ty_utils::layout::layout_of
30: rustc_query_impl::plumbing::__rust_begin_short_backtrace::<rustc_query_impl::query_impl::layout_of::dynamic_query::{closure#2}::{closure#0}, rustc_middle::query::erase::Erased<[u8; 16]>>
31: rustc_query_system::query::plumbing::try_execute_query::<rustc_query_impl::DynamicConfig<rustc_query_system::query::caches::DefaultCache<rustc_middle::ty::PseudoCanonicalInput<rustc_middle::ty::Ty>, rustc_middle::query::erase::Erased<[u8; 16]>>, false, true, false>, rustc_query_impl::plumbing::QueryCtxt, false>
32: rustc_query_impl::query_impl::layout_of::get_query_non_incr::__rust_end_short_backtrace
33: <rustc_middle::ty::layout::LayoutCx as rustc_middle::ty::layout::LayoutOf>::spanned_layout_of
34: <core::iter::adapters::GenericShunt<core::iter::adapters::by_ref_sized::ByRefSized<core::iter::adapters::map::Map<core::slice::iter::Iter<rustc_middle::mir::query::CoroutineSavedTy>, rustc_ty_utils::layout::layout_of_uncached::{closure#12}>>, core::result::Result<core::convert::Infallible, &rustc_middle::ty::layout::LayoutError>> as core::iter::traits::iterator::Iterator>::next
35: core::iter::adapters::try_process::<core::iter::adapters::by_ref_sized::ByRefSized<core::iter::adapters::map::Map<core::slice::iter::Iter<rustc_middle::mir::query::CoroutineSavedTy>, rustc_ty_utils::layout::layout_of_uncached::{closure#12}>>, rustc_abi::layout::ty::TyAndLayout<rustc_middle::ty::Ty>, core::result::Result<core::convert::Infallible, &rustc_middle::ty::layout::LayoutError>, <core::iter::adapters::map::Map<core::slice::iter::Iter<rustc_middle::mir::query::CoroutineSavedTy>, rustc_ty_utils::layout::layout_of_uncached::{closure#12}> as core::iter::traits::iterator::Iterator>::try_collect<rustc_index::vec::IndexVec<rustc_middle::mir::query::CoroutineSavedLocal, rustc_abi::layout::ty::TyAndLayout<rustc_middle::ty::Ty>>>::{closure#0}, rustc_index::vec::IndexVec<rustc_middle::mir::query::CoroutineSavedLocal, rustc_abi::layout::ty::TyAndLayout<rustc_middle::ty::Ty>>>
36: rustc_ty_utils::layout::layout_of_uncached
37: rustc_ty_utils::layout::layout_of
38: rustc_query_impl::plumbing::__rust_begin_short_backtrace::<rustc_query_impl::query_impl::layout_of::dynamic_query::{closure#2}::{closure#0}, rustc_middle::query::erase::Erased<[u8; 16]>>
39: rustc_query_system::query::plumbing::try_execute_query::<rustc_query_impl::DynamicConfig<rustc_query_system::query::caches::DefaultCache<rustc_middle::ty::PseudoCanonicalInput<rustc_middle::ty::Ty>, rustc_middle::query::erase::Erased<[u8; 16]>>, false, true, false>, rustc_query_impl::plumbing::QueryCtxt, false>
40: rustc_query_impl::query_impl::layout_of::get_query_non_incr::__rust_end_short_backtrace
41: <rustc_mir_transform::known_panics_lint::KnownPanicsLint as rustc_mir_transform::pass_manager::MirLint>::run_lint
42: rustc_mir_transform::run_analysis_to_runtime_passes
43: rustc_mir_transform::mir_drops_elaborated_and_const_checked
44: rustc_query_impl::plumbing::__rust_begin_short_backtrace::<rustc_query_impl::query_impl::mir_drops_elaborated_and_const_checked::dynamic_query::{closure#2}::{closure#0}, rustc_middle::query::erase::Erased<[u8; 8]>>
45: rustc_query_system::query::plumbing::try_execute_query::<rustc_query_impl::DynamicConfig<rustc_data_structures::vec_cache::VecCache<rustc_span::def_id::LocalDefId, rustc_middle::query::erase::Erased<[u8; 8]>, rustc_query_system::dep_graph::graph::DepNodeIndex>, false, false, false>, rustc_query_impl::plumbing::QueryCtxt, false>
46: rustc_query_impl::query_impl::mir_drops_elaborated_and_const_checked::get_query_non_incr::__rust_end_short_backtrace
47: <rustc_middle::ty::context::TyCtxt>::par_hir_body_owners::<rustc_interface::passes::run_required_analyses::{closure#1}::{closure#0}>::{closure#0}
48: rustc_interface::passes::analysis
49: rustc_query_impl::plumbing::__rust_begin_short_backtrace::<rustc_query_impl::query_impl::analysis::dynamic_query::{closure#2}::{closure#0}, rustc_middle::query::erase::Erased<[u8; 0]>>
50: rustc_query_system::query::plumbing::try_execute_query::<rustc_query_impl::DynamicConfig<rustc_query_system::query::caches::SingleCache<rustc_middle::query::erase::Erased<[u8; 0]>>, false, false, false>, rustc_query_impl::plumbing::QueryCtxt, false>
51: rustc_query_impl::query_impl::analysis::get_query_non_incr::__rust_end_short_backtrace
52: rustc_interface::passes::create_and_enter_global_ctxt::<core::option::Option<rustc_interface::queries::Linker>, rustc_driver_impl::run_compiler::{closure#0}::{closure#2}>::{closure#2}::{closure#0}
53: rustc_interface::interface::run_compiler::<(), rustc_driver_impl::run_compiler::{closure#0}>::{closure#1}
54: std::sys::backtrace::__rust_begin_short_backtrace::<rustc_interface::util::run_in_thread_with_globals<rustc_interface::util::run_in_thread_pool_with_globals<rustc_interface::interface::run_compiler<(), rustc_driver_impl::run_compiler::{closure#0}>::{closure#1}, ()>::{closure#0}, ()>::{closure#0}::{closure#0}, ()>
55: <<std::thread::Builder>::spawn_unchecked_<rustc_interface::util::run_in_thread_with_globals<rustc_interface::util::run_in_thread_pool_with_globals<rustc_interface::interface::run_compiler<(), rustc_driver_impl::run_compiler::{closure#0}>::{closure#1}, ()>::{closure#0}, ()>::{closure#0}::{closure#0}, ()>::{closure#1} as core::ops::function::FnOnce<()>>::call_once::{shim:vtable#0}
56: std::sys::pal::unix::thread::Thread::new::thread_start
57: <unknown>
58: <unknown>
--> /home/matthias/.rustup/toolchains/master/lib/rustlib/src/rust/library/core/src/future/async_drop.rs:46:70
|
46 | pub async unsafe fn async_drop_in_place<T: ?Sized>(_to_drop: *mut T) {
| ______________________________________________________________________^
... |
49 | | }
| |_^
error: internal compiler error: broken MIR in AsyncDropGlue(DefId(2:15416 ~ core[0a08]::future::async_drop::async_drop_in_place::{closure#0}), Coroutine(DefId(2:15416 ~ core[0a08]::future::async_drop::async_drop_in_place::{closure#0}), [[Foo; 4_usize], (), std::future::ResumeTy, (), (), CoroutineWitness(DefId(2:15416 ~ core[0a08]::future::async_drop::async_drop_in_place::{closure#0}), [[Foo; 4_usize]]), (*mut [Foo; 4_usize],)])) (after pass AbortUnwindingCalls) at bb12[2]:
StorageLive(_19) which already has storage here
--> /home/matthias/.rustup/toolchains/master/lib/rustlib/src/rust/library/core/src/future/async_drop.rs:46:70
|
46 | pub async unsafe fn async_drop_in_place<T: ?Sized>(_to_drop: *mut T) {
| ______________________________________________________________________^
... |
49 | | }
| |_^
|
note: delayed at compiler/rustc_mir_transform/src/lint.rs:96:26
0: <rustc_errors::DiagCtxtInner>::emit_diagnostic
1: <rustc_errors::DiagCtxtHandle>::emit_diagnostic
2: <rustc_span::ErrorGuaranteed as rustc_errors::diagnostic::EmissionGuarantee>::emit_producing_guarantee
3: <rustc_errors::DiagCtxtHandle>::span_delayed_bug::<rustc_span::span_encoding::Span, alloc::string::String>
4: <rustc_mir_transform::lint::Lint>::fail::<alloc::string::String>
5: <rustc_mir_transform::lint::Lint as rustc_middle::mir::visit::Visitor>::visit_statement
6: rustc_mir_transform::lint::lint_body
7: rustc_mir_transform::pass_manager::run_passes_inner
8: rustc_mir_transform::shim::make_shim
9: rustc_query_impl::plumbing::__rust_begin_short_backtrace::<rustc_query_impl::query_impl::mir_shims::dynamic_query::{closure#2}::{closure#0}, rustc_middle::query::erase::Erased<[u8; 8]>>
10: <rustc_query_impl::query_impl::mir_shims::dynamic_query::{closure#2} as core::ops::function::FnOnce<(rustc_middle::ty::context::TyCtxt, rustc_middle::ty::instance::InstanceKind)>>::call_once
11: rustc_query_system::query::plumbing::try_execute_query::<rustc_query_impl::DynamicConfig<rustc_query_system::query::caches::DefaultCache<rustc_middle::ty::instance::InstanceKind, rustc_middle::query::erase::Erased<[u8; 8]>>, false, false, false>, rustc_query_impl::plumbing::QueryCtxt, false>
12: rustc_query_impl::query_impl::mir_shims::get_query_non_incr::__rust_end_short_backtrace
13: <rustc_middle::ty::context::TyCtxt>::coroutine_layout
14: rustc_ty_utils::layout::layout_of_uncached
15: rustc_ty_utils::layout::layout_of
16: rustc_query_impl::plumbing::__rust_begin_short_backtrace::<rustc_query_impl::query_impl::layout_of::dynamic_query::{closure#2}::{closure#0}, rustc_middle::query::erase::Erased<[u8; 16]>>
17: rustc_query_system::query::plumbing::try_execute_query::<rustc_query_impl::DynamicConfig<rustc_query_system::query::caches::DefaultCache<rustc_middle::ty::PseudoCanonicalInput<rustc_middle::ty::Ty>, rustc_middle::query::erase::Erased<[u8; 16]>>, false, true, false>, rustc_query_impl::plumbing::QueryCtxt, false>
18: rustc_query_impl::query_impl::layout_of::get_query_non_incr::__rust_end_short_backtrace
19: rustc_ty_utils::layout::layout_of_uncached
20: rustc_ty_utils::layout::layout_of
21: rustc_query_impl::plumbing::__rust_begin_short_backtrace::<rustc_query_impl::query_impl::layout_of::dynamic_query::{closure#2}::{closure#0}, rustc_middle::query::erase::Erased<[u8; 16]>>
22: rustc_query_system::query::plumbing::try_execute_query::<rustc_query_impl::DynamicConfig<rustc_query_system::query::caches::DefaultCache<rustc_middle::ty::PseudoCanonicalInput<rustc_middle::ty::Ty>, rustc_middle::query::erase::Erased<[u8; 16]>>, false, true, false>, rustc_query_impl::plumbing::QueryCtxt, false>
23: rustc_query_impl::query_impl::layout_of::get_query_non_incr::__rust_end_short_backtrace
24: rustc_ty_utils::layout::layout_of_uncached
25: rustc_ty_utils::layout::layout_of
26: rustc_query_impl::plumbing::__rust_begin_short_backtrace::<rustc_query_impl::query_impl::layout_of::dynamic_query::{closure#2}::{closure#0}, rustc_middle::query::erase::Erased<[u8; 16]>>
27: rustc_query_system::query::plumbing::try_execute_query::<rustc_query_impl::DynamicConfig<rustc_query_system::query::caches::DefaultCache<rustc_middle::ty::PseudoCanonicalInput<rustc_middle::ty::Ty>, rustc_middle::query::erase::Erased<[u8; 16]>>, false, true, false>, rustc_query_impl::plumbing::QueryCtxt, false>
28: rustc_query_impl::query_impl::layout_of::get_query_non_incr::__rust_end_short_backtrace
29: rustc_ty_utils::layout::layout_of
30: rustc_query_impl::plumbing::__rust_begin_short_backtrace::<rustc_query_impl::query_impl::layout_of::dynamic_query::{closure#2}::{closure#0}, rustc_middle::query::erase::Erased<[u8; 16]>>
31: rustc_query_system::query::plumbing::try_execute_query::<rustc_query_impl::DynamicConfig<rustc_query_system::query::caches::DefaultCache<rustc_middle::ty::PseudoCanonicalInput<rustc_middle::ty::Ty>, rustc_middle::query::erase::Erased<[u8; 16]>>, false, true, false>, rustc_query_impl::plumbing::QueryCtxt, false>
32: rustc_query_impl::query_impl::layout_of::get_query_non_incr::__rust_end_short_backtrace
33: <rustc_middle::ty::layout::LayoutCx as rustc_middle::ty::layout::LayoutOf>::spanned_layout_of
34: <core::iter::adapters::GenericShunt<core::iter::adapters::by_ref_sized::ByRefSized<core::iter::adapters::map::Map<core::slice::iter::Iter<rustc_middle::mir::query::CoroutineSavedTy>, rustc_ty_utils::layout::layout_of_uncached::{closure#12}>>, core::result::Result<core::convert::Infallible, &rustc_middle::ty::layout::LayoutError>> as core::iter::traits::iterator::Iterator>::next
35: core::iter::adapters::try_process::<core::iter::adapters::by_ref_sized::ByRefSized<core::iter::adapters::map::Map<core::slice::iter::Iter<rustc_middle::mir::query::CoroutineSavedTy>, rustc_ty_utils::layout::layout_of_uncached::{closure#12}>>, rustc_abi::layout::ty::TyAndLayout<rustc_middle::ty::Ty>, core::result::Result<core::convert::Infallible, &rustc_middle::ty::layout::LayoutError>, <core::iter::adapters::map::Map<core::slice::iter::Iter<rustc_middle::mir::query::CoroutineSavedTy>, rustc_ty_utils::layout::layout_of_uncached::{closure#12}> as core::iter::traits::iterator::Iterator>::try_collect<rustc_index::vec::IndexVec<rustc_middle::mir::query::CoroutineSavedLocal, rustc_abi::layout::ty::TyAndLayout<rustc_middle::ty::Ty>>>::{closure#0}, rustc_index::vec::IndexVec<rustc_middle::mir::query::CoroutineSavedLocal, rustc_abi::layout::ty::TyAndLayout<rustc_middle::ty::Ty>>>
36: rustc_ty_utils::layout::layout_of_uncached
37: rustc_ty_utils::layout::layout_of
38: rustc_query_impl::plumbing::__rust_begin_short_backtrace::<rustc_query_impl::query_impl::layout_of::dynamic_query::{closure#2}::{closure#0}, rustc_middle::query::erase::Erased<[u8; 16]>>
39: rustc_query_system::query::plumbing::try_execute_query::<rustc_query_impl::DynamicConfig<rustc_query_system::query::caches::DefaultCache<rustc_middle::ty::PseudoCanonicalInput<rustc_middle::ty::Ty>, rustc_middle::query::erase::Erased<[u8; 16]>>, false, true, false>, rustc_query_impl::plumbing::QueryCtxt, false>
40: rustc_query_impl::query_impl::layout_of::get_query_non_incr::__rust_end_short_backtrace
41: <rustc_mir_transform::known_panics_lint::KnownPanicsLint as rustc_mir_transform::pass_manager::MirLint>::run_lint
42: rustc_mir_transform::run_analysis_to_runtime_passes
43: rustc_mir_transform::mir_drops_elaborated_and_const_checked
44: rustc_query_impl::plumbing::__rust_begin_short_backtrace::<rustc_query_impl::query_impl::mir_drops_elaborated_and_const_checked::dynamic_query::{closure#2}::{closure#0}, rustc_middle::query::erase::Erased<[u8; 8]>>
45: rustc_query_system::query::plumbing::try_execute_query::<rustc_query_impl::DynamicConfig<rustc_data_structures::vec_cache::VecCache<rustc_span::def_id::LocalDefId, rustc_middle::query::erase::Erased<[u8; 8]>, rustc_query_system::dep_graph::graph::DepNodeIndex>, false, false, false>, rustc_query_impl::plumbing::QueryCtxt, false>
46: rustc_query_impl::query_impl::mir_drops_elaborated_and_const_checked::get_query_non_incr::__rust_end_short_backtrace
47: <rustc_middle::ty::context::TyCtxt>::par_hir_body_owners::<rustc_interface::passes::run_required_analyses::{closure#1}::{closure#0}>::{closure#0}
48: rustc_interface::passes::analysis
49: rustc_query_impl::plumbing::__rust_begin_short_backtrace::<rustc_query_impl::query_impl::analysis::dynamic_query::{closure#2}::{closure#0}, rustc_middle::query::erase::Erased<[u8; 0]>>
50: rustc_query_system::query::plumbing::try_execute_query::<rustc_query_impl::DynamicConfig<rustc_query_system::query::caches::SingleCache<rustc_middle::query::erase::Erased<[u8; 0]>>, false, false, false>, rustc_query_impl::plumbing::QueryCtxt, false>
51: rustc_query_impl::query_impl::analysis::get_query_non_incr::__rust_end_short_backtrace
52: rustc_interface::passes::create_and_enter_global_ctxt::<core::option::Option<rustc_interface::queries::Linker>, rustc_driver_impl::run_compiler::{closure#0}::{closure#2}>::{closure#2}::{closure#0}
53: rustc_interface::interface::run_compiler::<(), rustc_driver_impl::run_compiler::{closure#0}>::{closure#1}
54: std::sys::backtrace::__rust_begin_short_backtrace::<rustc_interface::util::run_in_thread_with_globals<rustc_interface::util::run_in_thread_pool_with_globals<rustc_interface::interface::run_compiler<(), rustc_driver_impl::run_compiler::{closure#0}>::{closure#1}, ()>::{closure#0}, ()>::{closure#0}::{closure#0}, ()>
55: <<std::thread::Builder>::spawn_unchecked_<rustc_interface::util::run_in_thread_with_globals<rustc_interface::util::run_in_thread_pool_with_globals<rustc_interface::interface::run_compiler<(), rustc_driver_impl::run_compiler::{closure#0}>::{closure#1}, ()>::{closure#0}, ()>::{closure#0}::{closure#0}, ()>::{closure#1} as core::ops::function::FnOnce<()>>::call_once::{shim:vtable#0}
56: std::sys::pal::unix::thread::Thread::new::thread_start
57: <unknown>
58: <unknown>
--> /home/matthias/.rustup/toolchains/master/lib/rustlib/src/rust/library/core/src/future/async_drop.rs:46:70
|
46 | pub async unsafe fn async_drop_in_place<T: ?Sized>(_to_drop: *mut T) {
| ______________________________________________________________________^
... |
49 | | }
| |_^
<snip>
note: we would appreciate a bug report: https://github.com/rust-lang/rust/issues/new?labels=C-bug%2C+I-ICE%2C+T-compiler&template=ice.md
note: please make sure that you have updated to the latest nightly
note: rustc 1.89.0-nightly (e314b97ee 2025-06-16) running on x86_64-unknown-linux-gnu
note: compiler flags: -Z lint-mir -Z dump-mir-dir=dir
query stack during panic:
end of query stack
@rustbot label +F-async_drop