diff options
| author | Michael Goulet <michael@errs.io> | 2022-09-24 18:53:53 +0000 |
|---|---|---|
| committer | Michael Goulet <michael@errs.io> | 2022-09-25 23:03:15 +0000 |
| commit | 730ead80479d98de5cc1b555c558b5b0176fded8 (patch) | |
| tree | 2d924b9b48414a7be2fca06b1ef3becf81551b0b /compiler/rustc_resolve/src | |
| parent | f5193a9fcc73dc09e41a90c5a2c97fc9acc16032 (diff) | |
| download | rust-730ead80479d98de5cc1b555c558b5b0176fded8.tar.gz rust-730ead80479d98de5cc1b555c558b5b0176fded8.zip | |
Only generate closure def id for async fns with body
Diffstat (limited to 'compiler/rustc_resolve/src')
| -rw-r--r-- | compiler/rustc_resolve/src/def_collector.rs | 10 |
1 files changed, 7 insertions, 3 deletions
diff --git a/compiler/rustc_resolve/src/def_collector.rs b/compiler/rustc_resolve/src/def_collector.rs index 3f88f44ff21..7e83f2a7221 100644 --- a/compiler/rustc_resolve/src/def_collector.rs +++ b/compiler/rustc_resolve/src/def_collector.rs @@ -1,6 +1,5 @@ use crate::{ImplTraitContext, Resolver}; use rustc_ast::visit::{self, FnKind}; -use rustc_ast::walk_list; use rustc_ast::*; use rustc_expand::expand::AstFragment; use rustc_hir::def_id::LocalDefId; @@ -148,8 +147,13 @@ impl<'a, 'b> visit::Visitor<'a> for DefCollector<'a, 'b> { self.with_parent(return_impl_trait_id, |this| { this.visit_fn_ret_ty(&sig.decl.output) }); - let closure_def = self.create_def(closure_id, DefPathData::ClosureExpr, span); - self.with_parent(closure_def, |this| walk_list!(this, visit_block, body)); + // If this async fn has no body (i.e. it's an async fn signature in a trait) + // then the closure_def will never be used, and we should avoid generating a + // def-id for it. + if let Some(body) = body { + let closure_def = self.create_def(closure_id, DefPathData::ClosureExpr, span); + self.with_parent(closure_def, |this| this.visit_block(body)); + } return; } } |
