Replace walk with visit so we dont skip outermost expr kind in def collector
This commit is contained in:
@@ -223,7 +223,7 @@ impl<'a, 'b, 'tcx> visit::Visitor<'a> for DefCollector<'a, 'b, 'tcx> {
|
|||||||
// we must create two defs.
|
// we must create two defs.
|
||||||
let coroutine_def =
|
let coroutine_def =
|
||||||
self.create_def(coroutine_kind.closure_id(), kw::Empty, DefKind::Closure, span);
|
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),
|
_ => 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!();
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user