about summary refs log tree commit diff
path: root/src
diff options
context:
space:
mode:
authorDavid Wood <david@davidtw.co>2020-09-14 15:21:38 +0100
committerDavid Wood <david@davidtw.co>2020-09-14 15:21:38 +0100
commit01f65afa4adff6dfbea84621e6851c028aaa7159 (patch)
tree53426d492d50b6db269e91bce49a8a6196b22263 /src
parentb5f55b7e1562286798358730e06b0ba13b4c0ea6 (diff)
downloadrust-01f65afa4adff6dfbea84621e6851c028aaa7159.tar.gz
rust-01f65afa4adff6dfbea84621e6851c028aaa7159.zip
diag: improve closure/generic parameter mismatch
This commit improves the diagnostic when a type parameter is expected
and a closure is found, noting that each closure has a distinct type and
therefore could not always match the caller-chosen type of the
parameter.

Signed-off-by: David Wood <david@davidtw.co>
Diffstat (limited to 'src')
-rw-r--r--src/test/ui/issues/issue-51154.rs6
-rw-r--r--src/test/ui/issues/issue-51154.stderr15
2 files changed, 21 insertions, 0 deletions
diff --git a/src/test/ui/issues/issue-51154.rs b/src/test/ui/issues/issue-51154.rs
new file mode 100644
index 00000000000..12903f79010
--- /dev/null
+++ b/src/test/ui/issues/issue-51154.rs
@@ -0,0 +1,6 @@
+fn foo<F: FnMut()>() {
+    let _: Box<F> = Box::new(|| ());
+    //~^ ERROR mismatched types
+}
+
+fn main() {}
diff --git a/src/test/ui/issues/issue-51154.stderr b/src/test/ui/issues/issue-51154.stderr
new file mode 100644
index 00000000000..3c3428f3096
--- /dev/null
+++ b/src/test/ui/issues/issue-51154.stderr
@@ -0,0 +1,15 @@
+error[E0308]: mismatched types
+  --> $DIR/issue-51154.rs:2:30
+   |
+LL | fn foo<F: FnMut()>() {
+   |        - this type parameter
+LL |     let _: Box<F> = Box::new(|| ());
+   |                              ^^^^^ expected type parameter `F`, found closure
+   |
+   = note: expected type parameter `F`
+                     found closure `[closure@$DIR/issue-51154.rs:2:30: 2:35]`
+   = help: every closure has a distinct type and so could not always match the caller-chosen type of parameter `F`
+
+error: aborting due to previous error
+
+For more information about this error, try `rustc --explain E0308`.