about summary refs log tree commit diff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/librustc_mir/borrow_check/mod.rs16
-rw-r--r--src/test/compile-fail/E0501.rs15
2 files changed, 27 insertions, 4 deletions
diff --git a/src/librustc_mir/borrow_check/mod.rs b/src/librustc_mir/borrow_check/mod.rs
index 97d8a677fe8..30838b018d3 100644
--- a/src/librustc_mir/borrow_check/mod.rs
+++ b/src/librustc_mir/borrow_check/mod.rs
@@ -2334,12 +2334,24 @@ impl<'cx, 'gcx, 'tcx> MirBorrowckCtxt<'cx, 'gcx, 'tcx> {
                 Origin::Mir,
             ),
 
-            (_, _, _, BorrowKind::Unique, _, _) => self.tcx
+            (BorrowKind::Shared, lft, _, BorrowKind::Unique, _, _) => self.tcx
                 .cannot_reborrow_already_uniquely_borrowed(
                     span,
                     &desc_place,
-                    "it",
                     "",
+                    lft,
+                    issued_span,
+                    "",
+                    end_issued_loan_span,
+                    Origin::Mir,
+                ),
+
+            (BorrowKind::Mut, _, lft, BorrowKind::Unique, _, _) => self.tcx
+                .cannot_reborrow_already_uniquely_borrowed(
+                    span,
+                    &desc_place,
+                    "",
+                    lft,
                     issued_span,
                     "",
                     end_issued_loan_span,
diff --git a/src/test/compile-fail/E0501.rs b/src/test/compile-fail/E0501.rs
index 04678b96c8d..f7e246e8f0f 100644
--- a/src/test/compile-fail/E0501.rs
+++ b/src/test/compile-fail/E0501.rs
@@ -8,17 +8,28 @@
 // option. This file may not be copied, modified, or distributed
 // except according to those terms.
 
+// ignore-tidy-linelength
+// revisions: ast mir
+//[mir]compile-flags: -Z borrowck=mir
+
 fn inside_closure(x: &mut i32) {
 }
 
-fn outside_closure(x: &mut i32) {
+fn outside_closure_1(x: &mut i32) {
+}
+
+fn outside_closure_2(x: &i32) {
 }
 
 fn foo(a: &mut i32) {
     let bar = || {
         inside_closure(a)
     };
-    outside_closure(a); //~ ERROR E0501
+    outside_closure_1(a); //[ast]~ ERROR cannot borrow `*a` as mutable because previous closure requires unique access
+                         //[mir]~^ ERROR cannot borrow `*a` as mutable because previous closure requires unique access
+
+    outside_closure_2(a); //[ast]~ ERROR cannot borrow `*a` as immutable because previous closure requires unique access
+                         //[mir]~^ ERROR cannot borrow `*a` as immutable because previous closure requires unique access
 }
 
 fn main() {