Skip to content

Commit 5cfa70f

Browse files
committed
Add is_ref_for_guard method
1 parent da9ebc8 commit 5cfa70f

File tree

4 files changed

+13
-16
lines changed

4 files changed

+13
-16
lines changed

src/librustc/mir/mod.rs

+10
Original file line numberDiff line numberDiff line change
@@ -913,6 +913,16 @@ impl<'tcx> LocalDecl<'tcx> {
913913
}
914914
}
915915

916+
/// Returns `true` if this is a reference to a variable bound in a `match`
917+
/// expression that is used to access said variable for the guard of the
918+
/// match arm.
919+
pub fn is_ref_for_guard(&self) -> bool {
920+
match self.is_user_variable {
921+
Some(ClearCrossCrate::Set(BindingForm::RefForGuard)) => true,
922+
_ => false,
923+
}
924+
}
925+
916926
/// Returns `true` is the local is from a compiler desugaring, e.g.,
917927
/// `__next` from a `for` loop.
918928
#[inline]

src/librustc_mir/borrow_check/error_reporting.rs

+1-3
Original file line numberDiff line numberDiff line change
@@ -180,9 +180,7 @@ impl<'cx, 'gcx, 'tcx> MirBorrowckCtxt<'cx, 'gcx, 'tcx> {
180180
&including_downcast,
181181
)?;
182182
} else if let Place::Base(PlaceBase::Local(local)) = proj.base {
183-
if let Some(ClearCrossCrate::Set(BindingForm::RefForGuard)) =
184-
self.mir.local_decls[local].is_user_variable
185-
{
183+
if self.mir.local_decls[local].is_ref_for_guard() {
186184
self.append_place_to_string(
187185
&proj.base,
188186
buf,

src/librustc_mir/borrow_check/mutability_errors.rs

+1-6
Original file line numberDiff line numberDiff line change
@@ -95,12 +95,7 @@ impl<'a, 'gcx, 'tcx> MirBorrowckCtxt<'a, 'gcx, 'tcx> {
9595
}
9696
} else if {
9797
if let Place::Base(PlaceBase::Local(local)) = *base {
98-
if let Some(ClearCrossCrate::Set(BindingForm::RefForGuard))
99-
= self.mir.local_decls[local].is_user_variable {
100-
true
101-
} else {
102-
false
103-
}
98+
self.mir.local_decls[local].is_ref_for_guard()
10499
} else {
105100
false
106101
}

src/librustc_mir/build/expr/as_rvalue.rs

+1-7
Original file line numberDiff line numberDiff line change
@@ -503,13 +503,7 @@ impl<'a, 'gcx, 'tcx> Builder<'a, 'gcx, 'tcx> {
503503
elem: ProjectionElem::Deref,
504504
}) => {
505505
debug_assert!(
506-
if let Some(ClearCrossCrate::Set(BindingForm::RefForGuard)) =
507-
this.local_decls[local].is_user_variable
508-
{
509-
true
510-
} else {
511-
false
512-
},
506+
this.local_decls[local].is_ref_for_guard(),
513507
"Unexpected capture place",
514508
);
515509
this.local_decls[local].mutability

0 commit comments

Comments
 (0)