Skip to content

Commit c4c32b2

Browse files
committed
More fine-grained delineation for mir-borrowck errors.
1 parent cd93969 commit c4c32b2

File tree

1 file changed

+20
-4
lines changed

1 file changed

+20
-4
lines changed

src/librustc_mir/borrow_check.rs

Lines changed: 20 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -948,14 +948,30 @@ impl<'c, 'b, 'a: 'b+'c, 'gcx, 'tcx: 'a> MirBorrowckCtxt<'c, 'b, 'a, 'gcx, 'tcx>
948948
let mut err = match (loan1.kind, "immutable", "mutable",
949949
loan2.kind, "immutable", "mutable") {
950950
(BorrowKind::Shared, lft, _, BorrowKind::Mut, _, rgt) |
951-
(BorrowKind::Mut, _, lft, BorrowKind::Shared, rgt, _) |
952-
(BorrowKind::Mut, _, lft, BorrowKind::Mut, _, rgt) =>
951+
(BorrowKind::Mut, _, lft, BorrowKind::Shared, rgt, _) =>
953952
self.tcx.cannot_reborrow_already_borrowed(
954953
span, &self.describe_lvalue(lvalue),
955954
"", lft, "it", rgt, "", Origin::Mir),
956955

957-
_ => self.tcx.cannot_mutably_borrow_multiply(
958-
span, &self.describe_lvalue(lvalue), "", Origin::Mir),
956+
(BorrowKind::Mut, _, _, BorrowKind::Mut, _, _) =>
957+
self.tcx.cannot_mutably_borrow_multiply(
958+
span, &self.describe_lvalue(lvalue), "", Origin::Mir),
959+
960+
(BorrowKind::Unique, _, _, BorrowKind::Unique, _, _) =>
961+
self.tcx.cannot_uniquely_borrow_by_two_closures(
962+
span, &self.describe_lvalue(lvalue), Origin::Mir),
963+
964+
(BorrowKind::Unique, _, _, _, _, _) =>
965+
self.tcx.cannot_uniquely_borrow_by_one_closure(
966+
span, &self.describe_lvalue(lvalue), "it", "", Origin::Mir),
967+
968+
(_, _, _, BorrowKind::Unique, _, _) =>
969+
self.tcx.cannot_reborrow_already_uniquely_borrowed(
970+
span, &self.describe_lvalue(lvalue), "it", "", Origin::Mir),
971+
972+
(BorrowKind::Shared, _, _, BorrowKind::Shared, _, _) =>
973+
unreachable!(),
974+
959975
// FIXME: add span labels for first and second mutable borrows, as well as
960976
// end point for first.
961977
};

0 commit comments

Comments
 (0)