]> git.lizzy.rs Git - rust.git/commitdiff
Pass correct arguments to places_conflict
authorMatthew Jasper <mjjasper1@gmail.com>
Wed, 30 Jan 2019 19:49:31 +0000 (19:49 +0000)
committerMatthew Jasper <mjjasper1@gmail.com>
Wed, 30 Jan 2019 19:49:31 +0000 (19:49 +0000)
The borrow place *must* be a place that we track borrows for, otherwise
we will likely ICE.

src/librustc_mir/dataflow/impls/borrows.rs
src/test/ui/nll/issue-57989.rs [new file with mode: 0644]
src/test/ui/nll/issue-57989.stderr [new file with mode: 0644]

index 0ceff4aa04898cca0061e2e664ffc3ad8011e222..72218e29cfd20f6b5eb8069e337005bd7a4a71cb 100644 (file)
@@ -215,8 +215,8 @@ fn kill_borrows_on_place(
             if places_conflict::places_conflict(
                 self.tcx,
                 self.mir,
-                place,
                 &borrow_data.borrowed_place,
+                place,
                 places_conflict::PlaceConflictBias::NoOverlap,
             ) {
                 debug!(
diff --git a/src/test/ui/nll/issue-57989.rs b/src/test/ui/nll/issue-57989.rs
new file mode 100644 (file)
index 0000000..4f21cca
--- /dev/null
@@ -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() {}
diff --git a/src/test/ui/nll/issue-57989.stderr b/src/test/ui/nll/issue-57989.stderr
new file mode 100644 (file)
index 0000000..4561c99
--- /dev/null
@@ -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`.