Consider synthetic closure bodies to be typeck children

This commit is contained in:
Michael Goulet 2024-09-14 16:33:25 -04:00
parent 5fe0e40e05
commit 63405fc2b3
2 changed files with 23 additions and 1 deletions

View File

@ -571,7 +571,10 @@ impl<'tcx> TyCtxt<'tcx> {
/// Returns `true` if `def_id` refers to a definition that does not have its own
/// type-checking context, i.e. closure, coroutine or inline const.
pub fn is_typeck_child(self, def_id: DefId) -> bool {
matches!(self.def_kind(def_id), DefKind::Closure | DefKind::InlineConst)
matches!(
self.def_kind(def_id),
DefKind::Closure | DefKind::InlineConst | DefKind::SyntheticCoroutineBody
)
}
/// Returns `true` if `def_id` refers to a trait (i.e., `trait Foo { ... }`).

View File

@ -0,0 +1,19 @@
//@ aux-build:block-on.rs
//@ edition: 2021
//@ build-pass
//@ compile-flags: -Cdebuginfo=2
#![feature(async_closure)]
extern crate block_on;
async fn call_once(f: impl async FnOnce()) {
f().await;
}
pub fn main() {
block_on::block_on(async {
let async_closure = async move || {};
call_once(async_closure).await;
});
}