about summary refs log tree commit diff
path: root/src
diff options
context:
space:
mode:
authorGus Wynn <guswynn@gmail.com>2021-01-28 18:16:52 -0800
committerGus Wynn <guswynn@gmail.com>2021-02-15 08:51:08 -0800
commitc28d86c53b94e475fc3ea707c3289acce253f091 (patch)
tree0cb0a4524738cb403077fc85ec6b0ccf264236b2 /src
parentb05fd2a15de7c9e50110e9ed4c01f114be215739 (diff)
downloadrust-c28d86c53b94e475fc3ea707c3289acce253f091.tar.gz
rust-c28d86c53b94e475fc3ea707c3289acce253f091.zip
name async generators something more human friendly in type error diagnostics
Diffstat (limited to 'src')
-rw-r--r--src/test/ui/async-await/generator-desc.rs16
-rw-r--r--src/test/ui/async-await/generator-desc.stderr49
2 files changed, 65 insertions, 0 deletions
diff --git a/src/test/ui/async-await/generator-desc.rs b/src/test/ui/async-await/generator-desc.rs
new file mode 100644
index 00000000000..50081201667
--- /dev/null
+++ b/src/test/ui/async-await/generator-desc.rs
@@ -0,0 +1,16 @@
+// edition:2018
+#![feature(async_closure)]
+use std::future::Future;
+
+async fn one() {}
+async fn two() {}
+
+fn fun<F: Future<Output = ()>>(f1: F, f2: F) {}
+fn main() {
+    fun(async {}, async {});
+    //~^ ERROR mismatched types
+    fun(one(), two());
+    //~^ ERROR mismatched types
+    fun((async || {})(), (async || {})());
+    //~^ ERROR mismatched types
+}
diff --git a/src/test/ui/async-await/generator-desc.stderr b/src/test/ui/async-await/generator-desc.stderr
new file mode 100644
index 00000000000..b85926c7a03
--- /dev/null
+++ b/src/test/ui/async-await/generator-desc.stderr
@@ -0,0 +1,49 @@
+error[E0308]: mismatched types
+  --> $DIR/generator-desc.rs:10:25
+   |
+LL |     fun(async {}, async {});
+   |               --        ^^ expected `async` block, found a different `async` block
+   |               |
+   |               the expected `async` block
+   |
+   = note: expected `async` block `[static generator@$DIR/generator-desc.rs:10:15: 10:17]`
+              found `async` block `[static generator@$DIR/generator-desc.rs:10:25: 10:27]`
+
+error[E0308]: mismatched types
+  --> $DIR/generator-desc.rs:12:16
+   |
+LL | async fn one() {}
+   |                - the `Output` of this `async fn`'s expected opaque type
+LL | async fn two() {}
+   |                - the `Output` of this `async fn`'s found opaque type
+...
+LL |     fun(one(), two());
+   |                ^^^^^ expected opaque type, found a different opaque type
+   |
+   = note: expected opaque type `impl Future` (opaque type at <$DIR/generator-desc.rs:5:16>)
+              found opaque type `impl Future` (opaque type at <$DIR/generator-desc.rs:6:16>)
+   = help: consider `await`ing on both `Future`s
+   = note: distinct uses of `impl Trait` result in different opaque types
+
+error[E0308]: mismatched types
+  --> $DIR/generator-desc.rs:14:26
+   |
+LL |     fun((async || {})(), (async || {})());
+   |                   --     ^^^^^^^^^^^^^^^ expected `async` closure body, found a different `async` closure body
+   |                   |
+   |                   the expected `async` closure body
+   | 
+  ::: $SRC_DIR/core/src/future/mod.rs:LL:COL
+   |
+LL | pub const fn from_generator<T>(gen: T) -> impl Future<Output = T::Return>
+   |                                           -------------------------------
+   |                                           |
+   |                                           the expected opaque type
+   |                                           the found opaque type
+   |
+   = note: expected opaque type `impl Future` (`async` closure body)
+              found opaque type `impl Future` (`async` closure body)
+
+error: aborting due to 3 previous errors
+
+For more information about this error, try `rustc --explain E0308`.