Skip to content

Commit

Permalink
Rollup merge of rust-lang#58008 - matthewjasper:places-conflict-args,…
Browse files Browse the repository at this point in the history
… r=oli-obk

Pass correct arguments to places_conflict

The borrow place *must* be a place that we track borrows for, otherwise
we will likely ICE.

Closes rust-lang#57989
  • Loading branch information
Centril authored Jan 31, 2019
2 parents bc7be96 + 6fe370c commit 877dee7
Show file tree
Hide file tree
Showing 3 changed files with 37 additions and 1 deletion.
2 changes: 1 addition & 1 deletion src/librustc_mir/dataflow/impls/borrows.rs
Original file line number Diff line number Diff line change
Expand Up @@ -215,8 +215,8 @@ impl<'a, 'gcx, 'tcx> Borrows<'a, 'gcx, 'tcx> {
if places_conflict::places_conflict(
self.tcx,
self.mir,
place,
&borrow_data.borrowed_place,
place,
places_conflict::PlaceConflictBias::NoOverlap,
) {
debug!(
Expand Down
12 changes: 12 additions & 0 deletions src/test/ui/nll/issue-57989.rs
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
// Test for ICE from issue 57989

#![feature(nll)]

fn f(x: &i32) {
let g = &x;
*x = 0; //~ ERROR cannot assign to `*x` which is behind a `&` reference
//~| ERROR cannot assign to `*x` because it is borrowed
g;
}

fn main() {}
24 changes: 24 additions & 0 deletions src/test/ui/nll/issue-57989.stderr
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
error[E0594]: cannot assign to `*x` which is behind a `&` reference
--> $DIR/issue-57989.rs:7:5
|
LL | fn f(x: &i32) {
| ---- help: consider changing this to be a mutable reference: `&mut i32`
LL | let g = &x;
LL | *x = 0; //~ ERROR cannot assign to `*x` which is behind a `&` reference
| ^^^^^^ `x` is a `&` reference, so the data it refers to cannot be written

error[E0506]: cannot assign to `*x` because it is borrowed
--> $DIR/issue-57989.rs:7:5
|
LL | let g = &x;
| -- borrow of `*x` occurs here
LL | *x = 0; //~ ERROR cannot assign to `*x` which is behind a `&` reference
| ^^^^^^ assignment to borrowed `*x` occurs here
LL | //~| ERROR cannot assign to `*x` because it is borrowed
LL | g;
| - borrow later used here

error: aborting due to 2 previous errors

Some errors occurred: E0506, E0594.
For more information about an error, try `rustc --explain E0506`.

0 comments on commit 877dee7

Please sign in to comment.