From 526225fcf0a1c2734333ef4c395100ba505463ca Mon Sep 17 00:00:00 2001 From: Kivooeo Date: Thu, 23 Oct 2025 11:16:47 +0000 Subject: [PATCH] revert async changes --- compiler/rustc_monomorphize/src/collector.rs | 15 +--- .../async-fn-debug-awaitee-field.rs | 11 +-- .../item-collection/async-fn-impl.rs | 10 --- .../item-collection/opaque-return-impls.rs | 89 ------------------- tests/coverage/async.cov-map | 8 +- tests/coverage/async.coverage | 4 +- tests/coverage/async.rs | 2 +- .../future-sizes/async-awaiting-fut.rs | 6 +- .../future-sizes/async-awaiting-fut.stdout | 37 -------- .../ui/async-await/future-sizes/large-arg.rs | 6 +- .../async-await/future-sizes/large-arg.stdout | 42 --------- tests/ui/print_type_sizes/async.rs | 6 +- tests/ui/print_type_sizes/async.stdout | 33 ------- 13 files changed, 15 insertions(+), 254 deletions(-) delete mode 100644 tests/codegen-units/item-collection/async-fn-impl.rs delete mode 100644 tests/codegen-units/item-collection/opaque-return-impls.rs diff --git a/compiler/rustc_monomorphize/src/collector.rs b/compiler/rustc_monomorphize/src/collector.rs index f33f22460467b..a6da7616dc82b 100644 --- a/compiler/rustc_monomorphize/src/collector.rs +++ b/compiler/rustc_monomorphize/src/collector.rs @@ -1590,20 +1590,7 @@ impl<'v> RootCollector<'_, 'v> { fn process_nested_body(&mut self, def_id: LocalDefId) { match self.tcx.def_kind(def_id) { DefKind::Closure => { - // for 'pub async fn foo(..)' also trying to monomorphize foo::{closure} - let is_pub_fn_coroutine = - match *self.tcx.type_of(def_id).instantiate_identity().kind() { - ty::Coroutine(cor_id, _args) => { - let tcx = self.tcx; - let parent_id = tcx.parent(cor_id); - tcx.def_kind(parent_id) == DefKind::Fn - && tcx.asyncness(parent_id).is_async() - && tcx.visibility(parent_id).is_public() - } - ty::Closure(..) | ty::CoroutineClosure(..) => false, - _ => unreachable!(), - }; - if (self.strategy == MonoItemCollectionStrategy::Eager || is_pub_fn_coroutine) + if self.strategy == MonoItemCollectionStrategy::Eager && !self .tcx .generics_of(self.tcx.typeck_root_def_id(def_id.to_def_id())) diff --git a/tests/codegen-llvm/async-fn-debug-awaitee-field.rs b/tests/codegen-llvm/async-fn-debug-awaitee-field.rs index b9d3d9ee66e53..90d00924c07ca 100644 --- a/tests/codegen-llvm/async-fn-debug-awaitee-field.rs +++ b/tests/codegen-llvm/async-fn-debug-awaitee-field.rs @@ -18,11 +18,8 @@ pub async fn async_fn_test() { pub async fn foo() {} -// NONMSVC: [[AWAITEE_TYPE:![0-9]*]] = !DICompositeType(tag: DW_TAG_structure_type, name: "{async_fn_env#0}", scope: [[AWAITEE_SCOPE:![0-9]*]], -// MSVC: [[AWAITEE_TYPE:![0-9]*]] = !DICompositeType(tag: DW_TAG_union_type, name: "enum2$", -// NONMSVC: [[AWAITEE_SCOPE]] = !DINamespace(name: "foo", -// NONMSVC: [[GEN:!.*]] = !DICompositeType(tag: DW_TAG_structure_type, name: "{async_fn_env#0}", scope: [[GEN_SCOPE:![0-9]*]], -// MSVC: [[GEN:!.*]] = !DICompositeType(tag: DW_TAG_union_type, name: "enum2$", -// NONMSVC: [[GEN_SCOPE:!.*]] = !DINamespace(name: "async_fn_test", // CHECK: [[SUSPEND_STRUCT:!.*]] = !DICompositeType(tag: DW_TAG_structure_type, name: "Suspend0", scope: [[GEN]], -// CHECK: !DIDerivedType(tag: DW_TAG_member, name: "__awaitee", scope: [[SUSPEND_STRUCT]], {{.*}}, baseType: [[AWAITEE_TYPE]], +// CHECK: !DIDerivedType(tag: DW_TAG_member, name: "__awaitee", scope: [[SUSPEND_STRUCT]], {{.*}}, baseType: [[AWAITEE_TYPE:![0-9]*]], +// NONMSVC: [[AWAITEE_TYPE]] = !DICompositeType(tag: DW_TAG_structure_type, name: "{async_fn_env#0}", scope: [[AWAITEE_SCOPE:![0-9]*]], +// MSVC: [[AWAITEE_TYPE]] = !DICompositeType(tag: DW_TAG_union_type, name: "enum2$", +// NONMSVC: [[AWAITEE_SCOPE]] = !DINamespace(name: "foo", diff --git a/tests/codegen-units/item-collection/async-fn-impl.rs b/tests/codegen-units/item-collection/async-fn-impl.rs deleted file mode 100644 index 540fa0b322812..0000000000000 --- a/tests/codegen-units/item-collection/async-fn-impl.rs +++ /dev/null @@ -1,10 +0,0 @@ -//@ edition: 2024 -// When pub async fn is monomorphized, its implementation coroutine is also monomorphized -//@ compile-flags: --crate-type=lib - -//~ MONO_ITEM fn async_fn @@ -//~ MONO_ITEM fn async_fn::{closure#0} @@ -#[unsafe(no_mangle)] -pub async fn async_fn(x: u64) -> bool { - true -} diff --git a/tests/codegen-units/item-collection/opaque-return-impls.rs b/tests/codegen-units/item-collection/opaque-return-impls.rs deleted file mode 100644 index 7d5f4f5b66982..0000000000000 --- a/tests/codegen-units/item-collection/opaque-return-impls.rs +++ /dev/null @@ -1,89 +0,0 @@ -//@ only-x86_64-unknown-linux-gnu -//@ compile-flags: -C panic=abort -Zinline-mir=no -Copt-level=0 -Zcross-crate-inline-threshold=never -Zmir-opt-level=0 -Cno-prepopulate-passes -//@ no-prefer-dynamic -//@ edition:2024 -#![crate_type = "lib"] - -trait TestTrait { - fn test_func(&self); -} - -struct TestStruct {} - -impl TestTrait for TestStruct { - fn test_func(&self) { - println!("TestStruct::test_func"); - } -} - -#[inline(never)] -pub fn foo() -> impl TestTrait { - TestStruct {} -} - -//~ MONO_ITEM fn foo -//~ MONO_ITEM fn ::test_func - -trait TestTrait2 { - fn test_func2(&self); -} - -struct TestStruct2 {} - -impl TestTrait2 for TestStruct2 { - fn test_func2(&self) { - println!("TestStruct2::test_func2"); - } -} - -#[inline(never)] -pub fn foo2() -> Box { - Box::new(TestStruct2 {}) -} - -//~ MONO_ITEM fn ::test_func2 -//~ MONO_ITEM fn alloc::alloc::exchange_malloc -//~ MONO_ITEM fn foo2 -//~ MONO_ITEM fn std::alloc::Global::alloc_impl -//~ MONO_ITEM fn std::boxed::Box::::new -//~ MONO_ITEM fn std::alloc::Layout::from_size_align_unchecked::precondition_check -//~ MONO_ITEM fn std::ptr::NonNull::::new_unchecked::precondition_check - -struct Counter { - count: usize, -} - -impl Counter { - fn new() -> Counter { - Counter { count: 0 } - } -} - -impl Iterator for Counter { - type Item = usize; - - fn next(&mut self) -> Option { - self.count += 1; - if self.count < 6 { Some(self.count) } else { None } - } -} - -#[inline(never)] -pub fn foo3() -> Box> { - Box::new(Counter::new()) -} - -//~ MONO_ITEM fn ::spec_advance_by -//~ MONO_ITEM fn ::spec_advance_by::{closure#0} -//~ MONO_ITEM fn ::advance_by -//~ MONO_ITEM fn ::next -//~ MONO_ITEM fn ::nth -//~ MONO_ITEM fn ::size_hint -//~ MONO_ITEM fn ::try_fold::, {closure@::spec_advance_by::{closure#0}}, std::option::Option>> -//~ MONO_ITEM fn > as std::ops::FromResidual>>::from_residual -//~ MONO_ITEM fn > as std::ops::Try>::branch -//~ MONO_ITEM fn > as std::ops::Try>::from_output -//~ MONO_ITEM fn foo3 -//~ MONO_ITEM fn std::boxed::Box::::new -//~ MONO_ITEM fn Counter::new -//~ MONO_ITEM fn core::fmt::rt::>::new_const::<1> diff --git a/tests/coverage/async.cov-map b/tests/coverage/async.cov-map index d75c4b5981a05..c528ad525b5f4 100644 --- a/tests/coverage/async.cov-map +++ b/tests/coverage/async.cov-map @@ -103,21 +103,21 @@ Number of file 0 mappings: 3 Highest counter ID seen: (none) Function name: async::g -Raw bytes (9): 0x[01, 01, 00, 01, 01, 1b, 01, 00, 12] +Raw bytes (9): 0x[01, 01, 00, 01, 01, 1b, 01, 00, 16] Number of files: 1 - file 0 => $DIR/async.rs Number of expressions: 0 Number of file 0 mappings: 1 -- Code(Counter(0)) at (prev + 27, 1) to (start + 0, 18) +- Code(Counter(0)) at (prev + 27, 1) to (start + 0, 22) Highest counter ID seen: c0 Function name: async::g::{closure#0} (unused) -Raw bytes (64): 0x[01, 01, 00, 0c, 00, 1b, 13, 00, 14, 00, 01, 0b, 00, 0c, 00, 01, 09, 00, 0a, 00, 00, 0e, 00, 17, 00, 00, 1b, 00, 1c, 00, 00, 20, 00, 22, 00, 01, 09, 00, 0a, 00, 00, 0e, 00, 17, 00, 00, 1b, 00, 1c, 00, 00, 20, 00, 22, 00, 01, 0e, 00, 10, 00, 02, 01, 00, 02] +Raw bytes (64): 0x[01, 01, 00, 0c, 00, 1b, 17, 00, 18, 00, 01, 0b, 00, 0c, 00, 01, 09, 00, 0a, 00, 00, 0e, 00, 17, 00, 00, 1b, 00, 1c, 00, 00, 20, 00, 22, 00, 01, 09, 00, 0a, 00, 00, 0e, 00, 17, 00, 00, 1b, 00, 1c, 00, 00, 20, 00, 22, 00, 01, 0e, 00, 10, 00, 02, 01, 00, 02] Number of files: 1 - file 0 => $DIR/async.rs Number of expressions: 0 Number of file 0 mappings: 12 -- Code(Zero) at (prev + 27, 19) to (start + 0, 20) +- Code(Zero) at (prev + 27, 23) to (start + 0, 24) - Code(Zero) at (prev + 1, 11) to (start + 0, 12) - Code(Zero) at (prev + 1, 9) to (start + 0, 10) - Code(Zero) at (prev + 0, 14) to (start + 0, 23) diff --git a/tests/coverage/async.coverage b/tests/coverage/async.coverage index 9409e6b1deb85..9fca1b6997d02 100644 --- a/tests/coverage/async.coverage +++ b/tests/coverage/async.coverage @@ -24,8 +24,8 @@ LL| | LL| 0|async fn foo() -> [bool; 10] { [false; 10] } // unused function; executor does not block on `h()` LL| | - LL| 1|async fn g(x: u8) { - ^0 + LL| 1|pub async fn g(x: u8) { + ^0 LL| 0| match x { LL| 0| y if e().await == y => (), LL| 0| y if f().await == y => (), diff --git a/tests/coverage/async.rs b/tests/coverage/async.rs index 777ad7ce7c0c3..da0a1c0b6f09c 100644 --- a/tests/coverage/async.rs +++ b/tests/coverage/async.rs @@ -24,7 +24,7 @@ async fn f() -> u8 { 1 } async fn foo() -> [bool; 10] { [false; 10] } // unused function; executor does not block on `h()` -async fn g(x: u8) { +pub async fn g(x: u8) { match x { y if e().await == y => (), y if f().await == y => (), diff --git a/tests/ui/async-await/future-sizes/async-awaiting-fut.rs b/tests/ui/async-await/future-sizes/async-awaiting-fut.rs index 7113f591630d1..a3f0bdc851481 100644 --- a/tests/ui/async-await/future-sizes/async-awaiting-fut.rs +++ b/tests/ui/async-await/future-sizes/async-awaiting-fut.rs @@ -1,11 +1,7 @@ -// FIXME(#61117): Respect debuginfo-level-tests, do not force debuginfo=0 -//@ compile-flags: -C debuginfo=0 -//@ compile-flags: -C panic=abort -Z print-type-sizes --crate-type lib -//@ needs-deterministic-layouts +//@ compile-flags: -Z print-type-sizes --crate-type lib //@ edition:2021 //@ build-pass //@ ignore-pass -//@ only-x86_64 async fn wait() {} diff --git a/tests/ui/async-await/future-sizes/async-awaiting-fut.stdout b/tests/ui/async-await/future-sizes/async-awaiting-fut.stdout index b30c15bcbe6ed..642e27b2a57d6 100644 --- a/tests/ui/async-await/future-sizes/async-awaiting-fut.stdout +++ b/tests/ui/async-await/future-sizes/async-awaiting-fut.stdout @@ -48,39 +48,6 @@ print-type-size variant `Returned`: 1024 bytes print-type-size upvar `.arg`: 1024 bytes print-type-size variant `Panicked`: 1024 bytes print-type-size upvar `.arg`: 1024 bytes -print-type-size type: `std::task::Context<'_>`: 32 bytes, alignment: 8 bytes -print-type-size field `.waker`: 8 bytes -print-type-size field `.local_waker`: 8 bytes -print-type-size field `.ext`: 16 bytes -print-type-size field `._marker`: 0 bytes -print-type-size field `._marker2`: 0 bytes -print-type-size type: `std::panic::Location<'_>`: 24 bytes, alignment: 8 bytes -print-type-size field `.filename`: 16 bytes -print-type-size field `.line`: 4 bytes -print-type-size field `.col`: 4 bytes -print-type-size field `._filename`: 0 bytes -print-type-size type: `core::task::wake::ExtData<'_>`: 16 bytes, alignment: 8 bytes -print-type-size variant `Some`: 16 bytes -print-type-size field `.0`: 16 bytes -print-type-size variant `None`: 0 bytes -print-type-size field `.0`: 0 bytes -print-type-size type: `std::panic::AssertUnwindSafe>`: 16 bytes, alignment: 8 bytes -print-type-size field `.0`: 16 bytes -print-type-size type: `std::ptr::NonNull`: 16 bytes, alignment: 8 bytes -print-type-size field `.pointer`: 16 bytes -print-type-size type: `std::pin::Pin<&mut {async fn body of big_fut()}>`: 8 bytes, alignment: 8 bytes -print-type-size field `.pointer`: 8 bytes -print-type-size type: `std::pin::Pin<&mut {async fn body of calls_fut<{async fn body of big_fut()}>()}>`: 8 bytes, alignment: 8 bytes -print-type-size field `.pointer`: 8 bytes -print-type-size type: `std::pin::Pin<&mut {async fn body of test()}>`: 8 bytes, alignment: 8 bytes -print-type-size field `.pointer`: 8 bytes -print-type-size type: `std::pin::Pin<&mut {async fn body of wait()}>`: 8 bytes, alignment: 8 bytes -print-type-size field `.pointer`: 8 bytes -print-type-size type: `std::ptr::DynMetadata`: 8 bytes, alignment: 8 bytes -print-type-size field `._vtable_ptr`: 8 bytes -print-type-size field `._phantom`: 0 bytes -print-type-size type: `std::ptr::NonNull`: 8 bytes, alignment: 8 bytes -print-type-size field `.pointer`: 8 bytes print-type-size type: `std::mem::ManuallyDrop`: 1 bytes, alignment: 1 bytes print-type-size field `.value`: 1 bytes print-type-size type: `std::mem::ManuallyDrop<{async fn body of wait()}>`: 1 bytes, alignment: 1 bytes @@ -103,7 +70,3 @@ print-type-size discriminant: 1 bytes print-type-size variant `Unresumed`: 0 bytes print-type-size variant `Returned`: 0 bytes print-type-size variant `Panicked`: 0 bytes -print-type-size type: `std::marker::PhantomData<&str>`: 0 bytes, alignment: 1 bytes -print-type-size type: `std::marker::PhantomData<*mut ()>`: 0 bytes, alignment: 1 bytes -print-type-size type: `std::marker::PhantomData`: 0 bytes, alignment: 1 bytes -print-type-size type: `std::marker::PhantomData &()>`: 0 bytes, alignment: 1 bytes diff --git a/tests/ui/async-await/future-sizes/large-arg.rs b/tests/ui/async-await/future-sizes/large-arg.rs index b05a2b7191512..5fbae22a7714d 100644 --- a/tests/ui/async-await/future-sizes/large-arg.rs +++ b/tests/ui/async-await/future-sizes/large-arg.rs @@ -1,11 +1,7 @@ -// FIXME(#61117): Respect debuginfo-level-tests, do not force debuginfo=0 -//@ compile-flags: -C debuginfo=0 -//@ compile-flags: -C panic=abort -Z print-type-sizes --crate-type=lib -//@ needs-deterministic-layouts +//@ compile-flags: -Z print-type-sizes --crate-type=lib //@ edition: 2021 //@ build-pass //@ ignore-pass -//@ only-x86_64 pub async fn test() { let _ = a([0u8; 1024]).await; diff --git a/tests/ui/async-await/future-sizes/large-arg.stdout b/tests/ui/async-await/future-sizes/large-arg.stdout index e00420d1493f4..67168a3d6ef74 100644 --- a/tests/ui/async-await/future-sizes/large-arg.stdout +++ b/tests/ui/async-await/future-sizes/large-arg.stdout @@ -58,45 +58,3 @@ print-type-size variant `Returned`: 1024 bytes print-type-size upvar `.t`: 1024 bytes print-type-size variant `Panicked`: 1024 bytes print-type-size upvar `.t`: 1024 bytes -print-type-size type: `std::task::Context<'_>`: 32 bytes, alignment: 8 bytes -print-type-size field `.waker`: 8 bytes -print-type-size field `.local_waker`: 8 bytes -print-type-size field `.ext`: 16 bytes -print-type-size field `._marker`: 0 bytes -print-type-size field `._marker2`: 0 bytes -print-type-size type: `std::panic::Location<'_>`: 24 bytes, alignment: 8 bytes -print-type-size field `.filename`: 16 bytes -print-type-size field `.line`: 4 bytes -print-type-size field `.col`: 4 bytes -print-type-size field `._filename`: 0 bytes -print-type-size type: `core::task::wake::ExtData<'_>`: 16 bytes, alignment: 8 bytes -print-type-size variant `Some`: 16 bytes -print-type-size field `.0`: 16 bytes -print-type-size variant `None`: 0 bytes -print-type-size field `.0`: 0 bytes -print-type-size type: `std::panic::AssertUnwindSafe>`: 16 bytes, alignment: 8 bytes -print-type-size field `.0`: 16 bytes -print-type-size type: `std::ptr::NonNull`: 16 bytes, alignment: 8 bytes -print-type-size field `.pointer`: 16 bytes -print-type-size type: `std::pin::Pin<&mut {async fn body of a<[u8; 1024]>()}>`: 8 bytes, alignment: 8 bytes -print-type-size field `.pointer`: 8 bytes -print-type-size type: `std::pin::Pin<&mut {async fn body of b<[u8; 1024]>()}>`: 8 bytes, alignment: 8 bytes -print-type-size field `.pointer`: 8 bytes -print-type-size type: `std::pin::Pin<&mut {async fn body of c<[u8; 1024]>()}>`: 8 bytes, alignment: 8 bytes -print-type-size field `.pointer`: 8 bytes -print-type-size type: `std::pin::Pin<&mut {async fn body of test()}>`: 8 bytes, alignment: 8 bytes -print-type-size field `.pointer`: 8 bytes -print-type-size type: `std::ptr::DynMetadata`: 8 bytes, alignment: 8 bytes -print-type-size field `._vtable_ptr`: 8 bytes -print-type-size field `._phantom`: 0 bytes -print-type-size type: `std::ptr::NonNull`: 8 bytes, alignment: 8 bytes -print-type-size field `.pointer`: 8 bytes -print-type-size type: `std::task::Poll<()>`: 1 bytes, alignment: 1 bytes -print-type-size discriminant: 1 bytes -print-type-size variant `Ready`: 0 bytes -print-type-size field `.0`: 0 bytes -print-type-size variant `Pending`: 0 bytes -print-type-size type: `std::marker::PhantomData<&str>`: 0 bytes, alignment: 1 bytes -print-type-size type: `std::marker::PhantomData<*mut ()>`: 0 bytes, alignment: 1 bytes -print-type-size type: `std::marker::PhantomData`: 0 bytes, alignment: 1 bytes -print-type-size type: `std::marker::PhantomData &()>`: 0 bytes, alignment: 1 bytes diff --git a/tests/ui/print_type_sizes/async.rs b/tests/ui/print_type_sizes/async.rs index b6ec88426345b..805bccbcf6381 100644 --- a/tests/ui/print_type_sizes/async.rs +++ b/tests/ui/print_type_sizes/async.rs @@ -1,11 +1,7 @@ -// FIXME(#61117): Respect debuginfo-level-tests, do not force debuginfo=0 -//@ compile-flags: -C debuginfo=0 -//@ compile-flags: -C panic=abort -Z print-type-sizes --crate-type lib -//@ needs-deterministic-layouts +//@ compile-flags: -Z print-type-sizes --crate-type lib //@ edition:2021 //@ build-pass //@ ignore-pass -//@ only-x86_64 #![allow(dropping_copy_types)] diff --git a/tests/ui/print_type_sizes/async.stdout b/tests/ui/print_type_sizes/async.stdout index d3d6b6471c6ef..83a6962e4cd13 100644 --- a/tests/ui/print_type_sizes/async.stdout +++ b/tests/ui/print_type_sizes/async.stdout @@ -16,35 +16,6 @@ print-type-size type: `std::mem::MaybeUninit<[u8; 8192]>`: 8192 bytes, alignment print-type-size variant `MaybeUninit`: 8192 bytes print-type-size field `.uninit`: 0 bytes print-type-size field `.value`: 8192 bytes -print-type-size type: `std::task::Context<'_>`: 32 bytes, alignment: 8 bytes -print-type-size field `.waker`: 8 bytes -print-type-size field `.local_waker`: 8 bytes -print-type-size field `.ext`: 16 bytes -print-type-size field `._marker`: 0 bytes -print-type-size field `._marker2`: 0 bytes -print-type-size type: `std::panic::Location<'_>`: 24 bytes, alignment: 8 bytes -print-type-size field `.filename`: 16 bytes -print-type-size field `.line`: 4 bytes -print-type-size field `.col`: 4 bytes -print-type-size field `._filename`: 0 bytes -print-type-size type: `core::task::wake::ExtData<'_>`: 16 bytes, alignment: 8 bytes -print-type-size variant `Some`: 16 bytes -print-type-size field `.0`: 16 bytes -print-type-size variant `None`: 0 bytes -print-type-size field `.0`: 0 bytes -print-type-size type: `std::panic::AssertUnwindSafe>`: 16 bytes, alignment: 8 bytes -print-type-size field `.0`: 16 bytes -print-type-size type: `std::ptr::NonNull`: 16 bytes, alignment: 8 bytes -print-type-size field `.pointer`: 16 bytes -print-type-size type: `std::pin::Pin<&mut {async fn body of test()}>`: 8 bytes, alignment: 8 bytes -print-type-size field `.pointer`: 8 bytes -print-type-size type: `std::pin::Pin<&mut {async fn body of wait()}>`: 8 bytes, alignment: 8 bytes -print-type-size field `.pointer`: 8 bytes -print-type-size type: `std::ptr::DynMetadata`: 8 bytes, alignment: 8 bytes -print-type-size field `._vtable_ptr`: 8 bytes -print-type-size field `._phantom`: 0 bytes -print-type-size type: `std::ptr::NonNull`: 8 bytes, alignment: 8 bytes -print-type-size field `.pointer`: 8 bytes print-type-size type: `std::mem::ManuallyDrop<{async fn body of wait()}>`: 1 bytes, alignment: 1 bytes print-type-size field `.value`: 1 bytes print-type-size type: `std::mem::MaybeUninit<{async fn body of wait()}>`: 1 bytes, alignment: 1 bytes @@ -61,7 +32,3 @@ print-type-size discriminant: 1 bytes print-type-size variant `Unresumed`: 0 bytes print-type-size variant `Returned`: 0 bytes print-type-size variant `Panicked`: 0 bytes -print-type-size type: `std::marker::PhantomData<&str>`: 0 bytes, alignment: 1 bytes -print-type-size type: `std::marker::PhantomData<*mut ()>`: 0 bytes, alignment: 1 bytes -print-type-size type: `std::marker::PhantomData`: 0 bytes, alignment: 1 bytes -print-type-size type: `std::marker::PhantomData &()>`: 0 bytes, alignment: 1 bytes