| //@ run-pass | |
| #![allow(deprecated)] | |
| #![feature(repr_simd)] | |
| #![allow(non_camel_case_types)] | |
| use std::mem; | |
| /// `T` should satisfy `size_of T (mod align_of T) === 0` to be stored at `Vec<T>` properly | |
| /// Please consult the issue #20460 | |
| fn check<T>() { | |
| assert_eq!(mem::size_of::<T>() % mem::align_of::<T>(), 0); | |
| assert_eq!(mem::size_of::<T>() % mem::align_of::<T>(), 0); | |
| assert_eq!(mem::size_of::<T>() % mem::align_of::<T>(), 0); | |
| } | |
| #[repr(simd)] | |
| struct U8<const N: usize>([u8; N]); | |
| #[repr(simd)] | |
| struct I16<const N: usize>([i16; N]); | |
| #[repr(simd)] | |
| struct F32<const N: usize>([f32; N]); | |
| #[repr(simd)] | |
| struct Usize<const N: usize>([usize; N]); | |
| #[repr(simd)] | |
| struct Isize<const N: usize>([isize; N]); | |
| fn main() { | |
| check::<U8<2>>(); | |
| check::<U8<4>>(); | |
| check::<U8<8>>(); | |
| check::<I16<2>>(); | |
| check::<I16<4>>(); | |
| check::<I16<8>>(); | |
| check::<F32<2>>(); | |
| check::<F32<4>>(); | |
| check::<F32<8>>(); | |
| check::<Usize<2>>(); | |
| check::<Usize<4>>(); | |
| check::<Usize<8>>(); | |
| check::<Isize<2>>(); | |
| check::<Isize<4>>(); | |
| check::<Isize<8>>(); | |
| } |