| // 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<dyn Future<Output = ()>> = Box::new(recv_unit()); | |
| } |