diff options
| author | Michael Goulet <michael@errs.io> | 2024-09-14 16:33:25 -0400 | 
|---|---|---|
| committer | Michael Goulet <michael@errs.io> | 2024-09-14 16:33:25 -0400 | 
| commit | 63405fc2b3a15194e47712b738275c6d76de6b27 (patch) | |
| tree | 60cb1e6bd409feb8a2e3745b185b113a41cbdfba | |
| parent | 5fe0e40e05f2d0408c6a292b160f96d595aedfbc (diff) | |
| download | rust-63405fc2b3a15194e47712b738275c6d76de6b27.tar.gz rust-63405fc2b3a15194e47712b738275c6d76de6b27.zip | |
Consider synthetic closure bodies to be typeck children
| -rw-r--r-- | compiler/rustc_middle/src/ty/util.rs | 5 | ||||
| -rw-r--r-- | tests/ui/async-await/async-closures/debuginfo-by-move-body.rs | 19 | 
2 files changed, 23 insertions, 1 deletions
| diff --git a/compiler/rustc_middle/src/ty/util.rs b/compiler/rustc_middle/src/ty/util.rs index d70ff8258d0..a0262f12cb5 100644 --- a/compiler/rustc_middle/src/ty/util.rs +++ b/compiler/rustc_middle/src/ty/util.rs @@ -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 { ... }`). diff --git a/tests/ui/async-await/async-closures/debuginfo-by-move-body.rs b/tests/ui/async-await/async-closures/debuginfo-by-move-body.rs new file mode 100644 index 00000000000..6f339f0c8ef --- /dev/null +++ b/tests/ui/async-await/async-closures/debuginfo-by-move-body.rs @@ -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; + }); +} | 
