summaryrefslogtreecommitdiffstats
path: root/tests/ui/suggestions/issue-79843-impl-trait-with-missing-bounds-on-async-fn.rs
diff options
context:
space:
mode:
Diffstat (limited to 'tests/ui/suggestions/issue-79843-impl-trait-with-missing-bounds-on-async-fn.rs')
-rw-r--r--tests/ui/suggestions/issue-79843-impl-trait-with-missing-bounds-on-async-fn.rs32
1 files changed, 32 insertions, 0 deletions
diff --git a/tests/ui/suggestions/issue-79843-impl-trait-with-missing-bounds-on-async-fn.rs b/tests/ui/suggestions/issue-79843-impl-trait-with-missing-bounds-on-async-fn.rs
new file mode 100644
index 000000000..3cd6d336e
--- /dev/null
+++ b/tests/ui/suggestions/issue-79843-impl-trait-with-missing-bounds-on-async-fn.rs
@@ -0,0 +1,32 @@
+// 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() {}