diff options
Diffstat (limited to 'src/test')
5 files changed, 86 insertions, 0 deletions
diff --git a/src/test/ui/simd/libm_no_std_cant_float.rs b/src/test/ui/simd/libm_no_std_cant_float.rs new file mode 100644 index 00000000000..abe460a326b --- /dev/null +++ b/src/test/ui/simd/libm_no_std_cant_float.rs @@ -0,0 +1,21 @@ +#![crate_type = "rlib"] +#![no_std] +#![feature(portable_simd)] +use core::simd::f32x4; + +// For SIMD float ops, the LLIR version which is used to implement the portable +// forms of them may become calls to math.h AKA libm. So, we can't guarantee +// we can compile them for #![no_std] crates. +// Someday we may solve this. +// Until then, this test at least guarantees these functions require std. +fn guarantee_no_std_nolibm_calls() -> f32x4 { + let x = f32x4::from_array([0.1, 0.5, 0.6, -1.5]); + let x2 = x + x; + let _xc = x.ceil(); //~ ERROR E0599 + let _xf = x.floor(); //~ ERROR E0599 + let _xr = x.round(); //~ ERROR E0599 + let _xt = x.trunc(); //~ ERROR E0599 + let _xfma = x.mul_add(x, x); //~ ERROR E0599 + let _xsqrt = x.sqrt(); //~ ERROR E0599 + x2.abs() * x2 +} diff --git a/src/test/ui/simd/libm_no_std_cant_float.stderr b/src/test/ui/simd/libm_no_std_cant_float.stderr new file mode 100644 index 00000000000..dc8638f6ab7 --- /dev/null +++ b/src/test/ui/simd/libm_no_std_cant_float.stderr @@ -0,0 +1,39 @@ +error[E0599]: no method named `ceil` found for struct `Simd` in the current scope + --> $DIR/libm_no_std_cant_float.rs:14:17 + | +LL | let _xc = x.ceil(); + | ^^^^ method not found in `Simd<f32, 4_usize>` + +error[E0599]: no method named `floor` found for struct `Simd` in the current scope + --> $DIR/libm_no_std_cant_float.rs:15:17 + | +LL | let _xf = x.floor(); + | ^^^^^ method not found in `Simd<f32, 4_usize>` + +error[E0599]: no method named `round` found for struct `Simd` in the current scope + --> $DIR/libm_no_std_cant_float.rs:16:17 + | +LL | let _xr = x.round(); + | ^^^^^ method not found in `Simd<f32, 4_usize>` + +error[E0599]: no method named `trunc` found for struct `Simd` in the current scope + --> $DIR/libm_no_std_cant_float.rs:17:17 + | +LL | let _xt = x.trunc(); + | ^^^^^ method not found in `Simd<f32, 4_usize>` + +error[E0599]: no method named `mul_add` found for struct `Simd` in the current scope + --> $DIR/libm_no_std_cant_float.rs:18:19 + | +LL | let _xfma = x.mul_add(x, x); + | ^^^^^^^ method not found in `Simd<f32, 4_usize>` + +error[E0599]: no method named `sqrt` found for struct `Simd` in the current scope + --> $DIR/libm_no_std_cant_float.rs:19:20 + | +LL | let _xsqrt = x.sqrt(); + | ^^^^ method not found in `Simd<f32, 4_usize>` + +error: aborting due to 6 previous errors + +For more information about this error, try `rustc --explain E0599`. diff --git a/src/test/ui/simd/portable-intrinsics-arent-exposed.rs b/src/test/ui/simd/portable-intrinsics-arent-exposed.rs new file mode 100644 index 00000000000..4d759032355 --- /dev/null +++ b/src/test/ui/simd/portable-intrinsics-arent-exposed.rs @@ -0,0 +1,8 @@ +// May not matter, since people can use them with a nightly feature. +// However this tests to guarantee they don't leak out via portable_simd, +// and thus don't accidentally get stabilized. +use std::simd::intrinsics; //~ERROR E0603 + +fn main() { + () +} diff --git a/src/test/ui/simd/portable-intrinsics-arent-exposed.stderr b/src/test/ui/simd/portable-intrinsics-arent-exposed.stderr new file mode 100644 index 00000000000..9ac73eca193 --- /dev/null +++ b/src/test/ui/simd/portable-intrinsics-arent-exposed.stderr @@ -0,0 +1,15 @@ +error[E0603]: module `intrinsics` is private + --> $DIR/portable-intrinsics-arent-exposed.rs:4:16 + | +LL | use std::simd::intrinsics; + | ^^^^^^^^^^ private module + | +note: the module `intrinsics` is defined here + --> $SRC_DIR/core/src/lib.rs:LL:COL + | +LL | pub use crate::core_simd::simd::*; + | ^^^^^^^^^^^^^^^^^^^^^^^^^ + +error: aborting due to previous error + +For more information about this error, try `rustc --explain E0603`. diff --git a/src/test/ui/suggestions/issue-71394-no-from-impl.stderr b/src/test/ui/suggestions/issue-71394-no-from-impl.stderr index 355f2038df8..79724377713 100644 --- a/src/test/ui/suggestions/issue-71394-no-from-impl.stderr +++ b/src/test/ui/suggestions/issue-71394-no-from-impl.stderr @@ -4,6 +4,9 @@ error[E0277]: the trait bound `&[i8]: From<&[u8]>` is not satisfied LL | let _: &[i8] = data.into(); | ^^^^ the trait `From<&[u8]>` is not implemented for `&[i8]` | + = help: the following implementations were found: + <[T; LANES] as From<Simd<T, LANES>>> + <[bool; LANES] as From<Mask<T, LANES>>> = note: required because of the requirements on the impl of `Into<&[i8]>` for `&[u8]` error: aborting due to previous error |
