Skip to content

Commit

Permalink
Fix ICE involving mut references
Browse files Browse the repository at this point in the history
  • Loading branch information
estebank committed Jun 19, 2019
1 parent 605ea9d commit 3dd3c6d
Show file tree
Hide file tree
Showing 3 changed files with 34 additions and 1 deletion.
2 changes: 1 addition & 1 deletion src/librustc_mir/borrow_check/mod.rs
Expand Up @@ -1070,7 +1070,7 @@ impl<'cx, 'tcx> MirBorrowckCtxt<'cx, 'tcx> {

(Reservation(WriteKind::MutableBorrow(bk)), BorrowKind::Shallow)
| (Reservation(WriteKind::MutableBorrow(bk)), BorrowKind::Shared) if {
tcx.migrate_borrowck()
tcx.migrate_borrowck() && this.borrow_set.location_map.get(&location).is_some()
} => {
let bi = this.borrow_set.location_map[&location];
debug!(
Expand Down
11 changes: 11 additions & 0 deletions src/test/ui/issues/issue-61623.rs
@@ -0,0 +1,11 @@
fn f1<'a>(_: &'a mut ()) {}

fn f2<P>(_: P, _: ()) {}

fn f3<'a>(x: &'a ((), &'a mut ())) {
f2(|| x.0, f1(x.1))
//~^ ERROR cannot borrow `*x.1` as mutable, as it is behind a `&` reference
//~| ERROR cannot borrow `*x.1` as mutable because it is also borrowed as immutable
}

fn main() {}
22 changes: 22 additions & 0 deletions src/test/ui/issues/issue-61623.stderr
@@ -0,0 +1,22 @@
error[E0596]: cannot borrow `*x.1` as mutable, as it is behind a `&` reference
--> $DIR/issue-61623.rs:6:19
|
LL | fn f3<'a>(x: &'a ((), &'a mut ())) {
| -------------------- help: consider changing this to be a mutable reference: `&'a mut ((), &'a mut ())`
LL | f2(|| x.0, f1(x.1))
| ^^^ `x` is a `&` reference, so the data it refers to cannot be borrowed as mutable

error[E0502]: cannot borrow `*x.1` as mutable because it is also borrowed as immutable
--> $DIR/issue-61623.rs:6:19
|
LL | f2(|| x.0, f1(x.1))
| -- -- - ^^^ mutable borrow occurs here
| | | |
| | | first borrow occurs due to use of `x` in closure
| | immutable borrow occurs here
| immutable borrow later used by call

error: aborting due to 2 previous errors

Some errors have detailed explanations: E0502, E0596.
For more information about an error, try `rustc --explain E0502`.

0 comments on commit 3dd3c6d

Please sign in to comment.