mirror of
https://github.com/rust-lang/rust.git
synced 2024-11-26 16:54:01 +00:00
33 lines
865 B
Rust
33 lines
865 B
Rust
|
// Regression test: if we suggest replacing an `impl Trait` argument to an async
|
||
|
// fn with a named type parameter in order to add bounds, the suggested function
|
||
|
// signature should be well-formed.
|
||
|
//
|
||
|
//@ edition:2018
|
||
|
|
||
|
trait Foo {
|
||
|
type Bar;
|
||
|
fn bar(&self) -> Self::Bar;
|
||
|
}
|
||
|
|
||
|
async fn run(_: &(), foo: impl Foo) -> std::io::Result<()> {
|
||
|
let bar = foo.bar();
|
||
|
assert_is_send(&bar);
|
||
|
//~^ ERROR: `<impl Foo as Foo>::Bar` cannot be sent between threads safely
|
||
|
|
||
|
Ok(())
|
||
|
}
|
||
|
|
||
|
// Test our handling of cases where there is a generic parameter list in the
|
||
|
// source, but only synthetic generic parameters
|
||
|
async fn run2< >(_: &(), foo: impl Foo) -> std::io::Result<()> {
|
||
|
let bar = foo.bar();
|
||
|
assert_is_send(&bar);
|
||
|
//~^ ERROR: `<impl Foo as Foo>::Bar` cannot be sent between threads safely
|
||
|
|
||
|
Ok(())
|
||
|
}
|
||
|
|
||
|
fn assert_is_send<T: Send>(_: &T) {}
|
||
|
|
||
|
fn main() {}
|