diff options
| author | Ralf Jung <post@ralfj.de> | 2024-06-09 09:37:15 +0200 |
|---|---|---|
| committer | Ralf Jung <post@ralfj.de> | 2024-06-09 11:54:23 +0200 |
| commit | d5fb8257e7533edd1f2699f9b92f80848477c800 (patch) | |
| tree | 06eaccf075f3986e0d4e1755f0765e8b5fec000e /src/tools/miri | |
| parent | 565cadb514d35e7b851540edbc172af0f606014f (diff) | |
| download | rust-d5fb8257e7533edd1f2699f9b92f80848477c800.tar.gz rust-d5fb8257e7533edd1f2699f9b92f80848477c800.zip | |
interpret: do not ICE on padded non-pow2 SIMD vectors
Diffstat (limited to 'src/tools/miri')
| -rw-r--r-- | src/tools/miri/tests/pass/intrinsics/portable-simd.rs | 23 |
1 files changed, 22 insertions, 1 deletions
diff --git a/src/tools/miri/tests/pass/intrinsics/portable-simd.rs b/src/tools/miri/tests/pass/intrinsics/portable-simd.rs index 248a57d6850..5250a1138b7 100644 --- a/src/tools/miri/tests/pass/intrinsics/portable-simd.rs +++ b/src/tools/miri/tests/pass/intrinsics/portable-simd.rs @@ -1,5 +1,5 @@ //@compile-flags: -Zmiri-strict-provenance -#![feature(portable_simd, adt_const_params, core_intrinsics)] +#![feature(portable_simd, adt_const_params, core_intrinsics, repr_simd)] #![allow(incomplete_features, internal_features)] use std::intrinsics::simd as intrinsics; use std::ptr; @@ -581,11 +581,32 @@ fn simd_masked_loadstore() { assert_eq!(buf, [2, 3, 4]); } +fn simd_ops_non_pow2() { + // Just a little smoke test for operations on non-power-of-two vectors. + #[repr(simd, packed)] + #[derive(Copy, Clone)] + pub struct SimdPacked<T, const N: usize>([T; N]); + #[repr(simd)] + #[derive(Copy, Clone)] + pub struct SimdPadded<T, const N: usize>([T; N]); + + let x = SimdPacked([1u32; 3]); + let y = SimdPacked([2u32; 3]); + let z = unsafe { intrinsics::simd_add(x, y) }; + assert_eq!({ z.0 }, [3u32; 3]); + + let x = SimdPadded([1u32; 3]); + let y = SimdPadded([2u32; 3]); + let z = unsafe { intrinsics::simd_add(x, y) }; + assert_eq!(z.0, [3u32; 3]); +} + fn main() { simd_mask(); simd_ops_f32(); simd_ops_f64(); simd_ops_i32(); + simd_ops_non_pow2(); simd_cast(); simd_swizzle(); simd_gather_scatter(); |
