//! An enum must have a well-defined layout to participate in a transmutation. #![crate_type = "lib"] #![feature(repr128)] #![feature(transmutability)] #![allow(dead_code, incomplete_features, non_camel_case_types)] mod assert { use std::mem::{Assume, BikeshedIntrinsicFrom}; pub struct Context; pub fn is_maybe_transmutable() where Dst: BikeshedIntrinsicFrom {} } fn should_reject_repr_rust() { fn void() { enum repr_rust {} assert::is_maybe_transmutable::(); //~ ERROR cannot be safely transmuted assert::is_maybe_transmutable::(); //~ ERROR cannot be safely transmuted } fn singleton() { enum repr_rust { V } assert::is_maybe_transmutable::(); //~ ERROR cannot be safely transmuted assert::is_maybe_transmutable::(); //~ ERROR cannot be safely transmuted } fn duplex() { enum repr_rust { A, B } assert::is_maybe_transmutable::(); //~ ERROR cannot be safely transmuted assert::is_maybe_transmutable::(); //~ ERROR cannot be safely transmuted } } fn should_accept_primitive_reprs() { fn should_accept_repr_i8() { #[repr(i8)] enum repr_i8 { V } assert::is_maybe_transmutable::(); assert::is_maybe_transmutable::(); } fn should_accept_repr_u8() { #[repr(u8)] enum repr_u8 { V } assert::is_maybe_transmutable::(); assert::is_maybe_transmutable::(); } fn should_accept_repr_i16() { #[repr(i16)] enum repr_i16 { V } assert::is_maybe_transmutable::(); assert::is_maybe_transmutable::(); } fn should_accept_repr_u16() { #[repr(u16)] enum repr_u16 { V } assert::is_maybe_transmutable::(); assert::is_maybe_transmutable::(); } fn should_accept_repr_i32() { #[repr(i32)] enum repr_i32 { V } assert::is_maybe_transmutable::(); assert::is_maybe_transmutable::(); } fn should_accept_repr_u32() { #[repr(u32)] enum repr_u32 { V } assert::is_maybe_transmutable::(); assert::is_maybe_transmutable::(); } fn should_accept_repr_i64() { #[repr(i64)] enum repr_i64 { V } assert::is_maybe_transmutable::(); assert::is_maybe_transmutable::(); } fn should_accept_repr_u64() { #[repr(u64)] enum repr_u64 { V } assert::is_maybe_transmutable::(); assert::is_maybe_transmutable::(); } fn should_accept_repr_i128() { #[repr(i128)] enum repr_i128 { V } assert::is_maybe_transmutable::(); assert::is_maybe_transmutable::(); } fn should_accept_repr_u128() { #[repr(u128)] enum repr_u128 { V } assert::is_maybe_transmutable::(); assert::is_maybe_transmutable::(); } fn should_accept_repr_isize() { #[repr(isize)] enum repr_isize { V } assert::is_maybe_transmutable::(); assert::is_maybe_transmutable::(); } fn should_accept_repr_usize() { #[repr(usize)] enum repr_usize { V } assert::is_maybe_transmutable::(); assert::is_maybe_transmutable::(); } } fn should_accept_repr_C() { #[repr(C)] enum repr_c { V } assert::is_maybe_transmutable::(); assert::is_maybe_transmutable::(); }