//@ check-pass //! With trivial bounds, it is possible to have ADTs with unsized fields //! in arbitrary places. Test that we do not ICE for such types. #![feature(trivial_bounds)] #![expect(trivial_bounds)] struct Struct where [u8]: Sized, [i16]: Sized, { a: [u8], b: [i16], c: f32, } union Union where [u8]: Copy, [i16]: Copy, { a: [u8], b: [i16], c: f32, } enum Enum where [u8]: Sized, [i16]: Sized, { V1([u8], [i16]), V2([i16], f32), } // This forces layout computation via the `variant_size_differences` lint. // FIXME: This could be made more robust, possibly with a variant of `rustc_layout` // that doesn't error. enum Check where [u8]: Copy, [i16]: Copy, { Struct(Struct), Union(Union), Enum(Enum), } fn main() {}