Skip to content

nightly ICE with unboxed async fn recursion #131409

@spookyvision

Description

@spookyvision

Code

trait Blah { async fn iter<T>(&mut self, iterator: T) where T: IntoIterator<Item = ()>; } impl Blah for () { async fn iter<T>(&mut self, iterator: T) where T: IntoIterator<Item = ()>, { Blah::iter(self, iterator).await } } struct Wrap<T: Blah> { t: T, } impl<T: Blah> Wrap<T> where T: Blah, { async fn ice(&mut self) { let arr: [(); 0] = []; self.t.iter(arr.into_iter()).await; } } #[tokio::main] async fn main() { let mut t = Wrap { t: () }; t.ice(); }

Meta

rustc --version --verbose:

rustc 1.83.0-nightly (3ae715c8c 2024-10-07) binary: rustc commit-hash: 3ae715c8c63f9aeac47cbf7d8d9dadb3fa32c638 commit-date: 2024-10-07 host: aarch64-apple-darwin release: 1.83.0-nightly LLVM version: 19.1.1 

Error output

warning: unused implementer of `Future` that must be used --> src/main.rs:37:5 | 37 | t.ice(); | ^^^^^^^ | = note: futures do nothing unless you `.await` or poll them = note: `#[warn(unused_must_use)]` on by default error[E0733]: recursion in an async fn requires boxing --> src/main.rs:10:5 | 10 | / async fn write<T>(&mut self, iterator: T) 11 | | where 12 | | T: IntoIterator<Item = ()>, | |___________________________________^ 13 | { 14 | Blah::write(self, iterator).await | --------------------------------- recursive call here | = note: a recursive `async fn` call must introduce indirection such as `Box::pin` to avoid an infinitely sized future error: internal compiler error: compiler/rustc_codegen_llvm/src/context.rs:1186:21: `fn_abi_of_instance(Wrap::<()>::ice, [])` failed: Layout(Cycle(ErrorGuaranteed(()))) --> src/main.rs:26:5 | 26 | async fn ice(&mut self) { | ^^^^^^^^^^^^^^^^^^^^^^^ thread 'rustc' panicked at compiler/rustc_codegen_llvm/src/context.rs:1186:21: Box<dyn Any> stack backtrace: (pasted below, as per the template's instructions) 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: please attach the file at `/private/tmp/aec.24_07_03_17_29_39.wO/ice/rustc-ice-2024-10-08T16_47_37-3270.txt` to your bug report note: compiler flags: --crate-type bin -C opt-level=3 -C embed-bitcode=no -C debuginfo=2 -C split-debuginfo=unpacked note: some of the compiler flags provided by cargo are hidden query stack during panic: end of query stack For more information about this error, try `rustc --explain E0733`. warning: `ice` (bin "ice") generated 1 warning error: could not compile `ice` (bin "ice") due to 1 previous error; 1 warning emitted 
Backtrace

 0: 0x10e54bd44 - <std::sys::backtrace::BacktraceLock::print::DisplayBacktrace as core::fmt::Display>::fmt::ha1175e5d631924b6 1: 0x10b8cd7dc - core::fmt::write::hb0b7e313ed56bf22 2: 0x10e53fdf4 - std::io::Write::write_fmt::hd7b821ad1b2e3439 3: 0x10e54bc04 - std::sys::backtrace::BacktraceLock::print::h3a7a2e7d356908ce 4: 0x10e54e0d0 - std::panicking::default_hook::{{closure}}::h10557e6d4768ff4b 5: 0x10e54df1c - std::panicking::default_hook::h4543f5bf1aacb61d 6: 0x10c4d1fb4 - <alloc[33d0a6a508eb5932]::boxed::Box<rustc_driver_impl[c0574d6a9003aa16]::install_ice_hook::{closure#0}> as core[ef7e3446cee7ff23]::ops::function::Fn<(&dyn for<'a, 'b> core[ef7e3446cee7ff23]::ops::function::Fn<(&'a std[5d2d2d2a3de07169]::panic::PanicHookInfo<'b>,), Output = ()> + core[ef7e3446cee7ff23]::marker::Send + core[ef7e3446cee7ff23]::marker::Sync, &std[5d2d2d2a3de07169]::panic::PanicHookInfo)>>::call 7: 0x10e54e95c - std::panicking::rust_panic_with_hook::hf0bd200963f84a79 8: 0x10c558990 - std[5d2d2d2a3de07169]::panicking::begin_panic::<rustc_errors[6c9f61422b2b67fe]::ExplicitBug>::{closure#0} 9: 0x10c5587e8 - std[5d2d2d2a3de07169]::sys::backtrace::__rust_end_short_backtrace::<std[5d2d2d2a3de07169]::panicking::begin_panic<rustc_errors[6c9f61422b2b67fe]::ExplicitBug>::{closure#0}, !> 10: 0x110c4e5d8 - std[5d2d2d2a3de07169]::panicking::begin_panic::<rustc_errors[6c9f61422b2b67fe]::ExplicitBug> 11: 0x10c549fcc - <rustc_errors[6c9f61422b2b67fe]::diagnostic::BugAbort as rustc_errors[6c9f61422b2b67fe]::diagnostic::EmissionGuarantee>::emit_producing_guarantee 12: 0x10c167fe0 - <rustc_errors[6c9f61422b2b67fe]::DiagCtxtHandle>::span_bug::<rustc_span[a9b61c9ba68f3314]::span_encoding::Span, alloc[33d0a6a508eb5932]::string::String> 13: 0x10c16c52c - rustc_middle[7d4f75877793c8e4]::util::bug::opt_span_bug_fmt::<rustc_span[a9b61c9ba68f3314]::span_encoding::Span>::{closure#0} 14: 0x10c16c560 - rustc_middle[7d4f75877793c8e4]::ty::context::tls::with_opt::<rustc_middle[7d4f75877793c8e4]::util::bug::opt_span_bug_fmt<rustc_span[a9b61c9ba68f3314]::span_encoding::Span>::{closure#0}, !>::{closure#0} 15: 0x10c16ba00 - rustc_middle[7d4f75877793c8e4]::ty::context::tls::with_context_opt::<rustc_middle[7d4f75877793c8e4]::ty::context::tls::with_opt<rustc_middle[7d4f75877793c8e4]::util::bug::opt_span_bug_fmt<rustc_span[a9b61c9ba68f3314]::span_encoding::Span>::{closure#0}, !>::{closure#0}, !> 16: 0x110c24198 - rustc_middle[7d4f75877793c8e4]::util::bug::span_bug_fmt::<rustc_span[a9b61c9ba68f3314]::span_encoding::Span> 17: 0x10c0c88d4 - <rustc_codegen_llvm[36c236d002db6048]::context::CodegenCx as rustc_middle[7d4f75877793c8e4]::ty::layout::FnAbiOfHelpers>::handle_fn_abi_err 18: 0x10c0bdd60 - <rustc_codegen_llvm[36c236d002db6048]::context::CodegenCx as rustc_middle[7d4f75877793c8e4]::ty::layout::FnAbiOf>::fn_abi_of_instance::{closure#0} 19: 0x10c0ca760 - <rustc_codegen_llvm[36c236d002db6048]::context::CodegenCx as rustc_codegen_ssa[be5c3ef9ac00adbb]::traits::declare::PreDefineCodegenMethods>::predefine_fn 20: 0x10c0b9110 - rustc_codegen_llvm[36c236d002db6048]::base::compile_codegen_unit::module_codegen 21: 0x10c0b8804 - rustc_codegen_llvm[36c236d002db6048]::base::compile_codegen_unit 22: 0x10c137078 - rustc_codegen_ssa[be5c3ef9ac00adbb]::base::codegen_crate::<rustc_codegen_llvm[36c236d002db6048]::LlvmCodegenBackend> 23: 0x10c1cacf4 - <rustc_codegen_llvm[36c236d002db6048]::LlvmCodegenBackend as rustc_codegen_ssa[be5c3ef9ac00adbb]::traits::backend::CodegenBackend>::codegen_crate 24: 0x10cd23e60 - <rustc_session[828553cc4c1b3304]::session::Session>::time::<alloc[33d0a6a508eb5932]::boxed::Box<dyn core[ef7e3446cee7ff23]::any::Any>, rustc_interface[fed0365793385749]::passes::start_codegen::{closure#0}> 25: 0x10cdaa890 - rustc_interface[fed0365793385749]::passes::start_codegen 26: 0x10cd4f0d0 - <rustc_interface[fed0365793385749]::queries::Linker>::codegen_and_build_linker 27: 0x10c480764 - <rustc_middle[7d4f75877793c8e4]::ty::context::GlobalCtxt>::enter::<rustc_driver_impl[c0574d6a9003aa16]::run_compiler::{closure#0}::{closure#1}::{closure#6}, core[ef7e3446cee7ff23]::result::Result<core[ef7e3446cee7ff23]::option::Option<rustc_interface[fed0365793385749]::queries::Linker>, rustc_span[a9b61c9ba68f3314]::ErrorGuaranteed>> 28: 0x10c45239c - <rustc_interface[fed0365793385749]::interface::Compiler>::enter::<rustc_driver_impl[c0574d6a9003aa16]::run_compiler::{closure#0}::{closure#1}, core[ef7e3446cee7ff23]::result::Result<core[ef7e3446cee7ff23]::option::Option<rustc_interface[fed0365793385749]::queries::Linker>, rustc_span[a9b61c9ba68f3314]::ErrorGuaranteed>> 29: 0x10c49a5dc - rustc_span[a9b61c9ba68f3314]::create_session_globals_then::<core[ef7e3446cee7ff23]::result::Result<(), rustc_span[a9b61c9ba68f3314]::ErrorGuaranteed>, rustc_interface[fed0365793385749]::util::run_in_thread_with_globals<rustc_interface[fed0365793385749]::util::run_in_thread_pool_with_globals<rustc_interface[fed0365793385749]::interface::run_compiler<core[ef7e3446cee7ff23]::result::Result<(), rustc_span[a9b61c9ba68f3314]::ErrorGuaranteed>, rustc_driver_impl[c0574d6a9003aa16]::run_compiler::{closure#0}>::{closure#1}, core[ef7e3446cee7ff23]::result::Result<(), rustc_span[a9b61c9ba68f3314]::ErrorGuaranteed>>::{closure#0}, core[ef7e3446cee7ff23]::result::Result<(), rustc_span[a9b61c9ba68f3314]::ErrorGuaranteed>>::{closure#0}::{closure#0}::{closure#0}> 30: 0x10c4820b8 - std[5d2d2d2a3de07169]::sys::backtrace::__rust_begin_short_backtrace::<rustc_interface[fed0365793385749]::util::run_in_thread_with_globals<rustc_interface[fed0365793385749]::util::run_in_thread_pool_with_globals<rustc_interface[fed0365793385749]::interface::run_compiler<core[ef7e3446cee7ff23]::result::Result<(), rustc_span[a9b61c9ba68f3314]::ErrorGuaranteed>, rustc_driver_impl[c0574d6a9003aa16]::run_compiler::{closure#0}>::{closure#1}, core[ef7e3446cee7ff23]::result::Result<(), rustc_span[a9b61c9ba68f3314]::ErrorGuaranteed>>::{closure#0}, core[ef7e3446cee7ff23]::result::Result<(), rustc_span[a9b61c9ba68f3314]::ErrorGuaranteed>>::{closure#0}::{closure#0}, core[ef7e3446cee7ff23]::result::Result<(), rustc_span[a9b61c9ba68f3314]::ErrorGuaranteed>> 31: 0x10c477eb8 - <<std[5d2d2d2a3de07169]::thread::Builder>::spawn_unchecked_<rustc_interface[fed0365793385749]::util::run_in_thread_with_globals<rustc_interface[fed0365793385749]::util::run_in_thread_pool_with_globals<rustc_interface[fed0365793385749]::interface::run_compiler<core[ef7e3446cee7ff23]::result::Result<(), rustc_span[a9b61c9ba68f3314]::ErrorGuaranteed>, rustc_driver_impl[c0574d6a9003aa16]::run_compiler::{closure#0}>::{closure#1}, core[ef7e3446cee7ff23]::result::Result<(), rustc_span[a9b61c9ba68f3314]::ErrorGuaranteed>>::{closure#0}, core[ef7e3446cee7ff23]::result::Result<(), rustc_span[a9b61c9ba68f3314]::ErrorGuaranteed>>::{closure#0}::{closure#0}, core[ef7e3446cee7ff23]::result::Result<(), rustc_span[a9b61c9ba68f3314]::ErrorGuaranteed>>::{closure#1} as core[ef7e3446cee7ff23]::ops::function::FnOnce<()>>::call_once::{shim:vtable#0} 32: 0x10e558d2c - std::sys::pal::unix::thread::Thread::new::thread_start::h89c74db28defaaab 33: 0x19fe5af94 - __pthread_joiner_wake 

Metadata

Metadata

Assignees

No one assigned

    Labels

    C-bugCategory: This is a bug.I-ICEIssue: The compiler panicked, giving an Internal Compilation Error (ICE) ❄️T-compilerRelevant to the compiler team, which will review and decide on the PR/issue.

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions