diff options
| author | Caleb Zulawski <caleb.zulawski@gmail.com> | 2021-01-23 17:55:34 -0500 |
|---|---|---|
| committer | Caleb Zulawski <caleb.zulawski@gmail.com> | 2021-01-23 17:55:34 -0500 |
| commit | f39f1a4ad93b6bca237631ff5c3325e7d0ddbd67 (patch) | |
| tree | fde99ad4c281bafa8d6ea79b6436902fb6c9ec66 /src/test/ui/simd | |
| parent | 4d72ed61ee11acf084de1a375c839ce40bbdf548 (diff) | |
Move SIMD tests
Diffstat (limited to 'src/test/ui/simd')
| -rw-r--r-- | src/test/ui/simd/issue-17170.rs | 11 | ||||
| -rw-r--r-- | src/test/ui/simd/issue-17170.stderr | 11 | ||||
| -rw-r--r-- | src/test/ui/simd/issue-39720.rs | 23 | ||||
| -rw-r--r-- | src/test/ui/simd/issue-39720.stderr | 15 | ||||
| -rw-r--r-- | src/test/ui/simd/simd-type-generic-monomorphisation-empty.rs | 12 | ||||
| -rw-r--r-- | src/test/ui/simd/simd-type-generic-monomorphisation-empty.stderr | 4 | ||||
| -rw-r--r-- | src/test/ui/simd/simd-type-generic-monomorphisation-oversized.rs | 12 | ||||
| -rw-r--r-- | src/test/ui/simd/simd-type-generic-monomorphisation-oversized.stderr | 4 | ||||
| -rw-r--r-- | src/test/ui/simd/simd-type-generic-monomorphisation-power-of-two.rs | 12 | ||||
| -rw-r--r-- | src/test/ui/simd/simd-type-generic-monomorphisation-power-of-two.stderr | 4 | ||||
| -rw-r--r-- | src/test/ui/simd/simd-type-generic-monomorphisation.rs | 15 | ||||
| -rw-r--r-- | src/test/ui/simd/simd-type-generic-monomorphisation.stderr | 4 | ||||
| -rw-r--r-- | src/test/ui/simd/simd-type.rs | 34 | ||||
| -rw-r--r-- | src/test/ui/simd/simd-type.stderr | 46 |
14 files changed, 202 insertions, 5 deletions
diff --git a/src/test/ui/simd/issue-17170.rs b/src/test/ui/simd/issue-17170.rs new file mode 100644 index 00000000000..49cfbab9a3e --- /dev/null +++ b/src/test/ui/simd/issue-17170.rs @@ -0,0 +1,11 @@ +#![feature(repr_simd)] + +#[repr(simd)] +struct T(f64, f64, f64); +//~^ ERROR SIMD vector length must be a power of two + +static X: T = T(0.0, 0.0, 0.0); + +fn main() { + let _ = X; +} diff --git a/src/test/ui/simd/issue-17170.stderr b/src/test/ui/simd/issue-17170.stderr new file mode 100644 index 00000000000..b35c3c4dc98 --- /dev/null +++ b/src/test/ui/simd/issue-17170.stderr @@ -0,0 +1,11 @@ +error[E0075]: SIMD vector length must be a power of two + --> $DIR/issue-17170.rs:4:1 + | +LL | struct T(f64, f64, f64); + | ^^^^^^^^^^^^^^^^^^^^^^^^ + +error: monomorphising SIMD type `T` of non-power-of-two length + +error: aborting due to 2 previous errors + +For more information about this error, try `rustc --explain E0075`. diff --git a/src/test/ui/simd/issue-39720.rs b/src/test/ui/simd/issue-39720.rs new file mode 100644 index 00000000000..7d596926512 --- /dev/null +++ b/src/test/ui/simd/issue-39720.rs @@ -0,0 +1,23 @@ +// ignore-emscripten FIXME(#45351) + +#![feature(repr_simd, platform_intrinsics)] + +#[repr(simd)] +#[derive(Copy, Clone, Debug)] +pub struct Char3(pub i8, pub i8, pub i8); +//~^ ERROR SIMD vector length must be a power of two + +#[repr(simd)] +#[derive(Copy, Clone, Debug)] +pub struct Short3(pub i16, pub i16, pub i16); +//~^ ERROR SIMD vector length must be a power of two + +extern "platform-intrinsic" { + fn simd_cast<T, U>(x: T) -> U; +} + +fn main() { + let cast: Short3 = unsafe { simd_cast(Char3(10, -3, -9)) }; + + println!("{:?}", cast); +} diff --git a/src/test/ui/simd/issue-39720.stderr b/src/test/ui/simd/issue-39720.stderr new file mode 100644 index 00000000000..355ceff0050 --- /dev/null +++ b/src/test/ui/simd/issue-39720.stderr @@ -0,0 +1,15 @@ +error[E0075]: SIMD vector length must be a power of two + --> $DIR/issue-39720.rs:7:1 + | +LL | pub struct Char3(pub i8, pub i8, pub i8); + | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +error[E0075]: SIMD vector length must be a power of two + --> $DIR/issue-39720.rs:12:1 + | +LL | pub struct Short3(pub i16, pub i16, pub i16); + | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +error: aborting due to 2 previous errors + +For more information about this error, try `rustc --explain E0075`. diff --git a/src/test/ui/simd/simd-type-generic-monomorphisation-empty.rs b/src/test/ui/simd/simd-type-generic-monomorphisation-empty.rs new file mode 100644 index 00000000000..0121404c749 --- /dev/null +++ b/src/test/ui/simd/simd-type-generic-monomorphisation-empty.rs @@ -0,0 +1,12 @@ +// build-fail + +#![feature(repr_simd, platform_intrinsics)] + +// error-pattern:monomorphising SIMD type `Simd<0_usize>` of zero length + +#[repr(simd)] +struct Simd<const N: usize>([f32; N]); + +fn main() { + let _ = Simd::<0>([]); +} diff --git a/src/test/ui/simd/simd-type-generic-monomorphisation-empty.stderr b/src/test/ui/simd/simd-type-generic-monomorphisation-empty.stderr new file mode 100644 index 00000000000..00fde199b12 --- /dev/null +++ b/src/test/ui/simd/simd-type-generic-monomorphisation-empty.stderr @@ -0,0 +1,4 @@ +error: monomorphising SIMD type `Simd<0_usize>` of zero length + +error: aborting due to previous error + diff --git a/src/test/ui/simd/simd-type-generic-monomorphisation-oversized.rs b/src/test/ui/simd/simd-type-generic-monomorphisation-oversized.rs new file mode 100644 index 00000000000..bd0d457b35e --- /dev/null +++ b/src/test/ui/simd/simd-type-generic-monomorphisation-oversized.rs @@ -0,0 +1,12 @@ +// build-fail + +#![feature(repr_simd, platform_intrinsics)] + +// error-pattern:monomorphising SIMD type `Simd<65536_usize>` of length greater than 32768 + +#[repr(simd)] +struct Simd<const N: usize>([f32; N]); + +fn main() { + let _ = Simd::<65536>([0.; 65536]); +} diff --git a/src/test/ui/simd/simd-type-generic-monomorphisation-oversized.stderr b/src/test/ui/simd/simd-type-generic-monomorphisation-oversized.stderr new file mode 100644 index 00000000000..f4418350115 --- /dev/null +++ b/src/test/ui/simd/simd-type-generic-monomorphisation-oversized.stderr @@ -0,0 +1,4 @@ +error: monomorphising SIMD type `Simd<65536_usize>` of length greater than 32768 + +error: aborting due to previous error + diff --git a/src/test/ui/simd/simd-type-generic-monomorphisation-power-of-two.rs b/src/test/ui/simd/simd-type-generic-monomorphisation-power-of-two.rs new file mode 100644 index 00000000000..3a0b9e02663 --- /dev/null +++ b/src/test/ui/simd/simd-type-generic-monomorphisation-power-of-two.rs @@ -0,0 +1,12 @@ +// build-fail + +#![feature(repr_simd, platform_intrinsics)] + +// error-pattern:monomorphising SIMD type `Simd<3_usize>` of non-power-of-two length + +#[repr(simd)] +struct Simd<const N: usize>([f32; N]); + +fn main() { + let _ = Simd::<3>([0.; 3]); +} diff --git a/src/test/ui/simd/simd-type-generic-monomorphisation-power-of-two.stderr b/src/test/ui/simd/simd-type-generic-monomorphisation-power-of-two.stderr new file mode 100644 index 00000000000..82cc0d8714a --- /dev/null +++ b/src/test/ui/simd/simd-type-generic-monomorphisation-power-of-two.stderr @@ -0,0 +1,4 @@ +error: monomorphising SIMD type `Simd<3_usize>` of non-power-of-two length + +error: aborting due to previous error + diff --git a/src/test/ui/simd/simd-type-generic-monomorphisation.rs b/src/test/ui/simd/simd-type-generic-monomorphisation.rs new file mode 100644 index 00000000000..0275f0ce4c1 --- /dev/null +++ b/src/test/ui/simd/simd-type-generic-monomorphisation.rs @@ -0,0 +1,15 @@ +// build-fail + +#![feature(repr_simd, platform_intrinsics)] + +// ignore-tidy-linelength + +// error-pattern:monomorphising SIMD type `Simd2<X>` with a non-primitive-scalar (integer/float/pointer) element type `X` + +struct X(Vec<i32>); +#[repr(simd)] +struct Simd2<T>(T, T); + +fn main() { + let _ = Simd2(X(vec![]), X(vec![])); +} diff --git a/src/test/ui/simd/simd-type-generic-monomorphisation.stderr b/src/test/ui/simd/simd-type-generic-monomorphisation.stderr new file mode 100644 index 00000000000..7f23893ac85 --- /dev/null +++ b/src/test/ui/simd/simd-type-generic-monomorphisation.stderr @@ -0,0 +1,4 @@ +error: monomorphising SIMD type `Simd2<X>` with a non-primitive-scalar (integer/float/pointer) element type `X` + +error: aborting due to previous error + diff --git a/src/test/ui/simd/simd-type.rs b/src/test/ui/simd/simd-type.rs index e7b9bfe32f8..cc7443d0485 100644 --- a/src/test/ui/simd/simd-type.rs +++ b/src/test/ui/simd/simd-type.rs @@ -1,9 +1,33 @@ -// run-pass -#![allow(dead_code)] +#![feature(repr_simd)] +#![allow(non_camel_case_types)] -// pretty-expanded FIXME #23616 +// ignore-tidy-linelength -#![feature(repr_simd)] +#[repr(simd)] +struct empty; //~ ERROR SIMD vector cannot be empty + +#[repr(simd)] +struct empty2([f32; 0]); //~ ERROR SIMD vector cannot be empty + +#[repr(simd)] +struct pow2([f32; 7]); //~ ERROR SIMD vector length must be a power of two + +#[repr(simd)] +struct i64f64(i64, f64); //~ ERROR SIMD vector should be homogeneous + +struct Foo; + +#[repr(simd)] +struct FooV(Foo, Foo); //~ ERROR SIMD vector element type should be a primitive scalar (integer/float/pointer) type + +#[repr(simd)] +struct FooV2([Foo; 2]); //~ ERROR SIMD vector element type should be a primitive scalar (integer/float/pointer) type + +#[repr(simd)] +struct TooBig([f32; 65536]); //~ ERROR SIMD vector cannot have more than 32768 elements + +#[repr(simd)] +struct JustRight([u128; 32768]); #[repr(simd)] struct RGBA { @@ -13,4 +37,4 @@ struct RGBA { a: f32 } -pub fn main() {} +fn main() {} diff --git a/src/test/ui/simd/simd-type.stderr b/src/test/ui/simd/simd-type.stderr new file mode 100644 index 00000000000..8b15ef05e03 --- /dev/null +++ b/src/test/ui/simd/simd-type.stderr @@ -0,0 +1,46 @@ +error[E0075]: SIMD vector cannot be empty + --> $DIR/simd-type.rs:7:1 + | +LL | struct empty; + | ^^^^^^^^^^^^^ + +error[E0075]: SIMD vector cannot be empty + --> $DIR/simd-type.rs:10:1 + | +LL | struct empty2([f32; 0]); + | ^^^^^^^^^^^^^^^^^^^^^^^^ + +error[E0075]: SIMD vector length must be a power of two + --> $DIR/simd-type.rs:13:1 + | +LL | struct pow2([f32; 7]); + | ^^^^^^^^^^^^^^^^^^^^^^ + +error[E0076]: SIMD vector should be homogeneous + --> $DIR/simd-type.rs:16:1 + | +LL | struct i64f64(i64, f64); + | ^^^^^^^^^^^^^^^^^^^^^^^^ SIMD elements must have the same type + +error[E0077]: SIMD vector element type should be a primitive scalar (integer/float/pointer) type + --> $DIR/simd-type.rs:21:1 + | +LL | struct FooV(Foo, Foo); + | ^^^^^^^^^^^^^^^^^^^^^^ + +error[E0077]: SIMD vector element type should be a primitive scalar (integer/float/pointer) type + --> $DIR/simd-type.rs:24:1 + | +LL | struct FooV2([Foo; 2]); + | ^^^^^^^^^^^^^^^^^^^^^^^ + +error[E0075]: SIMD vector cannot have more than 32768 elements + --> $DIR/simd-type.rs:27:1 + | +LL | struct TooBig([f32; 65536]); + | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +error: aborting due to 7 previous errors + +Some errors have detailed explanations: E0075, E0076, E0077. +For more information about an error, try `rustc --explain E0075`. |
