diff options
author | Daniel Baumann <daniel.baumann@progress-linux.org> | 2024-04-17 12:19:13 +0000 |
---|---|---|
committer | Daniel Baumann <daniel.baumann@progress-linux.org> | 2024-04-17 12:19:13 +0000 |
commit | 218caa410aa38c29984be31a5229b9fa717560ee (patch) | |
tree | c54bd55eeb6e4c508940a30e94c0032fbd45d677 /src/test/ui/print_type_sizes | |
parent | Releasing progress-linux version 1.67.1+dfsg1-1~progress7.99u1. (diff) | |
download | rustc-218caa410aa38c29984be31a5229b9fa717560ee.tar.xz rustc-218caa410aa38c29984be31a5229b9fa717560ee.zip |
Merging upstream version 1.68.2+dfsg1.
Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
Diffstat (limited to 'src/test/ui/print_type_sizes')
23 files changed, 0 insertions, 747 deletions
diff --git a/src/test/ui/print_type_sizes/anonymous.rs b/src/test/ui/print_type_sizes/anonymous.rs deleted file mode 100644 index 2b008ca3b..000000000 --- a/src/test/ui/print_type_sizes/anonymous.rs +++ /dev/null @@ -1,23 +0,0 @@ -// compile-flags: -Z print-type-sizes -// build-pass - -// All of the types that occur in this function are uninteresting, in -// that one cannot control the sizes of these types with the same sort -// of enum-variant manipulation tricks. - -#![feature(start)] - -#[start] -fn start(_: isize, _: *const *const u8) -> isize { - let _byte: u8 = 0; - let _word: usize = 0; - let _tuple: (u8, usize)= (0, 0); - let _array: [u8; 128] = [0; 128]; - let _fn: fn (u8) -> u8 = id; - let _diverging: fn (u8) -> ! = bye; - - fn id(x: u8) -> u8 { x }; - fn bye(_: u8) -> ! { loop { } } - - 0 -} diff --git a/src/test/ui/print_type_sizes/generics.rs b/src/test/ui/print_type_sizes/generics.rs deleted file mode 100644 index 3ef7b60db..000000000 --- a/src/test/ui/print_type_sizes/generics.rs +++ /dev/null @@ -1,71 +0,0 @@ -// compile-flags: -Z print-type-sizes -// 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. - -#![feature(start)] - -// In an ad-hoc attempt to avoid the injection of unwinding code -// (which clutters the output of `-Z print-type-sizes` with types from -// `unwind::libunwind`): -// -// * I am not using Default to build values because that seems to -// cause the injection of unwinding code. (Instead I just make `fn new` -// methods.) -// -// * Pair derive Copy to ensure that we don't inject -// unwinding code into generic uses of Pair when T itself is also -// Copy. -// -// (I suspect this reflect some naivety within the rust compiler -// itself; it should be checking for drop glue, i.e., a destructor -// somewhere in the monomorphized types. It should not matter whether -// the type is Copy.) -#[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()); -} - -#[start] -fn start(_: isize, _: *const *const u8) -> isize { - 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()); - 0 -} diff --git a/src/test/ui/print_type_sizes/generics.stdout b/src/test/ui/print_type_sizes/generics.stdout deleted file mode 100644 index 0f02f3979..000000000 --- a/src/test/ui/print_type_sizes/generics.stdout +++ /dev/null @@ -1,14 +0,0 @@ -print-type-size type: `Pair<FiftyBytes>`: 100 bytes, alignment: 1 bytes -print-type-size field `._car`: 50 bytes -print-type-size field `._cdr`: 50 bytes -print-type-size type: `FiftyBytes`: 50 bytes, alignment: 1 bytes -print-type-size field `.0`: 50 bytes -print-type-size type: `Pair<SevenBytes>`: 14 bytes, alignment: 1 bytes -print-type-size field `._car`: 7 bytes -print-type-size field `._cdr`: 7 bytes -print-type-size type: `SevenBytes`: 7 bytes, alignment: 1 bytes -print-type-size field `.0`: 7 bytes -print-type-size type: `Pair<u8>`: 2 bytes, alignment: 1 bytes -print-type-size field `._car`: 1 bytes -print-type-size field `._cdr`: 1 bytes -print-type-size type: `ZeroSized`: 0 bytes, alignment: 1 bytes diff --git a/src/test/ui/print_type_sizes/multiple_types.rs b/src/test/ui/print_type_sizes/multiple_types.rs deleted file mode 100644 index f1ad27ec1..000000000 --- a/src/test/ui/print_type_sizes/multiple_types.rs +++ /dev/null @@ -1,23 +0,0 @@ -// compile-flags: -Z print-type-sizes -// build-pass - -// This file illustrates that when multiple structural types occur in -// a function, every one of them is included in the output. - -#![feature(start)] - -pub struct SevenBytes([u8; 7]); -pub struct FiftyBytes([u8; 50]); - -pub enum Enum { - Small(SevenBytes), - Large(FiftyBytes), -} - -#[start] -fn start(_: isize, _: *const *const u8) -> isize { - let _e: Enum; - let _f: FiftyBytes; - let _s: SevenBytes; - 0 -} diff --git a/src/test/ui/print_type_sizes/multiple_types.stdout b/src/test/ui/print_type_sizes/multiple_types.stdout deleted file mode 100644 index 641188154..000000000 --- a/src/test/ui/print_type_sizes/multiple_types.stdout +++ /dev/null @@ -1,10 +0,0 @@ -print-type-size type: `Enum`: 51 bytes, alignment: 1 bytes -print-type-size discriminant: 1 bytes -print-type-size variant `Large`: 50 bytes -print-type-size field `.0`: 50 bytes -print-type-size variant `Small`: 7 bytes -print-type-size field `.0`: 7 bytes -print-type-size type: `FiftyBytes`: 50 bytes, alignment: 1 bytes -print-type-size field `.0`: 50 bytes -print-type-size type: `SevenBytes`: 7 bytes, alignment: 1 bytes -print-type-size field `.0`: 7 bytes diff --git a/src/test/ui/print_type_sizes/niche-filling.rs b/src/test/ui/print_type_sizes/niche-filling.rs deleted file mode 100644 index 0716cee21..000000000 --- a/src/test/ui/print_type_sizes/niche-filling.rs +++ /dev/null @@ -1,101 +0,0 @@ -// compile-flags: -Z print-type-sizes -// 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 niche-filling enums are handled, -// modelled after cases like `Option<&u32>`, `Option<bool>` and such. -// -// It uses NonZeroU32 rather than `&_` or `Unique<_>`, because -// the test is not set up to deal with target-dependent pointer width. -// -// It avoids using u64/i64 because on some targets that is only 4-byte -// aligned (while on most it is 8-byte aligned) and so the resulting -// padding and overall computed sizes can be quite different. - -#![feature(start)] -#![feature(rustc_attrs)] -#![allow(dead_code)] - -use std::num::NonZeroU32; - -pub enum MyOption<T> { None, Some(T) } - -#[rustc_layout_scalar_valid_range_start(0)] -#[rustc_layout_scalar_valid_range_end(0xFF_FF_FF_FE)] -pub struct MyNotNegativeOne { - _i: i32, -} - -impl<T> Default for MyOption<T> { - fn default() -> Self { MyOption::None } -} - -pub enum EmbeddedDiscr { - None, - Record { pre: u8, val: NonZeroU32, post: u16 }, -} - -impl Default for EmbeddedDiscr { - fn default() -> Self { EmbeddedDiscr::None } -} - -#[derive(Default)] -pub struct IndirectNonZero { - pre: u8, - nested: NestedNonZero, - post: u16, -} - -pub struct NestedNonZero { - pre: u8, - val: NonZeroU32, - post: u16, -} - -impl Default for NestedNonZero { - fn default() -> Self { - NestedNonZero { pre: 0, val: NonZeroU32::new(1).unwrap(), post: 0 } - } -} - -pub enum Enum4<A, B, C, D> { - One(A), - Two(B), - Three(C), - Four(D) -} - -pub union Union1<A: Copy> { - a: A, -} - -pub union Union2<A: Copy, B: Copy> { - a: A, - b: B, -} - -#[start] -fn start(_: isize, _: *const *const u8) -> isize { - let _x: MyOption<NonZeroU32> = Default::default(); - let _y: EmbeddedDiscr = Default::default(); - let _z: MyOption<IndirectNonZero> = Default::default(); - let _a: MyOption<bool> = Default::default(); - let _b: MyOption<char> = Default::default(); - let _c: MyOption<std::cmp::Ordering> = Default::default(); - let _d: MyOption<MyOption<u8>> = Default::default(); - let _e: Enum4<(), char, (), ()> = Enum4::One(()); - let _f: Enum4<(), (), bool, ()> = Enum4::One(()); - let _g: Enum4<(), (), (), MyOption<u8>> = Enum4::One(()); - let _h: MyOption<MyNotNegativeOne> = Default::default(); - - // Unions do not currently participate in niche filling. - let _i: MyOption<Union2<NonZeroU32, u32>> = Default::default(); - - // ...even when theoretically possible. - let _j: MyOption<Union1<NonZeroU32>> = Default::default(); - let _k: MyOption<Union2<NonZeroU32, NonZeroU32>> = Default::default(); - - 0 -} diff --git a/src/test/ui/print_type_sizes/niche-filling.stdout b/src/test/ui/print_type_sizes/niche-filling.stdout deleted file mode 100644 index d1753c26c..000000000 --- a/src/test/ui/print_type_sizes/niche-filling.stdout +++ /dev/null @@ -1,112 +0,0 @@ -print-type-size type: `IndirectNonZero`: 12 bytes, alignment: 4 bytes -print-type-size field `.nested`: 8 bytes -print-type-size field `.post`: 2 bytes -print-type-size field `.pre`: 1 bytes -print-type-size end padding: 1 bytes -print-type-size type: `MyOption<IndirectNonZero>`: 12 bytes, alignment: 4 bytes -print-type-size variant `Some`: 12 bytes -print-type-size field `.0`: 12 bytes -print-type-size variant `None`: 0 bytes -print-type-size type: `EmbeddedDiscr`: 8 bytes, alignment: 4 bytes -print-type-size discriminant: 1 bytes -print-type-size variant `Record`: 7 bytes -print-type-size field `.pre`: 1 bytes -print-type-size field `.post`: 2 bytes -print-type-size field `.val`: 4 bytes -print-type-size variant `None`: 0 bytes -print-type-size type: `MyOption<Union1<std::num::NonZeroU32>>`: 8 bytes, alignment: 4 bytes -print-type-size discriminant: 4 bytes -print-type-size variant `Some`: 4 bytes -print-type-size field `.0`: 4 bytes -print-type-size variant `None`: 0 bytes -print-type-size type: `MyOption<Union2<std::num::NonZeroU32, std::num::NonZeroU32>>`: 8 bytes, alignment: 4 bytes -print-type-size discriminant: 4 bytes -print-type-size variant `Some`: 4 bytes -print-type-size field `.0`: 4 bytes -print-type-size variant `None`: 0 bytes -print-type-size type: `MyOption<Union2<std::num::NonZeroU32, u32>>`: 8 bytes, alignment: 4 bytes -print-type-size discriminant: 4 bytes -print-type-size variant `Some`: 4 bytes -print-type-size field `.0`: 4 bytes -print-type-size variant `None`: 0 bytes -print-type-size type: `NestedNonZero`: 8 bytes, alignment: 4 bytes -print-type-size field `.val`: 4 bytes -print-type-size field `.post`: 2 bytes -print-type-size field `.pre`: 1 bytes -print-type-size end padding: 1 bytes -print-type-size type: `Enum4<(), char, (), ()>`: 4 bytes, alignment: 4 bytes -print-type-size variant `Two`: 4 bytes -print-type-size field `.0`: 4 bytes -print-type-size variant `One`: 0 bytes -print-type-size field `.0`: 0 bytes -print-type-size variant `Three`: 0 bytes -print-type-size field `.0`: 0 bytes -print-type-size variant `Four`: 0 bytes -print-type-size field `.0`: 0 bytes -print-type-size type: `MyNotNegativeOne`: 4 bytes, alignment: 4 bytes -print-type-size field `._i`: 4 bytes -print-type-size type: `MyOption<MyNotNegativeOne>`: 4 bytes, alignment: 4 bytes -print-type-size variant `Some`: 4 bytes -print-type-size field `.0`: 4 bytes -print-type-size variant `None`: 0 bytes -print-type-size type: `MyOption<char>`: 4 bytes, alignment: 4 bytes -print-type-size variant `Some`: 4 bytes -print-type-size field `.0`: 4 bytes -print-type-size variant `None`: 0 bytes -print-type-size type: `MyOption<std::num::NonZeroU32>`: 4 bytes, alignment: 4 bytes -print-type-size variant `Some`: 4 bytes -print-type-size field `.0`: 4 bytes -print-type-size variant `None`: 0 bytes -print-type-size type: `Union1<std::num::NonZeroU32>`: 4 bytes, alignment: 4 bytes -print-type-size variant `Union1`: 4 bytes -print-type-size field `.a`: 4 bytes -print-type-size type: `Union2<std::num::NonZeroU32, std::num::NonZeroU32>`: 4 bytes, alignment: 4 bytes -print-type-size variant `Union2`: 4 bytes -print-type-size field `.a`: 4 bytes -print-type-size field `.b`: 4 bytes, offset: 0 bytes, alignment: 4 bytes -print-type-size type: `Union2<std::num::NonZeroU32, u32>`: 4 bytes, alignment: 4 bytes -print-type-size variant `Union2`: 4 bytes -print-type-size field `.a`: 4 bytes -print-type-size field `.b`: 4 bytes, offset: 0 bytes, alignment: 4 bytes -print-type-size type: `std::num::NonZeroU32`: 4 bytes, alignment: 4 bytes -print-type-size field `.0`: 4 bytes -print-type-size type: `Enum4<(), (), (), MyOption<u8>>`: 2 bytes, alignment: 1 bytes -print-type-size variant `Four`: 2 bytes -print-type-size field `.0`: 2 bytes -print-type-size variant `One`: 0 bytes -print-type-size field `.0`: 0 bytes -print-type-size variant `Two`: 0 bytes -print-type-size field `.0`: 0 bytes -print-type-size variant `Three`: 0 bytes -print-type-size field `.0`: 0 bytes -print-type-size type: `MyOption<MyOption<u8>>`: 2 bytes, alignment: 1 bytes -print-type-size variant `Some`: 2 bytes -print-type-size field `.0`: 2 bytes -print-type-size variant `None`: 0 bytes -print-type-size type: `MyOption<u8>`: 2 bytes, alignment: 1 bytes -print-type-size discriminant: 1 bytes -print-type-size variant `Some`: 1 bytes -print-type-size field `.0`: 1 bytes -print-type-size variant `None`: 0 bytes -print-type-size type: `Enum4<(), (), bool, ()>`: 1 bytes, alignment: 1 bytes -print-type-size variant `Three`: 1 bytes -print-type-size field `.0`: 1 bytes -print-type-size variant `One`: 0 bytes -print-type-size field `.0`: 0 bytes -print-type-size variant `Two`: 0 bytes -print-type-size field `.0`: 0 bytes -print-type-size variant `Four`: 0 bytes -print-type-size field `.0`: 0 bytes -print-type-size type: `MyOption<bool>`: 1 bytes, alignment: 1 bytes -print-type-size variant `Some`: 1 bytes -print-type-size field `.0`: 1 bytes -print-type-size variant `None`: 0 bytes -print-type-size type: `MyOption<std::cmp::Ordering>`: 1 bytes, alignment: 1 bytes -print-type-size variant `Some`: 1 bytes -print-type-size field `.0`: 1 bytes -print-type-size variant `None`: 0 bytes -print-type-size type: `std::cmp::Ordering`: 1 bytes, alignment: 1 bytes -print-type-size discriminant: 1 bytes -print-type-size variant `Less`: 0 bytes -print-type-size variant `Equal`: 0 bytes -print-type-size variant `Greater`: 0 bytes diff --git a/src/test/ui/print_type_sizes/no_duplicates.rs b/src/test/ui/print_type_sizes/no_duplicates.rs deleted file mode 100644 index e45e4794a..000000000 --- a/src/test/ui/print_type_sizes/no_duplicates.rs +++ /dev/null @@ -1,23 +0,0 @@ -// compile-flags: -Z print-type-sizes -// 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 that when the same type occurs repeatedly -// (even if multiple functions), it is only printed once in the -// print-type-sizes output. - -#![feature(start)] - -pub struct SevenBytes([u8; 7]); - -pub fn f1() { - let _s: SevenBytes = SevenBytes([0; 7]); -} - -#[start] -fn start(_: isize, _: *const *const u8) -> isize { - let _s: SevenBytes = SevenBytes([0; 7]); - 0 -} diff --git a/src/test/ui/print_type_sizes/no_duplicates.stdout b/src/test/ui/print_type_sizes/no_duplicates.stdout deleted file mode 100644 index 50180f356..000000000 --- a/src/test/ui/print_type_sizes/no_duplicates.stdout +++ /dev/null @@ -1,2 +0,0 @@ -print-type-size type: `SevenBytes`: 7 bytes, alignment: 1 bytes -print-type-size field `.0`: 7 bytes diff --git a/src/test/ui/print_type_sizes/packed.rs b/src/test/ui/print_type_sizes/packed.rs deleted file mode 100644 index 269cc3cc2..000000000 --- a/src/test/ui/print_type_sizes/packed.rs +++ /dev/null @@ -1,69 +0,0 @@ -// compile-flags: -Z print-type-sizes -// 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 packing is handled; it should cause -// the elimination of padding that would normally be introduced -// to satisfy alignment desirata. -// -// It avoids using u64/i64 because on some targets that is only 4-byte -// aligned (while on most it is 8-byte aligned) and so the resulting -// padding and overall computed sizes can be quite different. - -#![allow(dead_code)] -#![feature(start)] - -#[derive(Default)] -#[repr(packed)] -struct Packed1 { - a: u8, - b: u8, - g: i32, - c: u8, - h: i16, - d: u8, -} - -#[derive(Default)] -#[repr(packed(2))] -struct Packed2 { - a: u8, - b: u8, - g: i32, - c: u8, - h: i16, - d: u8, -} - -#[derive(Default)] -#[repr(packed(2))] -#[repr(C)] -struct Packed2C { - a: u8, - b: u8, - g: i32, - c: u8, - h: i16, - d: u8, -} - -#[derive(Default)] -struct Padded { - a: u8, - b: u8, - g: i32, - c: u8, - h: i16, - d: u8, -} - -#[start] -fn start(_: isize, _: *const *const u8) -> isize { - let _c: Packed1 = Default::default(); - let _d: Packed2 = Default::default(); - let _e: Packed2C = Default::default(); - let _f: Padded = Default::default(); - 0 -} diff --git a/src/test/ui/print_type_sizes/packed.stdout b/src/test/ui/print_type_sizes/packed.stdout deleted file mode 100644 index 58e1bac9e..000000000 --- a/src/test/ui/print_type_sizes/packed.stdout +++ /dev/null @@ -1,31 +0,0 @@ -print-type-size type: `Packed2C`: 12 bytes, alignment: 2 bytes -print-type-size field `.a`: 1 bytes -print-type-size field `.b`: 1 bytes -print-type-size field `.g`: 4 bytes -print-type-size field `.c`: 1 bytes -print-type-size padding: 1 bytes -print-type-size field `.h`: 2 bytes -print-type-size field `.d`: 1 bytes -print-type-size end padding: 1 bytes -print-type-size type: `Padded`: 12 bytes, alignment: 4 bytes -print-type-size field `.g`: 4 bytes -print-type-size field `.h`: 2 bytes -print-type-size field `.a`: 1 bytes -print-type-size field `.b`: 1 bytes -print-type-size field `.c`: 1 bytes -print-type-size field `.d`: 1 bytes -print-type-size end padding: 2 bytes -print-type-size type: `Packed1`: 10 bytes, alignment: 1 bytes -print-type-size field `.a`: 1 bytes -print-type-size field `.b`: 1 bytes -print-type-size field `.g`: 4 bytes -print-type-size field `.c`: 1 bytes -print-type-size field `.h`: 2 bytes -print-type-size field `.d`: 1 bytes -print-type-size type: `Packed2`: 10 bytes, alignment: 2 bytes -print-type-size field `.g`: 4 bytes -print-type-size field `.h`: 2 bytes -print-type-size field `.a`: 1 bytes -print-type-size field `.b`: 1 bytes -print-type-size field `.c`: 1 bytes -print-type-size field `.d`: 1 bytes diff --git a/src/test/ui/print_type_sizes/padding.rs b/src/test/ui/print_type_sizes/padding.rs deleted file mode 100644 index d1acad16d..000000000 --- a/src/test/ui/print_type_sizes/padding.rs +++ /dev/null @@ -1,34 +0,0 @@ -// compile-flags: -Z print-type-sizes -// build-pass - -// This file illustrates how padding is handled: alignment -// requirements can lead to the introduction of padding, either before -// fields or at the end of the structure as a whole. -// -// It avoids using u64/i64 because on some targets that is only 4-byte -// aligned (while on most it is 8-byte aligned) and so the resulting -// padding and overall computed sizes can be quite different. - -#![feature(start)] -#![allow(dead_code)] - -struct S { - a: bool, - b: bool, - g: i32, -} - -enum E1 { - A(i32, i8), - B(S), -} - -enum E2 { - A(i8, i32), - B(S), -} - -#[start] -fn start(_: isize, _: *const *const u8) -> isize { - 0 -} diff --git a/src/test/ui/print_type_sizes/padding.stdout b/src/test/ui/print_type_sizes/padding.stdout deleted file mode 100644 index 9afdf7624..000000000 --- a/src/test/ui/print_type_sizes/padding.stdout +++ /dev/null @@ -1,23 +0,0 @@ -print-type-size type: `E1`: 12 bytes, alignment: 4 bytes -print-type-size discriminant: 1 bytes -print-type-size variant `B`: 11 bytes -print-type-size padding: 3 bytes -print-type-size field `.0`: 8 bytes, alignment: 4 bytes -print-type-size variant `A`: 7 bytes -print-type-size field `.1`: 1 bytes -print-type-size padding: 2 bytes -print-type-size field `.0`: 4 bytes, alignment: 4 bytes -print-type-size type: `E2`: 12 bytes, alignment: 4 bytes -print-type-size discriminant: 1 bytes -print-type-size variant `B`: 11 bytes -print-type-size padding: 3 bytes -print-type-size field `.0`: 8 bytes, alignment: 4 bytes -print-type-size variant `A`: 7 bytes -print-type-size field `.0`: 1 bytes -print-type-size padding: 2 bytes -print-type-size field `.1`: 4 bytes, alignment: 4 bytes -print-type-size type: `S`: 8 bytes, alignment: 4 bytes -print-type-size field `.g`: 4 bytes -print-type-size field `.a`: 1 bytes -print-type-size field `.b`: 1 bytes -print-type-size end padding: 2 bytes diff --git a/src/test/ui/print_type_sizes/repr-align.rs b/src/test/ui/print_type_sizes/repr-align.rs deleted file mode 100644 index 07544935b..000000000 --- a/src/test/ui/print_type_sizes/repr-align.rs +++ /dev/null @@ -1,38 +0,0 @@ -// compile-flags: -Z print-type-sizes -// 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 padding is handled: alignment -// requirements can lead to the introduction of padding, either before -// fields or at the end of the structure as a whole. -// -// It avoids using u64/i64 because on some targets that is only 4-byte -// aligned (while on most it is 8-byte aligned) and so the resulting -// padding and overall computed sizes can be quite different. -#![feature(start)] -#![allow(dead_code)] - -#[repr(align(16))] -#[derive(Default)] -struct A(i32); - -enum E { - A(i32), - B(A) -} - -#[derive(Default)] -struct S { - a: i32, - b: i32, - c: A, - d: i8, -} - -#[start] -fn start(_: isize, _: *const *const u8) -> isize { - let _s: S = Default::default(); - 0 -} diff --git a/src/test/ui/print_type_sizes/repr-align.stdout b/src/test/ui/print_type_sizes/repr-align.stdout deleted file mode 100644 index 33671bd8e..000000000 --- a/src/test/ui/print_type_sizes/repr-align.stdout +++ /dev/null @@ -1,16 +0,0 @@ -print-type-size type: `E`: 32 bytes, alignment: 16 bytes -print-type-size discriminant: 4 bytes -print-type-size variant `B`: 28 bytes -print-type-size padding: 12 bytes -print-type-size field `.0`: 16 bytes, alignment: 16 bytes -print-type-size variant `A`: 4 bytes -print-type-size field `.0`: 4 bytes -print-type-size type: `S`: 32 bytes, alignment: 16 bytes -print-type-size field `.c`: 16 bytes -print-type-size field `.a`: 4 bytes -print-type-size field `.b`: 4 bytes -print-type-size field `.d`: 1 bytes -print-type-size end padding: 7 bytes -print-type-size type: `A`: 16 bytes, alignment: 16 bytes -print-type-size field `.0`: 4 bytes -print-type-size end padding: 12 bytes diff --git a/src/test/ui/print_type_sizes/repr_int_c.rs b/src/test/ui/print_type_sizes/repr_int_c.rs deleted file mode 100644 index b8067c112..000000000 --- a/src/test/ui/print_type_sizes/repr_int_c.rs +++ /dev/null @@ -1,25 +0,0 @@ -// compile-flags: -Z print-type-sizes -// build-pass - -// This test makes sure that the tag is not grown for `repr(C)` or `repr(u8)` -// variants (see https://github.com/rust-lang/rust/issues/50098 for the original bug). - -#![feature(start)] -#![allow(dead_code)] - -#[repr(C, u8)] -enum ReprCu8 { - A(u16), - B, -} - -#[repr(u8)] -enum Repru8 { - A(u16), - B, -} - -#[start] -fn start(_: isize, _: *const *const u8) -> isize { - 0 -} diff --git a/src/test/ui/print_type_sizes/repr_int_c.stdout b/src/test/ui/print_type_sizes/repr_int_c.stdout deleted file mode 100644 index 254b3c7a8..000000000 --- a/src/test/ui/print_type_sizes/repr_int_c.stdout +++ /dev/null @@ -1,12 +0,0 @@ -print-type-size type: `ReprCu8`: 4 bytes, alignment: 2 bytes -print-type-size discriminant: 1 bytes -print-type-size variant `A`: 3 bytes -print-type-size padding: 1 bytes -print-type-size field `.0`: 2 bytes, alignment: 2 bytes -print-type-size variant `B`: 1 bytes -print-type-size type: `Repru8`: 4 bytes, alignment: 2 bytes -print-type-size discriminant: 1 bytes -print-type-size variant `A`: 3 bytes -print-type-size padding: 1 bytes -print-type-size field `.0`: 2 bytes, alignment: 2 bytes -print-type-size variant `B`: 0 bytes diff --git a/src/test/ui/print_type_sizes/uninhabited.rs b/src/test/ui/print_type_sizes/uninhabited.rs deleted file mode 100644 index 06a62db4e..000000000 --- a/src/test/ui/print_type_sizes/uninhabited.rs +++ /dev/null @@ -1,15 +0,0 @@ -// compile-flags: -Z print-type-sizes -// build-pass -// ignore-pass -// ^-- needed because `--pass check` does not emit the output needed. -// FIXME: consider using an attribute instead of side-effects. - -#![feature(never_type)] -#![feature(start)] - -#[start] -fn start(_: isize, _: *const *const u8) -> isize { - let _x: Option<!> = None; - let _y: Result<u32, !> = Ok(42); - let _z: Result<!, !> = loop {}; -} diff --git a/src/test/ui/print_type_sizes/uninhabited.stdout b/src/test/ui/print_type_sizes/uninhabited.stdout deleted file mode 100644 index 5eb5384bc..000000000 --- a/src/test/ui/print_type_sizes/uninhabited.stdout +++ /dev/null @@ -1,6 +0,0 @@ -print-type-size type: `std::result::Result<u32, !>`: 4 bytes, alignment: 4 bytes -print-type-size variant `Ok`: 4 bytes -print-type-size field `.0`: 4 bytes -print-type-size type: `std::option::Option<!>`: 0 bytes, alignment: 1 bytes -print-type-size variant `None`: 0 bytes -print-type-size type: `std::result::Result<!, !>`: 0 bytes, alignment: 1 bytes diff --git a/src/test/ui/print_type_sizes/variants.rs b/src/test/ui/print_type_sizes/variants.rs deleted file mode 100644 index 6c8553cc2..000000000 --- a/src/test/ui/print_type_sizes/variants.rs +++ /dev/null @@ -1,26 +0,0 @@ -// compile-flags: -Z print-type-sizes -// build-pass - -// This file illustrates two things: -// -// 1. Only types that appear in a monomorphized function appear in the -// print-type-sizes output, and -// -// 2. For an enum, the print-type-sizes output will also include the -// size of each variant. - -#![feature(start)] - -pub struct SevenBytes([u8; 7]); -pub struct FiftyBytes([u8; 50]); - -pub enum Enum { - Small(SevenBytes), - Large(FiftyBytes), -} - -#[start] -fn start(_: isize, _: *const *const u8) -> isize { - let _e: Enum; - 0 -} diff --git a/src/test/ui/print_type_sizes/variants.stdout b/src/test/ui/print_type_sizes/variants.stdout deleted file mode 100644 index 641188154..000000000 --- a/src/test/ui/print_type_sizes/variants.stdout +++ /dev/null @@ -1,10 +0,0 @@ -print-type-size type: `Enum`: 51 bytes, alignment: 1 bytes -print-type-size discriminant: 1 bytes -print-type-size variant `Large`: 50 bytes -print-type-size field `.0`: 50 bytes -print-type-size variant `Small`: 7 bytes -print-type-size field `.0`: 7 bytes -print-type-size type: `FiftyBytes`: 50 bytes, alignment: 1 bytes -print-type-size field `.0`: 50 bytes -print-type-size type: `SevenBytes`: 7 bytes, alignment: 1 bytes -print-type-size field `.0`: 7 bytes diff --git a/src/test/ui/print_type_sizes/zero-sized-fields.rs b/src/test/ui/print_type_sizes/zero-sized-fields.rs deleted file mode 100644 index e02a33109..000000000 --- a/src/test/ui/print_type_sizes/zero-sized-fields.rs +++ /dev/null @@ -1,47 +0,0 @@ -// compile-flags: -Z print-type-sizes -// build-pass -// ignore-pass - -// At one point, zero-sized fields such as those in this file were causing -// incorrect output from `-Z print-type-sizes`. - -#![feature(start)] - -struct S1 { - x: u32, - y: u32, - tag: (), -} - -struct Void(); -struct Empty {} - -struct S5<TagW, TagZ> { - tagw: TagW, - w: u32, - unit: (), - x: u32, - void: Void, - y: u32, - empty: Empty, - z: u32, - tagz: TagZ, -} - -#[start] -fn start(_: isize, _: *const *const u8) -> isize { - let _s1: S1 = S1 { x: 0, y: 0, tag: () }; - - let _s5: S5<(), Empty> = S5 { - tagw: (), - w: 1, - unit: (), - x: 2, - void: Void(), - y: 3, - empty: Empty {}, - z: 4, - tagz: Empty {}, - }; - 0 -} diff --git a/src/test/ui/print_type_sizes/zero-sized-fields.stdout b/src/test/ui/print_type_sizes/zero-sized-fields.stdout deleted file mode 100644 index 72f59c4bb..000000000 --- a/src/test/ui/print_type_sizes/zero-sized-fields.stdout +++ /dev/null @@ -1,16 +0,0 @@ -print-type-size type: `S5<(), Empty>`: 16 bytes, alignment: 4 bytes -print-type-size field `.tagw`: 0 bytes -print-type-size field `.unit`: 0 bytes -print-type-size field `.void`: 0 bytes -print-type-size field `.empty`: 0 bytes -print-type-size field `.tagz`: 0 bytes -print-type-size field `.w`: 4 bytes -print-type-size field `.x`: 4 bytes -print-type-size field `.y`: 4 bytes -print-type-size field `.z`: 4 bytes -print-type-size type: `S1`: 8 bytes, alignment: 4 bytes -print-type-size field `.tag`: 0 bytes -print-type-size field `.x`: 4 bytes -print-type-size field `.y`: 4 bytes -print-type-size type: `Empty`: 0 bytes, alignment: 1 bytes -print-type-size type: `Void`: 0 bytes, alignment: 1 bytes |