diff --git a/tests/ui/consider-restricting.rs b/tests/ui/consider-restricting.rs new file mode 100644 index 0000000..e23c8b1 --- /dev/null +++ b/tests/ui/consider-restricting.rs @@ -0,0 +1,26 @@ +// https://github.com/rust-lang/rust/issues/93828 + +use async_trait::async_trait; + +pub trait IntoUrl {} + +#[async_trait] +pub trait ClientExt { + async fn publish(&self, url: T); +} + +struct Client; + +#[async_trait] +impl ClientExt for Client { + async fn publish(&self, url: T) {} +} + +struct Client2; + +#[async_trait] +impl ClientExt for Client2 { + async fn publish(&self, url: T) {} +} + +fn main() {} diff --git a/tests/ui/consider-restricting.stderr b/tests/ui/consider-restricting.stderr new file mode 100644 index 0000000..ee14180 --- /dev/null +++ b/tests/ui/consider-restricting.stderr @@ -0,0 +1,33 @@ +error: future cannot be sent between threads safely + --> tests/ui/consider-restricting.rs:16:49 + | +16 | async fn publish(&self, url: T) {} + | ^^ future created by async block is not `Send` + | +note: captured value is not `Send` + --> tests/ui/consider-restricting.rs:16:41 + | +16 | async fn publish(&self, url: T) {} + | ^^^ has type `T` which is not `Send` + = note: required for the cast to the object type `dyn Future + Send` +help: consider further restricting this bound + | +16 | async fn publish(&self, url: T) {} + | +++++++++++++++++++ + +error: future cannot be sent between threads safely + --> tests/ui/consider-restricting.rs:23:40 + | +23 | async fn publish(&self, url: T) {} + | ^^ future created by async block is not `Send` + | +note: captured value is not `Send` + --> tests/ui/consider-restricting.rs:23:32 + | +23 | async fn publish(&self, url: T) {} + | ^^^ has type `T` which is not `Send` + = note: required for the cast to the object type `dyn Future + Send` +help: consider further restricting this bound + | +23 | async fn publish(&self, url: T) {} + | +++++++++++++++++++