| //@ build-fail |
| |
| #![feature(repr_simd, intrinsics, rustc_attrs, adt_const_params, unsized_const_params)] |
| #![allow(incomplete_features)] |
| |
| #[repr(simd)] |
| #[derive(Copy, Clone)] |
| #[allow(non_camel_case_types)] |
| struct i32x2([i32; 2]); |
| #[repr(simd)] |
| #[derive(Copy, Clone)] |
| #[allow(non_camel_case_types)] |
| struct i32x4([i32; 4]); |
| #[repr(simd)] |
| #[derive(Copy, Clone)] |
| #[allow(non_camel_case_types)] |
| struct i32x8([i32; 8]); |
| |
| #[repr(simd)] |
| #[derive(Copy, Clone)] |
| #[allow(non_camel_case_types)] |
| struct f32x2([f32; 2]); |
| #[repr(simd)] |
| #[derive(Copy, Clone)] |
| #[allow(non_camel_case_types)] |
| struct f32x4([f32; 4]); |
| #[repr(simd)] |
| #[derive(Copy, Clone)] |
| #[allow(non_camel_case_types)] |
| struct f32x8([f32; 8]); |
| |
| extern "rust-intrinsic" { |
| fn simd_insert<T, E>(x: T, idx: u32, y: E) -> T; |
| fn simd_extract<T, E>(x: T, idx: u32) -> E; |
| |
| fn simd_shuffle<T, I, U>(x: T, y: T, idx: I) -> U; |
| fn simd_shuffle_generic<T, U, const IDX: &'static [u32]>(x: T, y: T) -> U; |
| } |
| |
| #[repr(simd)] |
| struct SimdShuffleIdx<const LEN: usize>([u32; LEN]); |
| |
| fn main() { |
| let x = i32x4([0, 0, 0, 0]); |
| |
| unsafe { |
| simd_insert(0, 0, 0); |
| //~^ ERROR expected SIMD input type, found non-SIMD `i32` |
| simd_insert(x, 0, 1.0); |
| //~^ ERROR expected inserted type `i32` (element of input `i32x4`), found `f64` |
| simd_extract::<_, f32>(x, 0); |
| //~^ ERROR expected return type `i32` (element of input `i32x4`), found `f32` |
| |
| const IDX2: SimdShuffleIdx<2> = SimdShuffleIdx([0; 2]); |
| simd_shuffle::<i32, _, i32>(0, 0, IDX2); |
| //~^ ERROR expected SIMD input type, found non-SIMD `i32` |
| const IDX4: SimdShuffleIdx<4> = SimdShuffleIdx([0; 4]); |
| simd_shuffle::<i32, _, i32>(0, 0, IDX4); |
| //~^ ERROR expected SIMD input type, found non-SIMD `i32` |
| const IDX8: SimdShuffleIdx<8> = SimdShuffleIdx([0; 8]); |
| simd_shuffle::<i32, _, i32>(0, 0, IDX8); |
| //~^ ERROR expected SIMD input type, found non-SIMD `i32` |
| |
| simd_shuffle::<_, _, f32x2>(x, x, IDX2); |
| //~^ ERROR element type `i32` (element of input `i32x4`), found `f32x2` with element type `f32` |
| simd_shuffle::<_, _, f32x4>(x, x, IDX4); |
| //~^ ERROR element type `i32` (element of input `i32x4`), found `f32x4` with element type `f32` |
| simd_shuffle::<_, _, f32x8>(x, x, IDX8); |
| //~^ ERROR element type `i32` (element of input `i32x4`), found `f32x8` with element type `f32` |
| |
| simd_shuffle::<_, _, i32x8>(x, x, IDX2); |
| //~^ ERROR expected return type of length 2, found `i32x8` with length 8 |
| simd_shuffle::<_, _, i32x8>(x, x, IDX4); |
| //~^ ERROR expected return type of length 4, found `i32x8` with length 8 |
| simd_shuffle::<_, _, i32x2>(x, x, IDX8); |
| //~^ ERROR expected return type of length 8, found `i32x2` with length 2 |
| |
| const I2: &[u32] = &[0; 2]; |
| simd_shuffle_generic::<i32, i32, I2>(0, 0); |
| //~^ ERROR expected SIMD input type, found non-SIMD `i32` |
| const I4: &[u32] = &[0; 4]; |
| simd_shuffle_generic::<i32, i32, I4>(0, 0); |
| //~^ ERROR expected SIMD input type, found non-SIMD `i32` |
| const I8: &[u32] = &[0; 8]; |
| simd_shuffle_generic::<i32, i32, I8>(0, 0); |
| //~^ ERROR expected SIMD input type, found non-SIMD `i32` |
| |
| simd_shuffle_generic::<_, f32x2, I2>(x, x); |
| //~^ ERROR element type `i32` (element of input `i32x4`), found `f32x2` with element type `f32` |
| simd_shuffle_generic::<_, f32x4, I4>(x, x); |
| //~^ ERROR element type `i32` (element of input `i32x4`), found `f32x4` with element type `f32` |
| simd_shuffle_generic::<_, f32x8, I8>(x, x); |
| //~^ ERROR element type `i32` (element of input `i32x4`), found `f32x8` with element type `f32` |
| |
| simd_shuffle_generic::<_, i32x8, I2>(x, x); |
| //~^ ERROR expected return type of length 2, found `i32x8` with length 8 |
| simd_shuffle_generic::<_, i32x8, I4>(x, x); |
| //~^ ERROR expected return type of length 4, found `i32x8` with length 8 |
| simd_shuffle_generic::<_, i32x2, I8>(x, x); |
| //~^ ERROR expected return type of length 8, found `i32x2` with length 2 |
| } |
| } |