stack overflow while compiling async recursion
Open
Nobody has claimed this yet.
A-async-await
C-bug
I-compilemem
I-crash
T-compiler
- Dominant language
- Rust
- Stars
- 119k
- Forks
- 16.1k
- PR merge metrics
- PR metrics pending
Description
Compiler encounters segfault when compiling the below code
Code
struct Wrapper<T>(T);
pub async fn f1() {
f2(Wrapper(())).await
}
pub async fn f2<T>(stream: T) {
Box::pin(f2(Wrapper(stream))).await
}
Meta
$ cargo version
cargo 1.86.0 (adf9b6ad1 2025-02-28)
$ cargo +nightly version
cargo 1.88.0-nightly (7918c7eb5 2025-04-27)
Error output
Stable
error: rustc interrupted by SIGSEGV, printing backtrace
/usr/local/rustup/toolchains/stable-aarch64-unknown-linux-gnu/lib/librustc_driver-d10e1ea80d090031.so(+0x2fa1b74)[0xffffaf891b74]
linux-vdso.so.1(__kernel_rt_sigreturn+0x0)[0xffffb09f17ac]
/usr/local/rustup/toolchains/stable-aarch64-unknown-linux-gnu/lib/librustc_driver-d10e1ea80d090031.so(_RNvNtNtCs1eHWH1cD26q_17rustc_codegen_ssa9debuginfo10type_names14push_item_name+0x26c)[0xffffade124c8]
/usr/local/rustup/toolchains/stable-aarch64-unknown-linux-gnu/lib/librustc_driver-d10e1ea80d090031.so(_RNvNtNtCs1eHWH1cD26q_17rustc_codegen_ssa9debuginfo10type_names14push_item_name+0x164)[0xffffade123c0]
/usr/local/rustup/toolchains/stable-aarch64-unknown-linux-gnu/lib/librustc_driver-d10e1ea80d090031.so(+0x151d7f8)[0xffffade0d7f8]
### cycle encountered after 5 frames with period 6
/usr/local/rustup/toolchains/stable-aarch64-unknown-linux-gnu/lib/librustc_driver-d10e1ea80d090031.so(+0x151cf78)[0xffffade0cf78]
/usr/local/rustup/toolchains/stable-aarch64-unknown-linux-gnu/lib/librustc_driver-d10e1ea80d090031.so(+0x151cf78)[0xffffade0cf78]
/usr/local/rustup/toolchains/stable-aarch64-unknown-linux-gnu/lib/librustc_driver-d10e1ea80d090031.so(+0x151cf78)[0xffffade0cf78]
/usr/local/rustup/toolchains/stable-aarch64-unknown-linux-gnu/lib/librustc_driver-d10e1ea80d090031.so(+0x151cf78)[0xffffade0cf78]
/usr/local/rustup/toolchains/stable-aarch64-unknown-linux-gnu/lib/librustc_driver-d10e1ea80d090031.so(+0x151cf78)[0xffffade0cf78]
/usr/local/rustup/toolchains/stable-aarch64-unknown-linux-gnu/lib/librustc_driver-d10e1ea80d090031.so(+0x151cf78)[0xffffade0cf78]
### recursed 41 times
/usr/local/rustup/toolchains/stable-aarch64-unknown-linux-gnu/lib/librustc_driver-d10e1ea80d090031.so(+0x151cf78)[0xffffade0cf78]
/usr/local/rustup/toolchains/stable-aarch64-unknown-linux-gnu/lib/librustc_driver-d10e1ea80d090031.so(+0x151cf78)[0xffffade0cf78]
/usr/local/rustup/toolchains/stable-aarch64-unknown-linux-gnu/lib/librustc_driver-d10e1ea80d090031.so(+0x151cf78)[0xffffade0cf78]
/usr/local/rustup/toolchains/stable-aarch64-unknown-linux-gnu/lib/librustc_driver-d10e1ea80d090031.so(+0x151cf78)[0xffffade0cf78]
/usr/local/rustup/toolchains/stable-aarch64-unknown-linux-gnu/lib/librustc_driver-d10e1ea80d090031.so(+0x151cf78)[0xffffade0cf78]
note: rustc unexpectedly overflowed its stack! this is a bug
note: maximum backtrace depth reached, frames may have been lost
note: we would appreciate a report at https://github.com/rust-lang/rust
help: you can increase rustc's stack size by setting RUST_MIN_STACK=16777216
note: backtrace dumped due to SIGSEGV! resuming signal
error: could not compile `segfault` (lib)
Caused by:
process didn't exit successfully: `/usr/local/rustup/toolchains/stable-aarch64-unknown-linux-gnu/bin/rustc --crate-name segfault --edition=2024 src/lib.rs --error-format=json --json=diagnostic-rendered-ansi,artifacts,future-incompat --diagnostic-width=310 --crate-type lib --emit=dep-info,metadata,link -C embed-bitcode=no -C debuginfo=2 --check-cfg 'cfg(docsrs,test)' --check-cfg 'cfg(feature, values())' -C metadata=d1c27d02b862a57e -C extra-filename=-f2d1ad9e2f73cb97 --out-dir /workspaces/rust/segfault/target/debug/deps -C incremental=/workspaces/rust/segfault/target/debug/incremental -L dependency=/workspaces/rust/segfault/target/debug/deps` (signal: 11, SIGSEGV: invalid memory reference)
Nightly
error: rustc interrupted by SIGSEGV, printing backtrace
/usr/local/rustup/toolchains/nightly-aarch64-unknown-linux-gnu/lib/librustc_driver-121983e25d0fab07.so(+0x31b2310)[0xffffb5ef2310]
linux-vdso.so.1(__kernel_rt_sigreturn+0x0)[0xffffb714e7ac]
/usr/local/rustup/toolchains/nightly-aarch64-unknown-linux-gnu/lib/librustc_driver-121983e25d0fab07.so(_RNvNtNtCsiqNB9qq6D9S_17rustc_codegen_ssa9debuginfo10type_names14push_item_name+0x4)[0xffffb4543080]
/usr/local/rustup/toolchains/nightly-aarch64-unknown-linux-gnu/lib/librustc_driver-121983e25d0fab07.so(+0x17fe368)[0xffffb453e368]
### cycle encountered after 4 frames with period 5
/usr/local/rustup/toolchains/nightly-aarch64-unknown-linux-gnu/lib/librustc_driver-121983e25d0fab07.so(+0x17fd8f0)[0xffffb453d8f0]
/usr/local/rustup/toolchains/nightly-aarch64-unknown-linux-gnu/lib/librustc_driver-121983e25d0fab07.so(+0x17fd8f0)[0xffffb453d8f0]
/usr/local/rustup/toolchains/nightly-aarch64-unknown-linux-gnu/lib/librustc_driver-121983e25d0fab07.so(+0x17fd8f0)[0xffffb453d8f0]
/usr/local/rustup/toolchains/nightly-aarch64-unknown-linux-gnu/lib/librustc_driver-121983e25d0fab07.so(+0x17fd8f0)[0xffffb453d8f0]
/usr/local/rustup/toolchains/nightly-aarch64-unknown-linux-gnu/lib/librustc_driver-121983e25d0fab07.so(+0x17fd8f0)[0xffffb453d8f0]
### recursed 50 times
/usr/local/rustup/toolchains/nightly-aarch64-unknown-linux-gnu/lib/librustc_driver-121983e25d0fab07.so(+0x17fd8f0)[0xffffb453d8f0]
/usr/local/rustup/toolchains/nightly-aarch64-unknown-linux-gnu/lib/librustc_driver-121983e25d0fab07.so(+0x17fd8f0)[0xffffb453d8f0]
note: rustc unexpectedly overflowed its stack! this is a bug
note: maximum backtrace depth reached, frames may have been lost
note: we would appreciate a report at https://github.com/rust-lang/rust
help: you can increase rustc's stack size by setting RUST_MIN_STACK=16777216
error: could not compile `segfault` (lib)
Caused by:
process didn't exit successfully: `/usr/local/rustup/toolchains/nightly-aarch64-unknown-linux-gnu/bin/rustc --crate-name segfault --edition=2024 src/lib.rs --error-format=json --json=diagnostic-rendered-ansi,artifacts,future-incompat --diagnostic-width=310 --crate-type lib --emit=dep-info,metadata,link -C embed-bitcode=no -C debuginfo=2 --check-cfg 'cfg(docsrs,test)' --check-cfg 'cfg(feature, values())' -C metadata=6efcc8920530f666 -C extra-filename=-ca85f3463d939f74 --out-dir /workspaces/rust/segfault/target/debug/deps -C incremental=/workspaces/rust/segfault/target/debug/incremental -L dependency=/workspaces/rust/segfault/target/debug/deps` (signal: 11, SIGSEGV: invalid memory reference)
Contributor guide
First steps
- Read the whole issue, then the project's contributing guide.
- Comment on the issue to say you are picking it up — it saves two people doing the same work.
- Fork the repository and make your change on a branch.
- Open a pull request that references the issue number.
Research direction
Reproduce the failure from the example in src/lib.rs with the stable and nightly toolchains listed. Start at rustc_codegen_ssa debuginfo type_names::push_item_name, which appears in both backtraces, and trace the recursive type-name handling. Done means the compiler no longer segfaults or overflows its stack on this input and the relevant regression is covered.
Written by the indexing model from the issue text.
Assessment
- Tech stack
- rust
- Domain
- compilers
- Issue type
- Bug
- Difficulty
- 4/5
- Estimated time
- 3-5 days
- Activity status
- Stale
- Clarity
- Mostly clear
- Newbie friendliness
- 42/100