I was initially going to file an issue about the reference not making it clear this is not allowed, but a quick test on the playground shows this actually compiles with a warning about impl Future not being ffi-safe.
1 Like
async fn has an opaque return type, so it shouldn't be callable by FFI even with extern "Rust". And there correctly are errors issued if you try to declare async fn or fn -> impl Future in an extern block.
#[no_mangle]
async extern "Rust" fn hello_async() { // Allowed without warnings
println!("Hello world");
}
extern "Rust" {
async fn hello_async(); // functions in `extern` blocks cannot have qualifiers
fn hello_async() -> impl Future; // [E0562]: `impl Trait` is not allowed in `extern fn` return types
}
I don't think it's a bug as such that you can request a C-like calling convention for an async function. It's just not very useful.
3 Likes
This topic was automatically closed 90 days after the last reply. New replies are no longer allowed.