// Checks that we don't get conflicting arguments in our debug info with a particular async function // structure. //@ edition:2021 //@ compile-flags: -Cdebuginfo=2 //@ build-pass #![crate_type = "lib"] use std::future::Future; // The compiler produces a closure as part of this function. That closure initially takes an // argument _task_context. Later, when the MIR for that closure is transformed into a coroutine // state machine, _task_context is demoted to not be an argument, but just part of an unnamed // argument. If we emit debug info saying that both _task_context and the unnamed argument are both // argument number 2, then LLVM will fail with "conflicting debug info for argument". See // https://github.com/rust-lang/rust/pull/109466#issuecomment-1500879195 for details. async fn recv_unit() { std::future::ready(()).await; } pub fn poll_recv() { // This box is necessary in order to reproduce the problem. let _: Box> = Box::new(recv_unit()); }