| //@ check-pass |
| //! This UI test was introduced as check-fail by a buggy bug-fix for an ICE. In |
| //! fact, this transmutation should be valid. |
| |
| #![crate_type = "lib"] |
| #![feature(transmutability)] |
| #![allow(dead_code)] |
| |
| use std::mem::size_of; |
| |
| mod assert { |
| use std::mem::{Assume, TransmuteFrom}; |
| |
| pub fn is_maybe_transmutable<Src, Dst>() |
| where |
| Dst: TransmuteFrom< |
| Src, |
| { Assume { alignment: true, lifetimes: true, safety: true, validity: true } }, |
| >, |
| { |
| } |
| } |
| |
| fn test() { |
| #[repr(C, align(2))] |
| struct A(u8, u8); |
| |
| #[repr(C)] |
| struct B(u8, u8); |
| |
| assert_eq!(size_of::<A>(), size_of::<B>()); |
| |
| assert::is_maybe_transmutable::<B, A>(); |
| } |