diff options
Diffstat (limited to 'tests/ui/simd/size-align.rs')
-rw-r--r-- | tests/ui/simd/size-align.rs | 53 |
1 files changed, 53 insertions, 0 deletions
diff --git a/tests/ui/simd/size-align.rs b/tests/ui/simd/size-align.rs new file mode 100644 index 000000000..0afa49472 --- /dev/null +++ b/tests/ui/simd/size-align.rs @@ -0,0 +1,53 @@ +// run-pass +#![allow(deprecated)] + + +#![feature(repr_simd)] +#![allow(non_camel_case_types)] + +use std::mem; + +/// `T` should satisfy `size_of T (mod min_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::min_align_of::<T>(), 0); + assert_eq!(mem::size_of::<T>() % mem::min_align_of::<T>(), 0); + assert_eq!(mem::size_of::<T>() % mem::min_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>>(); +} |