summaryrefslogtreecommitdiffstats
path: root/tests/ui/unboxed-closures
diff options
context:
space:
mode:
Diffstat (limited to '')
-rw-r--r--tests/ui/unboxed-closures/unboxed-closure-no-cyclic-sig.rs2
-rw-r--r--tests/ui/unboxed-closures/unboxed-closure-no-cyclic-sig.stderr2
-rw-r--r--tests/ui/unboxed-closures/unboxed-closures-fnmut-as-fn.stderr4
-rw-r--r--tests/ui/unboxed-closures/unboxed-closures-type-mismatch-closure-from-another-scope.rs23
-rw-r--r--tests/ui/unboxed-closures/unboxed-closures-type-mismatch-closure-from-another-scope.stderr44
-rw-r--r--tests/ui/unboxed-closures/unboxed-closures-type-mismatch.rs32
-rw-r--r--tests/ui/unboxed-closures/unboxed-closures-type-mismatch.stderr123
-rw-r--r--tests/ui/unboxed-closures/unboxed-closures-unsafe-extern-fn.stderr6
-rw-r--r--tests/ui/unboxed-closures/unboxed-closures-wrong-abi.stderr12
-rw-r--r--tests/ui/unboxed-closures/unboxed-closures-wrong-arg-type-extern-fn.stderr6
10 files changed, 235 insertions, 19 deletions
diff --git a/tests/ui/unboxed-closures/unboxed-closure-no-cyclic-sig.rs b/tests/ui/unboxed-closures/unboxed-closure-no-cyclic-sig.rs
index 9d0aa4132..057bdf0f6 100644
--- a/tests/ui/unboxed-closures/unboxed-closure-no-cyclic-sig.rs
+++ b/tests/ui/unboxed-closures/unboxed-closure-no-cyclic-sig.rs
@@ -5,5 +5,5 @@
fn g<F>(_: F) where F: FnOnce(Option<F>) {}
fn main() {
- g(|_| { }); //~ ERROR closure/generator type that references itself
+ g(|_| { }); //~ ERROR closure/coroutine type that references itself
}
diff --git a/tests/ui/unboxed-closures/unboxed-closure-no-cyclic-sig.stderr b/tests/ui/unboxed-closures/unboxed-closure-no-cyclic-sig.stderr
index 6d5dbca05..9d3c1902c 100644
--- a/tests/ui/unboxed-closures/unboxed-closure-no-cyclic-sig.stderr
+++ b/tests/ui/unboxed-closures/unboxed-closure-no-cyclic-sig.stderr
@@ -1,4 +1,4 @@
-error[E0644]: closure/generator type that references itself
+error[E0644]: closure/coroutine type that references itself
--> $DIR/unboxed-closure-no-cyclic-sig.rs:8:7
|
LL | g(|_| { });
diff --git a/tests/ui/unboxed-closures/unboxed-closures-fnmut-as-fn.stderr b/tests/ui/unboxed-closures/unboxed-closures-fnmut-as-fn.stderr
index 0ea1c1dcd..ce4d0fe25 100644
--- a/tests/ui/unboxed-closures/unboxed-closures-fnmut-as-fn.stderr
+++ b/tests/ui/unboxed-closures/unboxed-closures-fnmut-as-fn.stderr
@@ -1,8 +1,8 @@
-error[E0277]: expected a `Fn<(isize,)>` closure, found `S`
+error[E0277]: expected a `Fn(isize)` closure, found `S`
--> $DIR/unboxed-closures-fnmut-as-fn.rs:27:21
|
LL | let x = call_it(&S, 22);
- | ------- ^^ expected an `Fn<(isize,)>` closure, found `S`
+ | ------- ^^ expected an `Fn(isize)` closure, found `S`
| |
| required by a bound introduced by this call
|
diff --git a/tests/ui/unboxed-closures/unboxed-closures-type-mismatch-closure-from-another-scope.rs b/tests/ui/unboxed-closures/unboxed-closures-type-mismatch-closure-from-another-scope.rs
new file mode 100644
index 000000000..157383fed
--- /dev/null
+++ b/tests/ui/unboxed-closures/unboxed-closures-type-mismatch-closure-from-another-scope.rs
@@ -0,0 +1,23 @@
+fn test() {
+ let x = match **x { //~ ERROR
+ Some(&a) if { panic!() } => {}
+ };
+ let mut p = &x;
+
+ {
+ let mut closure = expect_sig(|p, y| *p = y);
+ closure(&mut p, &y); //~ ERROR
+ //~^ ERROR
+ }
+
+ deref(p); //~ ERROR
+}
+
+fn expect_sig<F>(f: F) -> F
+where
+ F: FnMut(&mut &i32, &i32),
+{
+ f
+}
+
+fn main() {}
diff --git a/tests/ui/unboxed-closures/unboxed-closures-type-mismatch-closure-from-another-scope.stderr b/tests/ui/unboxed-closures/unboxed-closures-type-mismatch-closure-from-another-scope.stderr
new file mode 100644
index 000000000..1470c32d7
--- /dev/null
+++ b/tests/ui/unboxed-closures/unboxed-closures-type-mismatch-closure-from-another-scope.stderr
@@ -0,0 +1,44 @@
+error[E0425]: cannot find value `x` in this scope
+ --> $DIR/unboxed-closures-type-mismatch-closure-from-another-scope.rs:2:21
+ |
+LL | let x = match **x {
+ | ^ not found in this scope
+
+error[E0425]: cannot find value `y` in this scope
+ --> $DIR/unboxed-closures-type-mismatch-closure-from-another-scope.rs:9:26
+ |
+LL | closure(&mut p, &y);
+ | ^ help: a local variable with a similar name exists: `p`
+
+error[E0308]: mismatched types
+ --> $DIR/unboxed-closures-type-mismatch-closure-from-another-scope.rs:9:17
+ |
+LL | closure(&mut p, &y);
+ | ------- ^^^^^^ expected `&mut &i32`, found `&mut &()`
+ | |
+ | arguments to this function are incorrect
+ |
+ = note: expected mutable reference `&mut &i32`
+ found mutable reference `&mut &()`
+note: closure parameter defined here
+ --> $DIR/unboxed-closures-type-mismatch-closure-from-another-scope.rs:8:39
+ |
+LL | let mut closure = expect_sig(|p, y| *p = y);
+ | ^
+
+error[E0425]: cannot find function `deref` in this scope
+ --> $DIR/unboxed-closures-type-mismatch-closure-from-another-scope.rs:13:5
+ |
+LL | deref(p);
+ | ^^^^^ not found in this scope
+ |
+help: use the `.` operator to call the method `Deref::deref` on `&&()`
+ |
+LL - deref(p);
+LL + p.deref();
+ |
+
+error: aborting due to 4 previous errors
+
+Some errors have detailed explanations: E0308, E0425.
+For more information about an error, try `rustc --explain E0308`.
diff --git a/tests/ui/unboxed-closures/unboxed-closures-type-mismatch.rs b/tests/ui/unboxed-closures/unboxed-closures-type-mismatch.rs
index 9f76849e5..0999f61b0 100644
--- a/tests/ui/unboxed-closures/unboxed-closures-type-mismatch.rs
+++ b/tests/ui/unboxed-closures/unboxed-closures-type-mismatch.rs
@@ -1,7 +1,35 @@
use std::ops::FnMut;
-pub fn main() {
+fn main() {
let mut f = |x: isize, y: isize| -> isize { x + y };
- let z = f(1_usize, 2); //~ ERROR mismatched types
+ let z = f(1_usize, 2); //~ ERROR mismatched types
println!("{}", z);
+ let mut g = |x, y| { x + y };
+ let y = g(1_i32, 2);
+ let z = g(1_usize, 2); //~ ERROR mismatched types
+ println!("{}", z);
+}
+
+trait T {
+ fn bar(&self) {
+ let identity = |x| x;
+ identity(1u8);
+ identity(1u16); //~ ERROR mismatched types
+ let identity = |x| x;
+ identity(&1u8);
+ identity(&1u16); //~ ERROR mismatched types
+ }
+}
+
+struct S;
+
+impl T for S {
+ fn bar(&self) {
+ let identity = |x| x;
+ identity(1u8);
+ identity(1u16); //~ ERROR mismatched types
+ let identity = |x| x;
+ identity(&1u8);
+ identity(&1u16); //~ ERROR mismatched types
+ }
}
diff --git a/tests/ui/unboxed-closures/unboxed-closures-type-mismatch.stderr b/tests/ui/unboxed-closures/unboxed-closures-type-mismatch.stderr
index 455f83f57..327df50e6 100644
--- a/tests/ui/unboxed-closures/unboxed-closures-type-mismatch.stderr
+++ b/tests/ui/unboxed-closures/unboxed-closures-type-mismatch.stderr
@@ -16,6 +16,127 @@ help: change the type of the numeric literal from `usize` to `isize`
LL | let z = f(1_isize, 2);
| ~~~~~
-error: aborting due to previous error
+error[E0308]: mismatched types
+ --> $DIR/unboxed-closures-type-mismatch.rs:9:15
+ |
+LL | let z = g(1_usize, 2);
+ | - ^^^^^^^ expected `i32`, found `usize`
+ | |
+ | arguments to this function are incorrect
+ |
+note: expected because the closure was earlier called with an argument of type `i32`
+ --> $DIR/unboxed-closures-type-mismatch.rs:8:15
+ |
+LL | let y = g(1_i32, 2);
+ | - ^^^^^ expected because this argument is of type `i32`
+ | |
+ | in this closure call
+note: closure parameter defined here
+ --> $DIR/unboxed-closures-type-mismatch.rs:7:18
+ |
+LL | let mut g = |x, y| { x + y };
+ | ^
+help: change the type of the numeric literal from `usize` to `i32`
+ |
+LL | let z = g(1_i32, 2);
+ | ~~~
+
+error[E0308]: mismatched types
+ --> $DIR/unboxed-closures-type-mismatch.rs:17:18
+ |
+LL | identity(1u16);
+ | -------- ^^^^ expected `u8`, found `u16`
+ | |
+ | arguments to this function are incorrect
+ |
+note: expected because the closure was earlier called with an argument of type `u8`
+ --> $DIR/unboxed-closures-type-mismatch.rs:16:18
+ |
+LL | identity(1u8);
+ | -------- ^^^ expected because this argument is of type `u8`
+ | |
+ | in this closure call
+note: closure parameter defined here
+ --> $DIR/unboxed-closures-type-mismatch.rs:15:25
+ |
+LL | let identity = |x| x;
+ | ^
+help: change the type of the numeric literal from `u16` to `u8`
+ |
+LL | identity(1u8);
+ | ~~
+
+error[E0308]: mismatched types
+ --> $DIR/unboxed-closures-type-mismatch.rs:20:18
+ |
+LL | identity(&1u16);
+ | -------- ^^^^^ expected `&u8`, found `&u16`
+ | |
+ | arguments to this function are incorrect
+ |
+ = note: expected reference `&u8`
+ found reference `&u16`
+note: expected because the closure was earlier called with an argument of type `&u8`
+ --> $DIR/unboxed-closures-type-mismatch.rs:19:18
+ |
+LL | identity(&1u8);
+ | -------- ^^^^ expected because this argument is of type `&u8`
+ | |
+ | in this closure call
+note: closure parameter defined here
+ --> $DIR/unboxed-closures-type-mismatch.rs:18:25
+ |
+LL | let identity = |x| x;
+ | ^
+
+error[E0308]: mismatched types
+ --> $DIR/unboxed-closures-type-mismatch.rs:30:18
+ |
+LL | identity(1u16);
+ | -------- ^^^^ expected `u8`, found `u16`
+ | |
+ | arguments to this function are incorrect
+ |
+note: expected because the closure was earlier called with an argument of type `u8`
+ --> $DIR/unboxed-closures-type-mismatch.rs:29:18
+ |
+LL | identity(1u8);
+ | -------- ^^^ expected because this argument is of type `u8`
+ | |
+ | in this closure call
+note: closure parameter defined here
+ --> $DIR/unboxed-closures-type-mismatch.rs:28:25
+ |
+LL | let identity = |x| x;
+ | ^
+help: change the type of the numeric literal from `u16` to `u8`
+ |
+LL | identity(1u8);
+ | ~~
+
+error[E0308]: mismatched types
+ --> $DIR/unboxed-closures-type-mismatch.rs:33:18
+ |
+LL | identity(&1u16);
+ | -------- ^^^^^ expected `&u8`, found `&u16`
+ | |
+ | arguments to this function are incorrect
+ |
+ = note: expected reference `&u8`
+ found reference `&u16`
+note: expected because the closure was earlier called with an argument of type `&u8`
+ --> $DIR/unboxed-closures-type-mismatch.rs:32:18
+ |
+LL | identity(&1u8);
+ | -------- ^^^^ expected because this argument is of type `&u8`
+ | |
+ | in this closure call
+note: closure parameter defined here
+ --> $DIR/unboxed-closures-type-mismatch.rs:31:25
+ |
+LL | let identity = |x| x;
+ | ^
+
+error: aborting due to 6 previous errors
For more information about this error, try `rustc --explain E0308`.
diff --git a/tests/ui/unboxed-closures/unboxed-closures-unsafe-extern-fn.stderr b/tests/ui/unboxed-closures/unboxed-closures-unsafe-extern-fn.stderr
index 802696e1b..d836af2b0 100644
--- a/tests/ui/unboxed-closures/unboxed-closures-unsafe-extern-fn.stderr
+++ b/tests/ui/unboxed-closures/unboxed-closures-unsafe-extern-fn.stderr
@@ -1,4 +1,4 @@
-error[E0277]: expected a `Fn<(&isize,)>` closure, found `for<'a> unsafe fn(&'a isize) -> isize {square}`
+error[E0277]: expected a `Fn(&isize)` closure, found `for<'a> unsafe fn(&'a isize) -> isize {square}`
--> $DIR/unboxed-closures-unsafe-extern-fn.rs:20:21
|
LL | let x = call_it(&square, 22);
@@ -14,7 +14,7 @@ note: required by a bound in `call_it`
LL | fn call_it<F: Fn(&isize) -> isize>(_: &F, _: isize) -> isize {
| ^^^^^^^^^^^^^^^^^^^ required by this bound in `call_it`
-error[E0277]: expected a `FnMut<(&isize,)>` closure, found `for<'a> unsafe fn(&'a isize) -> isize {square}`
+error[E0277]: expected a `FnMut(&isize)` closure, found `for<'a> unsafe fn(&'a isize) -> isize {square}`
--> $DIR/unboxed-closures-unsafe-extern-fn.rs:25:25
|
LL | let y = call_it_mut(&mut square, 22);
@@ -30,7 +30,7 @@ note: required by a bound in `call_it_mut`
LL | fn call_it_mut<F: FnMut(&isize) -> isize>(_: &mut F, _: isize) -> isize {
| ^^^^^^^^^^^^^^^^^^^^^^ required by this bound in `call_it_mut`
-error[E0277]: expected a `FnOnce<(&isize,)>` closure, found `for<'a> unsafe fn(&'a isize) -> isize {square}`
+error[E0277]: expected a `FnOnce(&isize)` closure, found `for<'a> unsafe fn(&'a isize) -> isize {square}`
--> $DIR/unboxed-closures-unsafe-extern-fn.rs:30:26
|
LL | let z = call_it_once(square, 22);
diff --git a/tests/ui/unboxed-closures/unboxed-closures-wrong-abi.stderr b/tests/ui/unboxed-closures/unboxed-closures-wrong-abi.stderr
index 0bbb9836c..c0dcf83a5 100644
--- a/tests/ui/unboxed-closures/unboxed-closures-wrong-abi.stderr
+++ b/tests/ui/unboxed-closures/unboxed-closures-wrong-abi.stderr
@@ -1,8 +1,8 @@
-error[E0277]: expected a `Fn<(&isize,)>` closure, found `for<'a> extern "C" fn(&'a isize) -> isize {square}`
+error[E0277]: expected a `Fn(&isize)` closure, found `for<'a> extern "C" fn(&'a isize) -> isize {square}`
--> $DIR/unboxed-closures-wrong-abi.rs:20:21
|
LL | let x = call_it(&square, 22);
- | ------- ^^^^^^^ expected an `Fn<(&isize,)>` closure, found `for<'a> extern "C" fn(&'a isize) -> isize {square}`
+ | ------- ^^^^^^^ expected an `Fn(&isize)` closure, found `for<'a> extern "C" fn(&'a isize) -> isize {square}`
| |
| required by a bound introduced by this call
|
@@ -13,11 +13,11 @@ note: required by a bound in `call_it`
LL | fn call_it<F: Fn(&isize) -> isize>(_: &F, _: isize) -> isize {
| ^^^^^^^^^^^^^^^^^^^ required by this bound in `call_it`
-error[E0277]: expected a `FnMut<(&isize,)>` closure, found `for<'a> extern "C" fn(&'a isize) -> isize {square}`
+error[E0277]: expected a `FnMut(&isize)` closure, found `for<'a> extern "C" fn(&'a isize) -> isize {square}`
--> $DIR/unboxed-closures-wrong-abi.rs:25:25
|
LL | let y = call_it_mut(&mut square, 22);
- | ----------- ^^^^^^^^^^^ expected an `FnMut<(&isize,)>` closure, found `for<'a> extern "C" fn(&'a isize) -> isize {square}`
+ | ----------- ^^^^^^^^^^^ expected an `FnMut(&isize)` closure, found `for<'a> extern "C" fn(&'a isize) -> isize {square}`
| |
| required by a bound introduced by this call
|
@@ -28,11 +28,11 @@ note: required by a bound in `call_it_mut`
LL | fn call_it_mut<F: FnMut(&isize) -> isize>(_: &mut F, _: isize) -> isize {
| ^^^^^^^^^^^^^^^^^^^^^^ required by this bound in `call_it_mut`
-error[E0277]: expected a `FnOnce<(&isize,)>` closure, found `for<'a> extern "C" fn(&'a isize) -> isize {square}`
+error[E0277]: expected a `FnOnce(&isize)` closure, found `for<'a> extern "C" fn(&'a isize) -> isize {square}`
--> $DIR/unboxed-closures-wrong-abi.rs:30:26
|
LL | let z = call_it_once(square, 22);
- | ------------ ^^^^^^ expected an `FnOnce<(&isize,)>` closure, found `for<'a> extern "C" fn(&'a isize) -> isize {square}`
+ | ------------ ^^^^^^ expected an `FnOnce(&isize)` closure, found `for<'a> extern "C" fn(&'a isize) -> isize {square}`
| |
| required by a bound introduced by this call
|
diff --git a/tests/ui/unboxed-closures/unboxed-closures-wrong-arg-type-extern-fn.stderr b/tests/ui/unboxed-closures/unboxed-closures-wrong-arg-type-extern-fn.stderr
index 31a66790c..d261c38f5 100644
--- a/tests/ui/unboxed-closures/unboxed-closures-wrong-arg-type-extern-fn.stderr
+++ b/tests/ui/unboxed-closures/unboxed-closures-wrong-arg-type-extern-fn.stderr
@@ -1,4 +1,4 @@
-error[E0277]: expected a `Fn<(&isize,)>` closure, found `unsafe fn(isize) -> isize {square}`
+error[E0277]: expected a `Fn(&isize)` closure, found `unsafe fn(isize) -> isize {square}`
--> $DIR/unboxed-closures-wrong-arg-type-extern-fn.rs:21:21
|
LL | let x = call_it(&square, 22);
@@ -14,7 +14,7 @@ note: required by a bound in `call_it`
LL | fn call_it<F: Fn(&isize) -> isize>(_: &F, _: isize) -> isize {
| ^^^^^^^^^^^^^^^^^^^ required by this bound in `call_it`
-error[E0277]: expected a `FnMut<(&isize,)>` closure, found `unsafe fn(isize) -> isize {square}`
+error[E0277]: expected a `FnMut(&isize)` closure, found `unsafe fn(isize) -> isize {square}`
--> $DIR/unboxed-closures-wrong-arg-type-extern-fn.rs:26:25
|
LL | let y = call_it_mut(&mut square, 22);
@@ -30,7 +30,7 @@ note: required by a bound in `call_it_mut`
LL | fn call_it_mut<F: FnMut(&isize) -> isize>(_: &mut F, _: isize) -> isize {
| ^^^^^^^^^^^^^^^^^^^^^^ required by this bound in `call_it_mut`
-error[E0277]: expected a `FnOnce<(&isize,)>` closure, found `unsafe fn(isize) -> isize {square}`
+error[E0277]: expected a `FnOnce(&isize)` closure, found `unsafe fn(isize) -> isize {square}`
--> $DIR/unboxed-closures-wrong-arg-type-extern-fn.rs:31:26
|
LL | let z = call_it_once(square, 22);