about summary refs log tree commit diff
path: root/tests
diff options
context:
space:
mode:
Diffstat (limited to 'tests')
-rw-r--r--tests/ui/lifetimes/issue-105675.rs8
-rw-r--r--tests/ui/lifetimes/issue-105675.stderr104
-rw-r--r--tests/ui/lifetimes/issue-79187-2.stderr4
3 files changed, 46 insertions, 70 deletions
diff --git a/tests/ui/lifetimes/issue-105675.rs b/tests/ui/lifetimes/issue-105675.rs
index a01fbef4b3b..58d8be8b65f 100644
--- a/tests/ui/lifetimes/issue-105675.rs
+++ b/tests/ui/lifetimes/issue-105675.rs
@@ -1,13 +1,11 @@
-fn thing(x: impl FnOnce(&u32, &u32)) {}
+fn thing(x: impl FnOnce(&u32, &u32, u32)) {}
 
 fn main() {
-    let f = |_, _| ();
+    let f = | _ , y: &u32 , z | ();
     thing(f);
     //~^ ERROR mismatched types
     //~^^ ERROR mismatched types
-    //~^^^ ERROR implementation of `FnOnce` is not general enough
-    //~^^^^ ERROR implementation of `FnOnce` is not general enough
-    let f = |x, y| ();
+    let f = | x, y: _  , z: u32 | ();
     thing(f);
     //~^ ERROR mismatched types
     //~^^ ERROR mismatched types
diff --git a/tests/ui/lifetimes/issue-105675.stderr b/tests/ui/lifetimes/issue-105675.stderr
index 3d8172ad14a..66415f72bcb 100644
--- a/tests/ui/lifetimes/issue-105675.stderr
+++ b/tests/ui/lifetimes/issue-105675.stderr
@@ -4,22 +4,22 @@ error[E0308]: mismatched types
 LL |     thing(f);
    |     ^^^^^^^^ one type is more general than the other
    |
-   = note: expected trait `for<'a, 'b> FnOnce<(&'a u32, &'b u32)>`
-              found trait `FnOnce<(&u32, &u32)>`
+   = note: expected trait `for<'a, 'b> FnOnce<(&'a u32, &'b u32, u32)>`
+              found trait `for<'a> FnOnce<(&u32, &'a u32, u32)>`
 note: this closure does not fulfill the lifetime requirements
   --> $DIR/issue-105675.rs:4:13
    |
-LL |     let f = |_, _| ();
-   |             ^^^^^^
+LL |     let f = | _ , y: &u32 , z | ();
+   |             ^^^^^^^^^^^^^^^^^^^
 note: the lifetime requirement is introduced here
   --> $DIR/issue-105675.rs:1:18
    |
-LL | fn thing(x: impl FnOnce(&u32, &u32)) {}
-   |                  ^^^^^^^^^^^^^^^^^^
+LL | fn thing(x: impl FnOnce(&u32, &u32, u32)) {}
+   |                  ^^^^^^^^^^^^^^^^^^^^^^^
 help: consider specifying the type of the closure parameters
    |
-LL |     let f = |_: &_, _: &_| ();
-   |             ~~~~~~~~~~~~~~
+LL |     let f = |_: &_, y: &u32, z| ();
+   |             ~~~~~~~~~~~~~~~~~~~
 
 error[E0308]: mismatched types
   --> $DIR/issue-105675.rs:5:5
@@ -27,105 +27,83 @@ error[E0308]: mismatched types
 LL |     thing(f);
    |     ^^^^^^^^ one type is more general than the other
    |
-   = note: expected trait `for<'a, 'b> FnOnce<(&'a u32, &'b u32)>`
-              found trait `FnOnce<(&u32, &u32)>`
+   = note: expected trait `for<'a, 'b> FnOnce<(&'a u32, &'b u32, u32)>`
+              found trait `for<'a> FnOnce<(&u32, &'a u32, u32)>`
 note: this closure does not fulfill the lifetime requirements
   --> $DIR/issue-105675.rs:4:13
    |
-LL |     let f = |_, _| ();
-   |             ^^^^^^
+LL |     let f = | _ , y: &u32 , z | ();
+   |             ^^^^^^^^^^^^^^^^^^^
 note: the lifetime requirement is introduced here
   --> $DIR/issue-105675.rs:1:18
    |
-LL | fn thing(x: impl FnOnce(&u32, &u32)) {}
-   |                  ^^^^^^^^^^^^^^^^^^
-help: consider specifying the type of the closure parameters
-   |
-LL |     let f = |_: &_, _: &_| ();
-   |             ~~~~~~~~~~~~~~
-
-error: implementation of `FnOnce` is not general enough
-  --> $DIR/issue-105675.rs:5:5
-   |
-LL |     thing(f);
-   |     ^^^^^^^^ implementation of `FnOnce` is not general enough
-   |
-   = note: closure with signature `fn(&'2 u32, &u32)` must implement `FnOnce<(&'1 u32, &u32)>`, for any lifetime `'1`...
-   = note: ...but it actually implements `FnOnce<(&'2 u32, &u32)>`, for some specific lifetime `'2`
-
-error: implementation of `FnOnce` is not general enough
-  --> $DIR/issue-105675.rs:5:5
-   |
-LL |     thing(f);
-   |     ^^^^^^^^ implementation of `FnOnce` is not general enough
-   |
-   = note: closure with signature `fn(&u32, &'2 u32)` must implement `FnOnce<(&u32, &'1 u32)>`, for any lifetime `'1`...
-   = note: ...but it actually implements `FnOnce<(&u32, &'2 u32)>`, for some specific lifetime `'2`
+LL | fn thing(x: impl FnOnce(&u32, &u32, u32)) {}
+   |                  ^^^^^^^^^^^^^^^^^^^^^^^
 
 error[E0308]: mismatched types
-  --> $DIR/issue-105675.rs:11:5
+  --> $DIR/issue-105675.rs:9:5
    |
 LL |     thing(f);
    |     ^^^^^^^^ one type is more general than the other
    |
-   = note: expected trait `for<'a, 'b> FnOnce<(&'a u32, &'b u32)>`
-              found trait `FnOnce<(&u32, &u32)>`
+   = note: expected trait `for<'a, 'b> FnOnce<(&'a u32, &'b u32, u32)>`
+              found trait `FnOnce<(&u32, &u32, u32)>`
 note: this closure does not fulfill the lifetime requirements
-  --> $DIR/issue-105675.rs:10:13
+  --> $DIR/issue-105675.rs:8:13
    |
-LL |     let f = |x, y| ();
-   |             ^^^^^^
+LL |     let f = | x, y: _  , z: u32 | ();
+   |             ^^^^^^^^^^^^^^^^^^^^^
 note: the lifetime requirement is introduced here
   --> $DIR/issue-105675.rs:1:18
    |
-LL | fn thing(x: impl FnOnce(&u32, &u32)) {}
-   |                  ^^^^^^^^^^^^^^^^^^
+LL | fn thing(x: impl FnOnce(&u32, &u32, u32)) {}
+   |                  ^^^^^^^^^^^^^^^^^^^^^^^
 help: consider specifying the type of the closure parameters
    |
-LL |     let f = |x: &_, y: &_| ();
-   |             ~~~~~~~~~~~~~~
+LL |     let f = |x: &_, y: &_, z: u32| ();
+   |             ~~~~~~~~~~~~~~~~~~~~~~
 
 error[E0308]: mismatched types
-  --> $DIR/issue-105675.rs:11:5
+  --> $DIR/issue-105675.rs:9:5
    |
 LL |     thing(f);
    |     ^^^^^^^^ one type is more general than the other
    |
-   = note: expected trait `for<'a, 'b> FnOnce<(&'a u32, &'b u32)>`
-              found trait `FnOnce<(&u32, &u32)>`
+   = note: expected trait `for<'a, 'b> FnOnce<(&'a u32, &'b u32, u32)>`
+              found trait `FnOnce<(&u32, &u32, u32)>`
 note: this closure does not fulfill the lifetime requirements
-  --> $DIR/issue-105675.rs:10:13
+  --> $DIR/issue-105675.rs:8:13
    |
-LL |     let f = |x, y| ();
-   |             ^^^^^^
+LL |     let f = | x, y: _  , z: u32 | ();
+   |             ^^^^^^^^^^^^^^^^^^^^^
 note: the lifetime requirement is introduced here
   --> $DIR/issue-105675.rs:1:18
    |
-LL | fn thing(x: impl FnOnce(&u32, &u32)) {}
-   |                  ^^^^^^^^^^^^^^^^^^
+LL | fn thing(x: impl FnOnce(&u32, &u32, u32)) {}
+   |                  ^^^^^^^^^^^^^^^^^^^^^^^
 help: consider specifying the type of the closure parameters
    |
-LL |     let f = |x: &_, y: &_| ();
-   |             ~~~~~~~~~~~~~~
+LL |     let f = |x: &_, y: &_, z: u32| ();
+   |             ~~~~~~~~~~~~~~~~~~~~~~
 
 error: implementation of `FnOnce` is not general enough
-  --> $DIR/issue-105675.rs:11:5
+  --> $DIR/issue-105675.rs:9:5
    |
 LL |     thing(f);
    |     ^^^^^^^^ implementation of `FnOnce` is not general enough
    |
-   = note: closure with signature `fn(&'2 u32, &u32)` must implement `FnOnce<(&'1 u32, &u32)>`, for any lifetime `'1`...
-   = note: ...but it actually implements `FnOnce<(&'2 u32, &u32)>`, for some specific lifetime `'2`
+   = note: closure with signature `fn(&'2 u32, &u32, u32)` must implement `FnOnce<(&'1 u32, &u32, u32)>`, for any lifetime `'1`...
+   = note: ...but it actually implements `FnOnce<(&'2 u32, &u32, u32)>`, for some specific lifetime `'2`
 
 error: implementation of `FnOnce` is not general enough
-  --> $DIR/issue-105675.rs:11:5
+  --> $DIR/issue-105675.rs:9:5
    |
 LL |     thing(f);
    |     ^^^^^^^^ implementation of `FnOnce` is not general enough
    |
-   = note: closure with signature `fn(&u32, &'2 u32)` must implement `FnOnce<(&u32, &'1 u32)>`, for any lifetime `'1`...
-   = note: ...but it actually implements `FnOnce<(&u32, &'2 u32)>`, for some specific lifetime `'2`
+   = note: closure with signature `fn(&u32, &'2 u32, u32)` must implement `FnOnce<(&u32, &'1 u32, u32)>`, for any lifetime `'1`...
+   = note: ...but it actually implements `FnOnce<(&u32, &'2 u32, u32)>`, for some specific lifetime `'2`
 
-error: aborting due to 8 previous errors
+error: aborting due to 6 previous errors
 
 For more information about this error, try `rustc --explain E0308`.
diff --git a/tests/ui/lifetimes/issue-79187-2.stderr b/tests/ui/lifetimes/issue-79187-2.stderr
index c14d3e0c61b..75fd87b3fe9 100644
--- a/tests/ui/lifetimes/issue-79187-2.stderr
+++ b/tests/ui/lifetimes/issue-79187-2.stderr
@@ -43,9 +43,9 @@ note: the lifetime requirement is introduced here
    |
 LL | fn take_foo(_: impl Foo) {}
    |                     ^^^
-help: consider changing the type of the closure parameters
+help: consider specifying the type of the closure parameters
    |
-LL |     take_foo(|_: &_| a);
+LL |     take_foo(|a: &_| a);
    |              ~~~~~~~
 
 error[E0308]: mismatched types