Rollup merge of #129858 - compiler-errors:async-def, r=cjgillot
Replace walk with visit so we dont skip outermost expr kind in def collector This affects async closures with macros as their body expr. Fixes #129855. r? ``@cjgillot`` or anyone else
This commit is contained in:
commit
38b6a66def
@ -223,7 +223,7 @@ fn visit_fn(&mut self, fn_kind: FnKind<'a>, span: Span, _: NodeId) {
|
||||
// we must create two defs.
|
||||
let coroutine_def =
|
||||
self.create_def(coroutine_kind.closure_id(), kw::Empty, DefKind::Closure, span);
|
||||
self.with_parent(coroutine_def, |this| visit::walk_expr(this, body));
|
||||
self.with_parent(coroutine_def, |this| this.visit_expr(body));
|
||||
}
|
||||
_ => visit::walk_fn(self, fn_kind),
|
||||
}
|
||||
|
12
tests/ui/async-await/async-closures/mac-body.rs
Normal file
12
tests/ui/async-await/async-closures/mac-body.rs
Normal file
@ -0,0 +1,12 @@
|
||||
//@ edition: 2021
|
||||
//@ check-pass
|
||||
|
||||
#![feature(async_closure)]
|
||||
|
||||
// Make sure we don't ICE if an async closure has a macro body.
|
||||
// This happened because we were calling walk instead of visit
|
||||
// in the def collector, oops!
|
||||
|
||||
fn main() {
|
||||
let _ = async || println!();
|
||||
}
|
Loading…
Reference in New Issue
Block a user