Pass correct arguments to places_conflict
The borrow place *must* be a place that we track borrows for, otherwise we will likely ICE.
This commit is contained in:
parent
d9a2e3b1cc
commit
6fe370c7ce
|
@ -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!(
|
||||
|
|
|
@ -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() {}
|
|
@ -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`.
|
Loading…
Reference in New Issue