// check-pass //! The fields of a struct should be laid out in lexical order. #![crate_type = "lib"] #![feature(transmutability)] #![allow(dead_code)] mod assert { use std::mem::{Assume, BikeshedIntrinsicFrom}; pub struct Context; pub fn is_transmutable() where Dst: BikeshedIntrinsicFrom {} } #[repr(u8)] enum V0 { V = 0 } #[repr(u8)] enum V1 { V = 1 } #[repr(u8)] enum V2 { V = 2 } #[repr(C)] struct S01(V0, V1); #[repr(C)] struct S012(V0, V1, V2); fn should_order_tag_and_fields_correctly() { // An implementation that (incorrectly) arranges S01 as [0x01, 0x00] will, // in principle, reject this transmutation. assert::is_transmutable::(); // Again, but with one more field. assert::is_transmutable::(); }