diff options
| author | Camille GILLOT <gillot.camille@gmail.com> | 2021-11-19 22:03:43 +0100 |
|---|---|---|
| committer | Camille GILLOT <gillot.camille@gmail.com> | 2022-04-17 11:03:33 +0200 |
| commit | e47f66dc0d2697aab816fe045fb00195bac18596 (patch) | |
| tree | ff712e0ba6d600f82a0f220202b57bd8d2d42293 /compiler/rustc_resolve | |
| parent | aa2b5ef6356f41f9173fe3dc1e5dc3e27290436c (diff) | |
| download | rust-e47f66dc0d2697aab816fe045fb00195bac18596.tar.gz rust-e47f66dc0d2697aab816fe045fb00195bac18596.zip | |
Visit generics inside visit_fn.
Diffstat (limited to 'compiler/rustc_resolve')
| -rw-r--r-- | compiler/rustc_resolve/src/def_collector.rs | 4 | ||||
| -rw-r--r-- | compiler/rustc_resolve/src/late.rs | 8 |
2 files changed, 10 insertions, 2 deletions
diff --git a/compiler/rustc_resolve/src/def_collector.rs b/compiler/rustc_resolve/src/def_collector.rs index 8ea5dca6f10..1e8cca6122c 100644 --- a/compiler/rustc_resolve/src/def_collector.rs +++ b/compiler/rustc_resolve/src/def_collector.rs @@ -133,8 +133,10 @@ impl<'a, 'b> visit::Visitor<'a> for DefCollector<'a, 'b> { } fn visit_fn(&mut self, fn_kind: FnKind<'a>, span: Span, _: NodeId) { - if let FnKind::Fn(_, _, sig, _, body) = fn_kind { + if let FnKind::Fn(_, _, sig, _, generics, body) = fn_kind { if let Async::Yes { closure_id, return_impl_trait_id, .. } = sig.header.asyncness { + self.visit_generics(generics); + let return_impl_trait_id = self.create_def(return_impl_trait_id, DefPathData::ImplTrait, span); diff --git a/compiler/rustc_resolve/src/late.rs b/compiler/rustc_resolve/src/late.rs index 2f6ac4020bc..383ca958e6d 100644 --- a/compiler/rustc_resolve/src/late.rs +++ b/compiler/rustc_resolve/src/late.rs @@ -537,10 +537,12 @@ impl<'a: 'ast, 'ast> Visitor<'ast> for LateResolutionVisitor<'a, '_, 'ast> { let rib_kind = match fn_kind { // Bail if the function is foreign, and thus cannot validly have // a body, or if there's no body for some other reason. - FnKind::Fn(FnCtxt::Foreign, _, sig, ..) | FnKind::Fn(_, _, sig, .., None) => { + FnKind::Fn(FnCtxt::Foreign, _, sig, _, generics, _) + | FnKind::Fn(_, _, sig, _, generics, None) => { // We don't need to deal with patterns in parameters, because // they are not possible for foreign or bodiless functions. self.visit_fn_header(&sig.header); + self.visit_generics(generics); visit::walk_fn_decl(self, &sig.decl); return; } @@ -559,6 +561,10 @@ impl<'a: 'ast, 'ast> Visitor<'ast> for LateResolutionVisitor<'a, '_, 'ast> { self.with_rib(ValueNS, rib_kind, |this| { // Create a label rib for the function. this.with_label_rib(rib_kind, |this| { + if let FnKind::Fn(_, _, _, _, generics, _) = fn_kind { + this.visit_generics(generics); + } + // Add each argument to the rib. this.resolve_params(&declaration.inputs); |
