From 698f8c2f01ea549d77d7dc3338a12e04c11057b9 Mon Sep 17 00:00:00 2001 From: Daniel Baumann Date: Wed, 17 Apr 2024 14:02:58 +0200 Subject: Adding upstream version 1.64.0+dfsg1. Signed-off-by: Daniel Baumann --- src/test/ui/repr/repr-transparent.rs | 90 ++++++++++++++++++++++++++++++++++++ 1 file changed, 90 insertions(+) create mode 100644 src/test/ui/repr/repr-transparent.rs (limited to 'src/test/ui/repr/repr-transparent.rs') diff --git a/src/test/ui/repr/repr-transparent.rs b/src/test/ui/repr/repr-transparent.rs new file mode 100644 index 000000000..8c9d1639c --- /dev/null +++ b/src/test/ui/repr/repr-transparent.rs @@ -0,0 +1,90 @@ +// This file tests repr(transparent)-related errors reported during typeck. Other errors +// that are reported earlier and therefore preempt these are tested in: +// - repr-transparent-other-reprs.rs +// - repr-transparent-other-items.rs + +#![feature(transparent_unions)] + +use std::marker::PhantomData; + +#[repr(transparent)] +struct NoFields; + +#[repr(transparent)] +struct ContainsOnlyZst(()); + +#[repr(transparent)] +struct ContainsOnlyZstArray([bool; 0]); + +#[repr(transparent)] +struct ContainsMultipleZst(PhantomData<*const i32>, NoFields); + +#[repr(transparent)] +struct ContainsZstAndNonZst((), [i32; 2]); + +#[repr(transparent)] +struct MultipleNonZst(u8, u8); //~ ERROR needs at most one non-zero-sized field + +trait Mirror { type It: ?Sized; } +impl Mirror for T { type It = Self; } + +#[repr(transparent)] +pub struct StructWithProjection(f32, ::It); +//~^ ERROR needs at most one non-zero-sized field + +#[repr(transparent)] +struct NontrivialAlignZst(u32, [u16; 0]); //~ ERROR alignment larger than 1 + +#[repr(align(32))] +struct ZstAlign32(PhantomData); + +#[repr(transparent)] +struct GenericAlign(ZstAlign32, u32); //~ ERROR alignment larger than 1 + +#[repr(transparent)] //~ ERROR unsupported representation for zero-variant enum +enum Void {} //~ ERROR transparent enum needs exactly one variant, but has 0 + +#[repr(transparent)] +enum FieldlessEnum { + Foo, +} + +#[repr(transparent)] +enum UnitFieldEnum { + Foo(()), +} + +#[repr(transparent)] +enum TooManyFieldsEnum { + Foo(u32, String), +} +//~^^^ ERROR transparent enum needs at most one non-zero-sized field, but has 2 + +#[repr(transparent)] +enum MultipleVariants { //~ ERROR transparent enum needs exactly one variant, but has 2 + Foo(String), + Bar, +} + +#[repr(transparent)] +enum NontrivialAlignZstEnum { + Foo(u32, [u16; 0]), //~ ERROR alignment larger than 1 +} + +#[repr(transparent)] +enum GenericAlignEnum { + Foo { bar: ZstAlign32, baz: u32 } //~ ERROR alignment larger than 1 +} + +#[repr(transparent)] +union UnitUnion { + u: (), +} + +#[repr(transparent)] +union TooManyFields { //~ ERROR transparent union needs at most one non-zero-sized field, but has 2 + u: u32, + s: i32 +} + +fn main() {} -- cgit v1.2.3