Skip to content

Commit 4865852

Browse files
Do not resolve blocks in foreign functions
1 parent 8baeddf commit 4865852

File tree

1 file changed

+10
-3
lines changed

1 file changed

+10
-3
lines changed

compiler/rustc_resolve/src/late.rs

Lines changed: 10 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -520,9 +520,16 @@ impl<'a: 'ast, 'ast> Visitor<'ast> for LateResolutionVisitor<'a, '_, 'ast> {
520520
}
521521
fn visit_fn(&mut self, fn_kind: FnKind<'ast>, sp: Span, _: NodeId) {
522522
let rib_kind = match fn_kind {
523-
// Bail if there's no body.
524-
FnKind::Fn(.., None) => return visit::walk_fn(self, fn_kind, sp),
525-
FnKind::Fn(FnCtxt::Free | FnCtxt::Foreign, ..) => FnItemRibKind,
523+
// Bail if the function is foreign, and thus cannot validly have
524+
// a body, or if there's no body for some other reason.
525+
FnKind::Fn(FnCtxt::Foreign, _, sig, ..) | FnKind::Fn(_, _, sig, .., None) => {
526+
// We don't need to deal with patterns in parameters, because
527+
// they are not possible for foreign or bodiless functions.
528+
self.visit_fn_header(&sig.header);
529+
visit::walk_fn_decl(self, &sig.decl);
530+
return;
531+
}
532+
FnKind::Fn(FnCtxt::Free, ..) => FnItemRibKind,
526533
FnKind::Fn(FnCtxt::Assoc(_), ..) => NormalRibKind,
527534
FnKind::Closure(..) => ClosureOrAsyncRibKind,
528535
};

0 commit comments

Comments
 (0)