Avoid an is_empty() followed by an index op in favor of a single fallible op

This commit is contained in:
Oli Scherer 2024-04-02 14:13:05 +00:00
parent b4993c47f2
commit 6f3cc0903c

View File

@ -89,11 +89,11 @@ impl<'tcx> MutVisitor<'tcx> for MakeByMoveBody<'tcx> {
location: mir::Location, location: mir::Location,
) { ) {
if place.local == ty::CAPTURE_STRUCT_LOCAL if place.local == ty::CAPTURE_STRUCT_LOCAL
&& !place.projection.is_empty() && let Some((&mir::ProjectionElem::Field(idx, ty), projection)) =
&& let mir::ProjectionElem::Field(idx, ty) = place.projection[0] place.projection.split_first()
&& self.by_ref_fields.contains(&idx) && self.by_ref_fields.contains(&idx)
{ {
let (begin, end) = place.projection[1..].split_first().unwrap(); let (begin, end) = projection.split_first().unwrap();
// FIXME(async_closures): I'm actually a bit surprised to see that we always // FIXME(async_closures): I'm actually a bit surprised to see that we always
// initially deref the by-ref upvars. If this is not actually true, then we // initially deref the by-ref upvars. If this is not actually true, then we
// will at least get an ICE that explains why this isn't true :^) // will at least get an ICE that explains why this isn't true :^)