add a scope for if let guard temporaries and bindings
This ensures `if let` guard temporaries and bindings are dropped before the match arm's pattern's bindings.
This commit is contained in:
@@ -198,6 +198,11 @@ fn resolve_arm<'tcx>(visitor: &mut ScopeResolutionVisitor<'tcx>, arm: &'tcx hir:
|
||||
visitor.cx.var_parent = visitor.cx.parent;
|
||||
|
||||
resolve_pat(visitor, arm.pat);
|
||||
// We introduce a new scope to contain bindings and temporaries from `if let` guards, to
|
||||
// ensure they're dropped before the arm's pattern's bindings. This extends to the end of
|
||||
// the arm body and is the scope of its locals as well.
|
||||
visitor.enter_scope(Scope { local_id: arm.hir_id.local_id, data: ScopeData::MatchGuard });
|
||||
visitor.cx.var_parent = visitor.cx.parent;
|
||||
if let Some(guard) = arm.guard {
|
||||
resolve_cond(visitor, guard);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user