about summary refs log tree commit diff
path: root/src/test
diff options
context:
space:
mode:
authorYuki Okushi <yuki.okushi@huawei.com>2021-06-16 09:44:47 +0900
committerYuki Okushi <yuki.okushi@huawei.com>2021-06-16 09:47:37 +0900
commitc8a8a23a31e9e4831ccab4efbc085852b7a86fa5 (patch)
tree074d75d29709da564dcde36f8981b9505897a9a7 /src/test
parent607d6b00d4e0e0475b8de9d0c870b7126fdcdf6b (diff)
downloadrust-c8a8a23a31e9e4831ccab4efbc085852b7a86fa5.tar.gz
rust-c8a8a23a31e9e4831ccab4efbc085852b7a86fa5.zip
Do not emit invalid suggestions on multiple mutable borrow errors
Diffstat (limited to 'src/test')
-rw-r--r--src/test/ui/borrowck/issue-85581.rs15
-rw-r--r--src/test/ui/borrowck/issue-85581.stderr17
2 files changed, 32 insertions, 0 deletions
diff --git a/src/test/ui/borrowck/issue-85581.rs b/src/test/ui/borrowck/issue-85581.rs
new file mode 100644
index 00000000000..ccc120c5421
--- /dev/null
+++ b/src/test/ui/borrowck/issue-85581.rs
@@ -0,0 +1,15 @@
+// Regression test of #85581.
+// Checks not to suggest to add `;` when the second mutable borrow
+// is in the first's scope.
+
+use std::collections::BinaryHeap;
+
+fn foo(heap: &mut BinaryHeap<i32>) {
+    match heap.peek_mut() {
+        Some(_) => { heap.pop(); },
+        //~^ ERROR: cannot borrow `*heap` as mutable more than once at a time
+        None => (),
+    }
+}
+
+fn main() {}
diff --git a/src/test/ui/borrowck/issue-85581.stderr b/src/test/ui/borrowck/issue-85581.stderr
new file mode 100644
index 00000000000..29c0429f2a0
--- /dev/null
+++ b/src/test/ui/borrowck/issue-85581.stderr
@@ -0,0 +1,17 @@
+error[E0499]: cannot borrow `*heap` as mutable more than once at a time
+  --> $DIR/issue-85581.rs:9:22
+   |
+LL |     match heap.peek_mut() {
+   |           ---------------
+   |           |
+   |           first mutable borrow occurs here
+   |           a temporary with access to the first borrow is created here ...
+LL |         Some(_) => { heap.pop(); },
+   |                      ^^^^ second mutable borrow occurs here
+...
+LL | }
+   | - ... and the first borrow might be used here, when that temporary is dropped and runs the destructor for type `Option<PeekMut<'_, i32>>`
+
+error: aborting due to previous error
+
+For more information about this error, try `rustc --explain E0499`.