//! An array must have a well-defined layout to participate in a transmutation. #![crate_type = "lib"] #![feature(transmutability)] #![allow(dead_code, incomplete_features, non_camel_case_types)] mod assert { use std::mem::{Assume, BikeshedIntrinsicFrom}; pub fn is_maybe_transmutable() where Dst: BikeshedIntrinsicFrom {} } fn should_reject_repr_rust() { fn unit() { type repr_rust = [String; 0]; assert::is_maybe_transmutable::(); //~ ERROR cannot be safely transmuted assert::is_maybe_transmutable::(); //~ ERROR cannot be safely transmuted } fn singleton() { type repr_rust = [String; 1]; assert::is_maybe_transmutable::(); //~ ERROR cannot be safely transmuted assert::is_maybe_transmutable::(); //~ ERROR cannot be safely transmuted } fn duplex() { type repr_rust = [String; 2]; assert::is_maybe_transmutable::(); //~ ERROR cannot be safely transmuted assert::is_maybe_transmutable::(); //~ ERROR cannot be safely transmuted } } fn should_accept_repr_C() { fn unit() { #[repr(C)] struct repr_c(u8, u16, u8); type array = [repr_c; 0]; assert::is_maybe_transmutable::(); assert::is_maybe_transmutable::(); } fn singleton() { #[repr(C)] struct repr_c(u8, u16, u8); type array = [repr_c; 1]; assert::is_maybe_transmutable::(); assert::is_maybe_transmutable::(); } fn duplex() { #[repr(C)] struct repr_c(u8, u16, u8); #[repr(C)] struct duplex(repr_c, repr_c); type array = [repr_c; 2]; assert::is_maybe_transmutable::(); assert::is_maybe_transmutable::(); } }