Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Add
ui/borrowck/borrowck-closures-mut-of-mut.rs
.
This is a variant of `ui/borrowck/borrowck-closures-mut-of-imm.rs` that I used to help identify what changes I needed to make to the latter file in order to recover its instances of E0524 under NLL. (Basically this test includes the changes you'd need to make to `ui/borrowck/borrowck-closures-mut-of-imm.rs` in order to get rid of occurrences of E0596. And then I realized that one needs to add invocations of the closures in order to properly extend the mutable reborrows in a manner such that NLL will roughly match AST-borrowck.)
- Loading branch information
Showing
3 changed files
with
56 additions
and
0 deletions.
There are no files selected for viewing
18 changes: 18 additions & 0 deletions
18
src/test/ui/borrowck/borrowck-closures-mut-of-mut.nll.stderr
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,18 @@ | ||
error[E0524]: two closures require unique access to `x` at the same time | ||
--> $DIR/borrowck-closures-mut-of-mut.rs:14:18 | ||
| | ||
LL | let mut c1 = || set(&mut *x); | ||
| -- - first borrow occurs due to use of `x` in closure | ||
| | | ||
| first closure is constructed here | ||
LL | let mut c2 = || set(&mut *x); | ||
| ^^ - second borrow occurs due to use of `x` in closure | ||
| | | ||
| second closure is constructed here | ||
LL | //~^ ERROR two closures require unique access to `x` at the same time | ||
LL | c2(); c1(); | ||
| -- first borrow later used here | ||
|
||
error: aborting due to previous error | ||
|
||
For more information about this error, try `rustc --explain E0524`. |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,20 @@ | ||
// Tests that two closures cannot simultaneously both have mutable | ||
// access to the variable. Related to issue #6801. | ||
|
||
fn get(x: &isize) -> isize { | ||
*x | ||
} | ||
|
||
fn set(x: &mut isize) { | ||
*x = 4; | ||
} | ||
|
||
fn a(x: &mut isize) { | ||
let mut c1 = || set(&mut *x); | ||
let mut c2 = || set(&mut *x); | ||
//~^ ERROR two closures require unique access to `x` at the same time | ||
c2(); c1(); | ||
} | ||
|
||
fn main() { | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,18 @@ | ||
error[E0524]: two closures require unique access to `x` at the same time | ||
--> $DIR/borrowck-closures-mut-of-mut.rs:14:18 | ||
| | ||
LL | let mut c1 = || set(&mut *x); | ||
| -- - previous borrow occurs due to use of `x` in closure | ||
| | | ||
| first closure is constructed here | ||
LL | let mut c2 = || set(&mut *x); | ||
| ^^ - borrow occurs due to use of `x` in closure | ||
| | | ||
| second closure is constructed here | ||
... | ||
LL | } | ||
| - borrow from first closure ends here | ||
|
||
error: aborting due to previous error | ||
|
||
For more information about this error, try `rustc --explain E0524`. |