mirror of
https://github.com/rust-lang/rust.git
synced 2025-05-14 02:49:40 +00:00
Compute generator sizes with -Zprint_type_sizes
This commit is contained in:
parent
023b5136b5
commit
b45b9489bb
@ -33,6 +33,7 @@ pub enum DataTypeKind {
|
||||
Union,
|
||||
Enum,
|
||||
Closure,
|
||||
Generator,
|
||||
}
|
||||
|
||||
#[derive(PartialEq, Eq, Hash, Debug)]
|
||||
@ -113,7 +114,7 @@ impl CodeStats {
|
||||
let mut max_variant_size = discr_size;
|
||||
|
||||
let struct_like = match kind {
|
||||
DataTypeKind::Struct | DataTypeKind::Closure => true,
|
||||
DataTypeKind::Struct | DataTypeKind::Closure | DataTypeKind::Generator => true,
|
||||
DataTypeKind::Enum | DataTypeKind::Union => false,
|
||||
};
|
||||
for (i, variant_info) in variants.into_iter().enumerate() {
|
||||
|
@ -826,6 +826,12 @@ fn record_layout_for_printing_outlined<'tcx>(
|
||||
return;
|
||||
}
|
||||
|
||||
ty::Generator(..) => {
|
||||
debug!("print-type-size t: `{:?}` record generator", layout.ty);
|
||||
record(DataTypeKind::Generator, false, None, vec![]);
|
||||
return;
|
||||
}
|
||||
|
||||
_ => {
|
||||
debug!("print-type-size t: `{:?}` skip non-nominal", layout.ty);
|
||||
return;
|
||||
|
19
src/test/ui/print_type_sizes/async.rs
Normal file
19
src/test/ui/print_type_sizes/async.rs
Normal file
@ -0,0 +1,19 @@
|
||||
// compile-flags: -Z print-type-sizes
|
||||
// edition:2021
|
||||
// build-pass
|
||||
// ignore-pass
|
||||
|
||||
#![feature(start)]
|
||||
|
||||
async fn wait() {}
|
||||
|
||||
async fn test(arg: [u8; 8192]) {
|
||||
wait().await;
|
||||
drop(arg);
|
||||
}
|
||||
|
||||
#[start]
|
||||
fn start(_: isize, _: *const *const u8) -> isize {
|
||||
let _ = test([0; 8192]);
|
||||
0
|
||||
}
|
25
src/test/ui/print_type_sizes/async.stdout
Normal file
25
src/test/ui/print_type_sizes/async.stdout
Normal file
@ -0,0 +1,25 @@
|
||||
print-type-size type: `[static generator@$DIR/async.rs:10:32: 13:2]`: 16386 bytes, alignment: 1 bytes
|
||||
print-type-size end padding: 16386 bytes
|
||||
print-type-size type: `std::future::from_generator::GenFuture<[static generator@$DIR/async.rs:10:32: 13:2]>`: 16386 bytes, alignment: 1 bytes
|
||||
print-type-size field `.0`: 16386 bytes
|
||||
print-type-size type: `std::mem::ManuallyDrop<[u8; 8192]>`: 8192 bytes, alignment: 1 bytes
|
||||
print-type-size field `.value`: 8192 bytes
|
||||
print-type-size type: `std::mem::MaybeUninit<[u8; 8192]>`: 8192 bytes, alignment: 1 bytes
|
||||
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: `[static generator@$DIR/async.rs:8:17: 8:19]`: 1 bytes, alignment: 1 bytes
|
||||
print-type-size end padding: 1 bytes
|
||||
print-type-size type: `std::future::from_generator::GenFuture<[static generator@$DIR/async.rs:8:17: 8:19]>`: 1 bytes, alignment: 1 bytes
|
||||
print-type-size field `.0`: 1 bytes
|
||||
print-type-size type: `std::mem::ManuallyDrop<std::future::from_generator::GenFuture<[static generator@$DIR/async.rs:8:17: 8:19]>>`: 1 bytes, alignment: 1 bytes
|
||||
print-type-size field `.value`: 1 bytes
|
||||
print-type-size type: `std::mem::MaybeUninit<std::future::from_generator::GenFuture<[static generator@$DIR/async.rs:8:17: 8:19]>>`: 1 bytes, alignment: 1 bytes
|
||||
print-type-size variant `MaybeUninit`: 1 bytes
|
||||
print-type-size field `.uninit`: 0 bytes
|
||||
print-type-size field `.value`: 1 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
|
20
src/test/ui/print_type_sizes/generator.rs
Normal file
20
src/test/ui/print_type_sizes/generator.rs
Normal file
@ -0,0 +1,20 @@
|
||||
// compile-flags: -Z print-type-sizes
|
||||
// build-pass
|
||||
// ignore-pass
|
||||
|
||||
#![feature(start, generators, generator_trait)]
|
||||
|
||||
use std::ops::Generator;
|
||||
|
||||
fn generator<const C: usize>(array: [u8; C]) -> impl Generator<Yield = (), Return = ()> {
|
||||
move |()| {
|
||||
yield ();
|
||||
let _ = array;
|
||||
}
|
||||
}
|
||||
|
||||
#[start]
|
||||
fn start(_: isize, _: *const *const u8) -> isize {
|
||||
let _ = generator([0; 8192]);
|
||||
0
|
||||
}
|
2
src/test/ui/print_type_sizes/generator.stdout
Normal file
2
src/test/ui/print_type_sizes/generator.stdout
Normal file
@ -0,0 +1,2 @@
|
||||
print-type-size type: `[generator@$DIR/generator.rs:10:5: 10:14]`: 8193 bytes, alignment: 1 bytes
|
||||
print-type-size end padding: 8193 bytes
|
Loading…
Reference in New Issue
Block a user