@@ -15,8 +15,9 @@ use rustc_middle::hir::nested_filter::OnlyBodies;
15
15
use rustc_middle:: mir:: tcx:: PlaceTy ;
16
16
use rustc_middle:: mir:: {
17
17
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 ,
20
21
} ;
21
22
use rustc_middle:: ty:: { self , suggest_constraining_type_params, PredicateKind , Ty } ;
22
23
use rustc_middle:: util:: CallKind ;
@@ -926,7 +927,10 @@ impl<'cx, 'tcx> MirBorrowckCtxt<'cx, 'tcx> {
926
927
// FIXME: supply non-"" `opt_via` when appropriate
927
928
let first_borrow_desc;
928
929
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
+ ) => {
930
934
first_borrow_desc = "mutable " ;
931
935
self . cannot_reborrow_already_borrowed (
932
936
span,
@@ -940,7 +944,10 @@ impl<'cx, 'tcx> MirBorrowckCtxt<'cx, 'tcx> {
940
944
None ,
941
945
)
942
946
}
943
- ( BorrowKind :: Mut { .. } , BorrowKind :: Shared ) => {
947
+ (
948
+ BorrowKind :: Mut { kind : MutBorrowKind :: Default | MutBorrowKind :: TwoPhaseBorrow } ,
949
+ BorrowKind :: Shared ,
950
+ ) => {
944
951
first_borrow_desc = "immutable " ;
945
952
let mut err = self . cannot_reborrow_already_borrowed (
946
953
span,
@@ -962,7 +969,10 @@ impl<'cx, 'tcx> MirBorrowckCtxt<'cx, 'tcx> {
962
969
err
963
970
}
964
971
965
- ( BorrowKind :: Mut { .. } , BorrowKind :: Mut { .. } ) => {
972
+ (
973
+ BorrowKind :: Mut { kind : MutBorrowKind :: Default | MutBorrowKind :: TwoPhaseBorrow } ,
974
+ BorrowKind :: Mut { kind : MutBorrowKind :: Default | MutBorrowKind :: TwoPhaseBorrow } ,
975
+ ) => {
966
976
first_borrow_desc = "first " ;
967
977
let mut err = self . cannot_mutably_borrow_multiply (
968
978
span,
@@ -985,12 +995,15 @@ impl<'cx, 'tcx> MirBorrowckCtxt<'cx, 'tcx> {
985
995
err
986
996
}
987
997
988
- ( BorrowKind :: Unique , BorrowKind :: Unique ) => {
998
+ (
999
+ BorrowKind :: Mut { kind : MutBorrowKind :: ClosureCapture } ,
1000
+ BorrowKind :: Mut { kind : MutBorrowKind :: ClosureCapture } ,
1001
+ ) => {
989
1002
first_borrow_desc = "first " ;
990
1003
self . cannot_uniquely_borrow_by_two_closures ( span, & desc_place, issued_span, None )
991
1004
}
992
1005
993
- ( BorrowKind :: Mut { .. } | BorrowKind :: Unique , BorrowKind :: Shallow ) => {
1006
+ ( BorrowKind :: Mut { .. } , BorrowKind :: Shallow ) => {
994
1007
if let Some ( immutable_section_description) =
995
1008
self . classify_immutable_section ( issued_borrow. assigned_place )
996
1009
{
@@ -1004,7 +1017,7 @@ impl<'cx, 'tcx> MirBorrowckCtxt<'cx, 'tcx> {
1004
1017
borrow_spans. var_subdiag (
1005
1018
None ,
1006
1019
& mut err,
1007
- Some ( BorrowKind :: Unique ) ,
1020
+ Some ( BorrowKind :: Mut { kind : MutBorrowKind :: ClosureCapture } ) ,
1008
1021
|kind, var_span| {
1009
1022
use crate :: session_diagnostics:: CaptureVarCause :: * ;
1010
1023
match kind {
@@ -1038,7 +1051,7 @@ impl<'cx, 'tcx> MirBorrowckCtxt<'cx, 'tcx> {
1038
1051
}
1039
1052
}
1040
1053
1041
- ( BorrowKind :: Unique , _) => {
1054
+ ( BorrowKind :: Mut { kind : MutBorrowKind :: ClosureCapture } , _) => {
1042
1055
first_borrow_desc = "first " ;
1043
1056
self . cannot_uniquely_borrow_by_one_closure (
1044
1057
span,
@@ -1052,7 +1065,7 @@ impl<'cx, 'tcx> MirBorrowckCtxt<'cx, 'tcx> {
1052
1065
)
1053
1066
}
1054
1067
1055
- ( BorrowKind :: Shared , BorrowKind :: Unique ) => {
1068
+ ( BorrowKind :: Shared , BorrowKind :: Mut { kind : MutBorrowKind :: ClosureCapture } ) => {
1056
1069
first_borrow_desc = "first " ;
1057
1070
self . cannot_reborrow_already_uniquely_borrowed (
1058
1071
span,
@@ -1067,7 +1080,7 @@ impl<'cx, 'tcx> MirBorrowckCtxt<'cx, 'tcx> {
1067
1080
)
1068
1081
}
1069
1082
1070
- ( BorrowKind :: Mut { .. } , BorrowKind :: Unique ) => {
1083
+ ( BorrowKind :: Mut { .. } , BorrowKind :: Mut { kind : MutBorrowKind :: ClosureCapture } ) => {
1071
1084
first_borrow_desc = "first " ;
1072
1085
self . cannot_reborrow_already_uniquely_borrowed (
1073
1086
span,
@@ -1085,10 +1098,7 @@ impl<'cx, 'tcx> MirBorrowckCtxt<'cx, 'tcx> {
1085
1098
( BorrowKind :: Shared , BorrowKind :: Shared | BorrowKind :: Shallow )
1086
1099
| (
1087
1100
BorrowKind :: Shallow ,
1088
- BorrowKind :: Mut { .. }
1089
- | BorrowKind :: Unique
1090
- | BorrowKind :: Shared
1091
- | BorrowKind :: Shallow ,
1101
+ BorrowKind :: Mut { .. } | BorrowKind :: Shared | BorrowKind :: Shallow ,
1092
1102
) => unreachable ! ( ) ,
1093
1103
} ;
1094
1104
0 commit comments