@@ -15,8 +15,9 @@ use rustc_middle::hir::nested_filter::OnlyBodies;
1515use rustc_middle:: mir:: tcx:: PlaceTy ;
1616use rustc_middle:: mir:: {
1717 self , AggregateKind , BindingForm , BorrowKind , CallSource , ClearCrossCrate , ConstraintCategory ,
18- FakeReadCause , LocalDecl , LocalInfo , LocalKind , Location , Operand , Place , PlaceRef ,
19- ProjectionElem , Rvalue , Statement , StatementKind , Terminator , TerminatorKind , VarBindingForm ,
18+ FakeReadCause , LocalDecl , LocalInfo , LocalKind , Location , MutBorrowKind , Operand , Place ,
19+ PlaceRef , ProjectionElem , Rvalue , Statement , StatementKind , Terminator , TerminatorKind ,
20+ VarBindingForm ,
2021} ;
2122use rustc_middle:: ty:: { self , suggest_constraining_type_params, PredicateKind , Ty } ;
2223use rustc_middle:: util:: CallKind ;
@@ -926,7 +927,10 @@ impl<'cx, 'tcx> MirBorrowckCtxt<'cx, 'tcx> {
926927 // FIXME: supply non-"" `opt_via` when appropriate
927928 let first_borrow_desc;
928929 let mut err = match ( gen_borrow_kind, issued_borrow. kind ) {
929- ( BorrowKind :: Shared , BorrowKind :: Mut { .. } ) => {
930+ (
931+ BorrowKind :: Shared ,
932+ BorrowKind :: Mut { kind : MutBorrowKind :: Default | MutBorrowKind :: TwoPhaseBorrow } ,
933+ ) => {
930934 first_borrow_desc = "mutable " ;
931935 self . cannot_reborrow_already_borrowed (
932936 span,
@@ -940,7 +944,10 @@ impl<'cx, 'tcx> MirBorrowckCtxt<'cx, 'tcx> {
940944 None ,
941945 )
942946 }
943- ( BorrowKind :: Mut { .. } , BorrowKind :: Shared ) => {
947+ (
948+ BorrowKind :: Mut { kind : MutBorrowKind :: Default | MutBorrowKind :: TwoPhaseBorrow } ,
949+ BorrowKind :: Shared ,
950+ ) => {
944951 first_borrow_desc = "immutable " ;
945952 let mut err = self . cannot_reborrow_already_borrowed (
946953 span,
@@ -962,7 +969,10 @@ impl<'cx, 'tcx> MirBorrowckCtxt<'cx, 'tcx> {
962969 err
963970 }
964971
965- ( BorrowKind :: Mut { .. } , BorrowKind :: Mut { .. } ) => {
972+ (
973+ BorrowKind :: Mut { kind : MutBorrowKind :: Default | MutBorrowKind :: TwoPhaseBorrow } ,
974+ BorrowKind :: Mut { kind : MutBorrowKind :: Default | MutBorrowKind :: TwoPhaseBorrow } ,
975+ ) => {
966976 first_borrow_desc = "first " ;
967977 let mut err = self . cannot_mutably_borrow_multiply (
968978 span,
@@ -985,12 +995,15 @@ impl<'cx, 'tcx> MirBorrowckCtxt<'cx, 'tcx> {
985995 err
986996 }
987997
988- ( BorrowKind :: Unique , BorrowKind :: Unique ) => {
998+ (
999+ BorrowKind :: Mut { kind : MutBorrowKind :: ClosureCapture } ,
1000+ BorrowKind :: Mut { kind : MutBorrowKind :: ClosureCapture } ,
1001+ ) => {
9891002 first_borrow_desc = "first " ;
9901003 self . cannot_uniquely_borrow_by_two_closures ( span, & desc_place, issued_span, None )
9911004 }
9921005
993- ( BorrowKind :: Mut { .. } | BorrowKind :: Unique , BorrowKind :: Shallow ) => {
1006+ ( BorrowKind :: Mut { .. } , BorrowKind :: Shallow ) => {
9941007 if let Some ( immutable_section_description) =
9951008 self . classify_immutable_section ( issued_borrow. assigned_place )
9961009 {
@@ -1004,7 +1017,7 @@ impl<'cx, 'tcx> MirBorrowckCtxt<'cx, 'tcx> {
10041017 borrow_spans. var_subdiag (
10051018 None ,
10061019 & mut err,
1007- Some ( BorrowKind :: Unique ) ,
1020+ Some ( BorrowKind :: Mut { kind : MutBorrowKind :: ClosureCapture } ) ,
10081021 |kind, var_span| {
10091022 use crate :: session_diagnostics:: CaptureVarCause :: * ;
10101023 match kind {
@@ -1038,7 +1051,7 @@ impl<'cx, 'tcx> MirBorrowckCtxt<'cx, 'tcx> {
10381051 }
10391052 }
10401053
1041- ( BorrowKind :: Unique , _) => {
1054+ ( BorrowKind :: Mut { kind : MutBorrowKind :: ClosureCapture } , _) => {
10421055 first_borrow_desc = "first " ;
10431056 self . cannot_uniquely_borrow_by_one_closure (
10441057 span,
@@ -1052,7 +1065,7 @@ impl<'cx, 'tcx> MirBorrowckCtxt<'cx, 'tcx> {
10521065 )
10531066 }
10541067
1055- ( BorrowKind :: Shared , BorrowKind :: Unique ) => {
1068+ ( BorrowKind :: Shared , BorrowKind :: Mut { kind : MutBorrowKind :: ClosureCapture } ) => {
10561069 first_borrow_desc = "first " ;
10571070 self . cannot_reborrow_already_uniquely_borrowed (
10581071 span,
@@ -1067,7 +1080,7 @@ impl<'cx, 'tcx> MirBorrowckCtxt<'cx, 'tcx> {
10671080 )
10681081 }
10691082
1070- ( BorrowKind :: Mut { .. } , BorrowKind :: Unique ) => {
1083+ ( BorrowKind :: Mut { .. } , BorrowKind :: Mut { kind : MutBorrowKind :: ClosureCapture } ) => {
10711084 first_borrow_desc = "first " ;
10721085 self . cannot_reborrow_already_uniquely_borrowed (
10731086 span,
@@ -1085,10 +1098,7 @@ impl<'cx, 'tcx> MirBorrowckCtxt<'cx, 'tcx> {
10851098 ( BorrowKind :: Shared , BorrowKind :: Shared | BorrowKind :: Shallow )
10861099 | (
10871100 BorrowKind :: Shallow ,
1088- BorrowKind :: Mut { .. }
1089- | BorrowKind :: Unique
1090- | BorrowKind :: Shared
1091- | BorrowKind :: Shallow ,
1101+ BorrowKind :: Mut { .. } | BorrowKind :: Shared | BorrowKind :: Shallow ,
10921102 ) => unreachable ! ( ) ,
10931103 } ;
10941104
0 commit comments