diff options
author | Daniel Baumann <daniel.baumann@progress-linux.org> | 2024-04-17 12:19:03 +0000 |
---|---|---|
committer | Daniel Baumann <daniel.baumann@progress-linux.org> | 2024-04-17 12:19:03 +0000 |
commit | 64d98f8ee037282c35007b64c2649055c56af1db (patch) | |
tree | 5492bcf97fce41ee1c0b1cc2add283f3e66cdab0 /tests/ui/print_type_sizes/generics.rs | |
parent | Adding debian version 1.67.1+dfsg1-1. (diff) | |
download | rustc-64d98f8ee037282c35007b64c2649055c56af1db.tar.xz rustc-64d98f8ee037282c35007b64c2649055c56af1db.zip |
Merging upstream version 1.68.2+dfsg1.
Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
Diffstat (limited to 'tests/ui/print_type_sizes/generics.rs')
-rw-r--r-- | tests/ui/print_type_sizes/generics.rs | 51 |
1 files changed, 51 insertions, 0 deletions
diff --git a/tests/ui/print_type_sizes/generics.rs b/tests/ui/print_type_sizes/generics.rs new file mode 100644 index 000000000..05097087d --- /dev/null +++ b/tests/ui/print_type_sizes/generics.rs @@ -0,0 +1,51 @@ +// compile-flags: -Z print-type-sizes --crate-type=lib +// build-pass +// ignore-pass +// ^-- needed because `--pass check` does not emit the output needed. +// FIXME: consider using an attribute instead of side-effects. + +// This file illustrates how generics are handled: types have to be +// monomorphized, in the MIR of the original function in which they +// occur, to have their size reported. + +#[derive(Copy, Clone)] +pub struct Pair<T> { + _car: T, + _cdr: T, +} + +impl<T> Pair<T> { + fn new(a: T, d: T) -> Self { + Pair { + _car: a, + _cdr: d, + } + } +} + +#[derive(Copy, Clone)] +pub struct SevenBytes([u8; 7]); +pub struct FiftyBytes([u8; 50]); + +pub struct ZeroSized; + +impl SevenBytes { + fn new() -> Self { SevenBytes([0; 7]) } +} + +impl FiftyBytes { + fn new() -> Self { FiftyBytes([0; 50]) } +} + +pub fn f1<T:Copy>(x: T) { + let _v: Pair<T> = Pair::new(x, x); + let _v2: Pair<FiftyBytes> = + Pair::new(FiftyBytes::new(), FiftyBytes::new()); +} + +pub fn start() { + let _b: Pair<u8> = Pair::new(0, 0); + let _s: Pair<SevenBytes> = Pair::new(SevenBytes::new(), SevenBytes::new()); + let ref _z: ZeroSized = ZeroSized; + f1::<SevenBytes>(SevenBytes::new()); +} |