From 90f7c31d86a82cefddc3307f5fd491dd264119c4 Mon Sep 17 00:00:00 2001 From: Ramana Venkata Date: Fri, 8 Dec 2017 02:45:11 +0530 Subject: [PATCH] Fix bad error message for cannot_reborrow_already_uniquely_borrowed Fixes #45638 --- src/librustc_mir/borrow_check/mod.rs | 16 ++++++++++++++-- src/test/compile-fail/E0501.rs | 15 +++++++++++++-- 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 97d8a677fe8f1..30838b018d3c3 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 04678b96c8d08..f7e246e8f0f41 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() {