Skip to content

Commit

Permalink
Fix expectations on some ui tests involving FnOnce.
Browse files Browse the repository at this point in the history
  • Loading branch information
qnighy authored and crlf0710 committed Apr 4, 2019
1 parent 219097e commit e55d82c
Show file tree
Hide file tree
Showing 7 changed files with 42 additions and 72 deletions.
32 changes: 10 additions & 22 deletions src/test/ui/borrowck/two-phase-nonrecv-autoref.ast.nll.stderr
Expand Up @@ -7,7 +7,7 @@ LL | f(f(10));
| first mutable borrow occurs here
| first borrow later used by call

error[E0382]: use of moved value: `*f`
error[E0382]: use of moved value: `f`
--> $DIR/two-phase-nonrecv-autoref.rs:69:11
|
LL | fn twice_ten_so<F: FnOnce(i32) -> i32>(f: Box<F>) {
Expand All @@ -17,7 +17,7 @@ LL | f(f(10));
| |
| value moved here
|
= note: move occurs because `*f` has type `F`, which does not implement the `Copy` trait
= note: move occurs because `f` has type `std::boxed::Box<F>`, which does not implement the `Copy` trait

error[E0499]: cannot borrow `*f` as mutable more than once at a time
--> $DIR/two-phase-nonrecv-autoref.rs:76:11
Expand All @@ -28,30 +28,18 @@ LL | f(f(10));
| first mutable borrow occurs here
| first borrow later used by call

error[E0161]: cannot move a value of type dyn std::ops::FnOnce(i32) -> i32: the size of dyn std::ops::FnOnce(i32) -> i32 cannot be statically determined
--> $DIR/two-phase-nonrecv-autoref.rs:85:9
|
LL | f(f(10));
| ^

error[E0161]: cannot move a value of type dyn std::ops::FnOnce(i32) -> i32: the size of dyn std::ops::FnOnce(i32) -> i32 cannot be statically determined
--> $DIR/two-phase-nonrecv-autoref.rs:85:11
|
LL | f(f(10));
| ^

error[E0382]: use of moved value: `*f`
error[E0382]: use of moved value: `f`
--> $DIR/two-phase-nonrecv-autoref.rs:85:11
|
LL | f(f(10));
| - ^ value used here after move
| |
| value moved here
|
= note: move occurs because `*f` has type `dyn std::ops::FnOnce(i32) -> i32`, which does not implement the `Copy` trait
= note: move occurs because `f` has type `std::boxed::Box<dyn std::ops::FnOnce(i32) -> i32>`, which does not implement the `Copy` trait

error[E0502]: cannot borrow `a` as immutable because it is also borrowed as mutable
--> $DIR/two-phase-nonrecv-autoref.rs:129:27
--> $DIR/two-phase-nonrecv-autoref.rs:125:27
|
LL | double_access(&mut a, &a);
| ------------- ------ ^^ immutable borrow occurs here
Expand All @@ -60,7 +48,7 @@ LL | double_access(&mut a, &a);
| mutable borrow later used by call

error[E0502]: cannot borrow `i` as immutable because it is also borrowed as mutable
--> $DIR/two-phase-nonrecv-autoref.rs:157:7
--> $DIR/two-phase-nonrecv-autoref.rs:153:7
|
LL | i[i[3]] = 4;
| --^----
Expand All @@ -70,7 +58,7 @@ LL | i[i[3]] = 4;
| mutable borrow later used here

error[E0502]: cannot borrow `i` as immutable because it is also borrowed as mutable
--> $DIR/two-phase-nonrecv-autoref.rs:163:7
--> $DIR/two-phase-nonrecv-autoref.rs:159:7
|
LL | i[i[3]] = i[4];
| --^----
Expand All @@ -79,7 +67,7 @@ LL | i[i[3]] = i[4];
| mutable borrow occurs here
| mutable borrow later used here

error: aborting due to 9 previous errors
error: aborting due to 7 previous errors

Some errors occurred: E0161, E0382, E0499, E0502.
For more information about an error, try `rustc --explain E0161`.
Some errors occurred: E0382, E0499, E0502.
For more information about an error, try `rustc --explain E0382`.
22 changes: 11 additions & 11 deletions src/test/ui/borrowck/two-phase-nonrecv-autoref.ast.stderr
Expand Up @@ -15,15 +15,15 @@ LL | f(f(10));
| | second mutable borrow occurs here
| first mutable borrow occurs here

error[E0382]: use of moved value: `*f`
error[E0382]: use of moved value: `f`
--> $DIR/two-phase-nonrecv-autoref.rs:69:11
|
LL | f(f(10));
| - ^ value used here after move
| |
| value moved here
|
= note: move occurs because `*f` has type `F`, which does not implement the `Copy` trait
= note: move occurs because `f` has type `std::boxed::Box<F>`, which does not implement the `Copy` trait

error[E0499]: cannot borrow `*f` as mutable more than once at a time
--> $DIR/two-phase-nonrecv-autoref.rs:76:11
Expand All @@ -34,18 +34,18 @@ LL | f(f(10));
| | second mutable borrow occurs here
| first mutable borrow occurs here

error[E0382]: use of moved value: `*f`
error[E0382]: use of moved value: `f`
--> $DIR/two-phase-nonrecv-autoref.rs:85:11
|
LL | f(f(10));
| - ^ value used here after move
| |
| value moved here
|
= note: move occurs because `*f` has type `(dyn std::ops::FnOnce(i32) -> i32 + 'static)`, which does not implement the `Copy` trait
= note: move occurs because `f` has type `std::boxed::Box<(dyn std::ops::FnOnce(i32) -> i32 + 'static)>`, which does not implement the `Copy` trait

error[E0502]: cannot borrow `a` as immutable because it is also borrowed as mutable
--> $DIR/two-phase-nonrecv-autoref.rs:129:28
--> $DIR/two-phase-nonrecv-autoref.rs:125:28
|
LL | double_access(&mut a, &a);
| - ^- mutable borrow ends here
Expand All @@ -54,7 +54,7 @@ LL | double_access(&mut a, &a);
| mutable borrow occurs here

error[E0502]: cannot borrow `a` as immutable because it is also borrowed as mutable
--> $DIR/two-phase-nonrecv-autoref.rs:135:9
--> $DIR/two-phase-nonrecv-autoref.rs:131:9
|
LL | a.m(a.i(10));
| - ^ - mutable borrow ends here
Expand All @@ -63,7 +63,7 @@ LL | a.m(a.i(10));
| mutable borrow occurs here

error[E0502]: cannot borrow `i` as immutable because it is also borrowed as mutable
--> $DIR/two-phase-nonrecv-autoref.rs:157:7
--> $DIR/two-phase-nonrecv-autoref.rs:153:7
|
LL | i[i[3]] = 4;
| - ^ - mutable borrow ends here
Expand All @@ -72,7 +72,7 @@ LL | i[i[3]] = 4;
| mutable borrow occurs here

error[E0502]: cannot borrow `i` as immutable because it is also borrowed as mutable
--> $DIR/two-phase-nonrecv-autoref.rs:163:7
--> $DIR/two-phase-nonrecv-autoref.rs:159:7
|
LL | i[i[3]] = i[4];
| - ^ - mutable borrow ends here
Expand All @@ -81,7 +81,7 @@ LL | i[i[3]] = i[4];
| mutable borrow occurs here

error[E0502]: cannot borrow `v` as immutable because it is also borrowed as mutable
--> $DIR/two-phase-nonrecv-autoref.rs:172:12
--> $DIR/two-phase-nonrecv-autoref.rs:168:12
|
LL | v.push(v.len());
| - ^ - mutable borrow ends here
Expand All @@ -90,7 +90,7 @@ LL | v.push(v.len());
| mutable borrow occurs here

error[E0502]: cannot borrow `s` as immutable because it is also borrowed as mutable
--> $DIR/two-phase-nonrecv-autoref.rs:183:9
--> $DIR/two-phase-nonrecv-autoref.rs:179:9
|
LL | s.m(s.i(10));
| - ^ - mutable borrow ends here
Expand All @@ -99,7 +99,7 @@ LL | s.m(s.i(10));
| mutable borrow occurs here

error[E0502]: cannot borrow `t` as immutable because it is also borrowed as mutable
--> $DIR/two-phase-nonrecv-autoref.rs:188:9
--> $DIR/two-phase-nonrecv-autoref.rs:184:9
|
LL | t.m(t.i(10));
| - ^ - mutable borrow ends here
Expand Down
36 changes: 11 additions & 25 deletions src/test/ui/borrowck/two-phase-nonrecv-autoref.nll.stderr
Expand Up @@ -7,17 +7,15 @@ LL | f(f(10));
| first mutable borrow occurs here
| first borrow later used by call

error[E0382]: use of moved value: `*f`
error[E0382]: use of moved value: `f`
--> $DIR/two-phase-nonrecv-autoref.rs:69:11
|
LL | fn twice_ten_so<F: FnOnce(i32) -> i32>(f: Box<F>) {
| - consider adding a `Copy` constraint to this type argument
| - move occurs because `f` has type `std::boxed::Box<F>`, which does not implement the `Copy` trait
LL | f(f(10));
| - ^ value used here after move
| |
| value moved here
|
= note: move occurs because `*f` has type `F`, which does not implement the `Copy` trait

error[E0499]: cannot borrow `*f` as mutable more than once at a time
--> $DIR/two-phase-nonrecv-autoref.rs:76:11
Expand All @@ -28,30 +26,18 @@ LL | f(f(10));
| first mutable borrow occurs here
| first borrow later used by call

error[E0161]: cannot move a value of type dyn std::ops::FnOnce(i32) -> i32: the size of dyn std::ops::FnOnce(i32) -> i32 cannot be statically determined
--> $DIR/two-phase-nonrecv-autoref.rs:85:9
|
LL | f(f(10));
| ^

error[E0161]: cannot move a value of type dyn std::ops::FnOnce(i32) -> i32: the size of dyn std::ops::FnOnce(i32) -> i32 cannot be statically determined
--> $DIR/two-phase-nonrecv-autoref.rs:85:11
|
LL | f(f(10));
| ^

error[E0382]: use of moved value: `*f`
error[E0382]: use of moved value: `f`
--> $DIR/two-phase-nonrecv-autoref.rs:85:11
|
LL | fn twice_ten_oo(f: Box<FnOnce(i32) -> i32>) {
| - move occurs because `f` has type `std::boxed::Box<dyn std::ops::FnOnce(i32) -> i32>`, which does not implement the `Copy` trait
LL | f(f(10));
| - ^ value used here after move
| |
| value moved here
|
= note: move occurs because `*f` has type `dyn std::ops::FnOnce(i32) -> i32`, which does not implement the `Copy` trait

error[E0502]: cannot borrow `a` as immutable because it is also borrowed as mutable
--> $DIR/two-phase-nonrecv-autoref.rs:129:27
--> $DIR/two-phase-nonrecv-autoref.rs:125:27
|
LL | double_access(&mut a, &a);
| ------------- ------ ^^ immutable borrow occurs here
Expand All @@ -60,7 +46,7 @@ LL | double_access(&mut a, &a);
| mutable borrow later used by call

error[E0502]: cannot borrow `i` as immutable because it is also borrowed as mutable
--> $DIR/two-phase-nonrecv-autoref.rs:157:7
--> $DIR/two-phase-nonrecv-autoref.rs:153:7
|
LL | i[i[3]] = 4;
| --^----
Expand All @@ -70,7 +56,7 @@ LL | i[i[3]] = 4;
| mutable borrow later used here

error[E0502]: cannot borrow `i` as immutable because it is also borrowed as mutable
--> $DIR/two-phase-nonrecv-autoref.rs:163:7
--> $DIR/two-phase-nonrecv-autoref.rs:159:7
|
LL | i[i[3]] = i[4];
| --^----
Expand All @@ -79,7 +65,7 @@ LL | i[i[3]] = i[4];
| mutable borrow occurs here
| mutable borrow later used here

error: aborting due to 9 previous errors
error: aborting due to 7 previous errors

Some errors occurred: E0161, E0382, E0499, E0502.
For more information about an error, try `rustc --explain E0161`.
Some errors occurred: E0382, E0499, E0502.
For more information about an error, try `rustc --explain E0382`.
16 changes: 6 additions & 10 deletions src/test/ui/borrowck/two-phase-nonrecv-autoref.rs
Expand Up @@ -67,9 +67,9 @@ fn overloaded_call_traits() {
}
fn twice_ten_so<F: FnOnce(i32) -> i32>(f: Box<F>) {
f(f(10));
//[nll]~^ ERROR use of moved value: `*f`
//[g2p]~^^ ERROR use of moved value: `*f`
//[ast]~^^^ ERROR use of moved value: `*f`
//[nll]~^ ERROR use of moved value: `f`
//[g2p]~^^ ERROR use of moved value: `f`
//[ast]~^^^ ERROR use of moved value: `f`
}

fn twice_ten_om(f: &mut FnMut(i32) -> i32) {
Expand All @@ -83,13 +83,9 @@ fn overloaded_call_traits() {
}
fn twice_ten_oo(f: Box<FnOnce(i32) -> i32>) {
f(f(10));
//[nll]~^ ERROR cannot move a value of type
//[nll]~^^ ERROR cannot move a value of type
//[nll]~^^^ ERROR use of moved value: `*f`
//[g2p]~^^^^ ERROR cannot move a value of type
//[g2p]~^^^^^ ERROR cannot move a value of type
//[g2p]~^^^^^^ ERROR use of moved value: `*f`
//[ast]~^^^^^^^ ERROR use of moved value: `*f`
//[nll]~^ ERROR use of moved value: `f`
//[g2p]~^^ ERROR use of moved value: `f`
//[ast]~^^^ ERROR use of moved value: `f`
}

twice_ten_sm(&mut |x| x + 1);
Expand Down
Expand Up @@ -18,7 +18,7 @@ LL | fn test2<F>(f: &F) where F: FnMut() {
LL | (*f)();
| ^^^^ `f` is a `&` reference, so the data it refers to cannot be borrowed as mutable

error[E0596]: cannot borrow `*f.f` as mutable, as it is behind a `&` reference
error[E0596]: cannot borrow `f.f` as mutable, as it is behind a `&` reference
--> $DIR/borrowck-call-is-borrow-issue-12224.rs:34:5
|
LL | fn test4(f: &Test) {
Expand Down
2 changes: 1 addition & 1 deletion src/test/ui/span/borrowck-call-is-borrow-issue-12224.rs
Expand Up @@ -32,7 +32,7 @@ fn test3<F>(f: &mut F) where F: FnMut() {

fn test4(f: &Test) {
f.f.call_mut(())
//~^ ERROR: cannot borrow `Box` content `*f.f` of immutable binding as mutable
//~^ ERROR: cannot borrow field `f.f` of immutable binding as mutable
}

fn test5(f: &mut Test) {
Expand Down
4 changes: 2 additions & 2 deletions src/test/ui/span/borrowck-call-is-borrow-issue-12224.stderr
Expand Up @@ -19,13 +19,13 @@ LL | fn test2<F>(f: &F) where F: FnMut() {
LL | (*f)();
| ^^^^ cannot borrow as mutable

error[E0596]: cannot borrow `Box` content `*f.f` of immutable binding as mutable
error[E0596]: cannot borrow field `f.f` of immutable binding as mutable
--> $DIR/borrowck-call-is-borrow-issue-12224.rs:34:5
|
LL | fn test4(f: &Test) {
| ----- use `&mut Test` here to make mutable
LL | f.f.call_mut(())
| ^^^ cannot borrow as mutable
| ^^^ cannot mutably borrow field of immutable binding

error[E0504]: cannot move `f` into closure because it is borrowed
--> $DIR/borrowck-call-is-borrow-issue-12224.rs:56:13
Expand Down

0 comments on commit e55d82c

Please sign in to comment.