Auto merge of #1992 - RalfJung:sdiv, r=RalfJung
adjust for div/rem overflow being UB This is the Miri side of https://github.com/rust-lang/rust/pull/94512. Just some error messages change.
This commit is contained in:
commit
2f9ecdeba4
@ -1 +1 @@
|
|||||||
f0c4da49983aa699f715caf681e3154b445fb60b
|
45660949132222ba7ec0905649b2affd68e0e13c
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
#![feature(core_intrinsics)]
|
#![feature(core_intrinsics)]
|
||||||
fn main() {
|
fn main() {
|
||||||
// divison of MIN by -1
|
// divison of MIN by -1
|
||||||
unsafe { std::intrinsics::exact_div(i64::MIN, -1); } //~ ERROR result of dividing MIN by -1 cannot be represented
|
unsafe { std::intrinsics::exact_div(i64::MIN, -1); } //~ ERROR overflow in signed remainder (dividing MIN by -1)
|
||||||
}
|
}
|
||||||
|
15
tests/compile-fail/intrinsics/simd-div-overflow.rs
Normal file
15
tests/compile-fail/intrinsics/simd-div-overflow.rs
Normal file
@ -0,0 +1,15 @@
|
|||||||
|
#![feature(platform_intrinsics, repr_simd)]
|
||||||
|
|
||||||
|
extern "platform-intrinsic" {
|
||||||
|
pub(crate) fn simd_div<T>(x: T, y: T) -> T;
|
||||||
|
}
|
||||||
|
|
||||||
|
#[repr(simd)]
|
||||||
|
#[allow(non_camel_case_types)]
|
||||||
|
struct i32x2(i32, i32);
|
||||||
|
|
||||||
|
fn main() { unsafe {
|
||||||
|
let x = i32x2(1, i32::MIN);
|
||||||
|
let y = i32x2(1, -1);
|
||||||
|
simd_div(x, y); //~ERROR Undefined Behavior: overflow in signed division
|
||||||
|
} }
|
@ -1,5 +1,5 @@
|
|||||||
#![feature(core_intrinsics)]
|
#![feature(core_intrinsics)]
|
||||||
fn main() {
|
fn main() {
|
||||||
// MIN/-1 cannot be represented
|
// MIN/-1 cannot be represented
|
||||||
unsafe { std::intrinsics::unchecked_div(i16::MIN, -1); } //~ ERROR overflow executing `unchecked_div`
|
unsafe { std::intrinsics::unchecked_div(i16::MIN, -1); } //~ ERROR overflow in signed division (dividing MIN by -1)
|
||||||
}
|
}
|
||||||
|
@ -116,6 +116,9 @@ pub fn main() {
|
|||||||
assert_eq!(100i8.wrapping_rem(10), 0);
|
assert_eq!(100i8.wrapping_rem(10), 0);
|
||||||
assert_eq!((-128i8).wrapping_rem(-1), 0);
|
assert_eq!((-128i8).wrapping_rem(-1), 0);
|
||||||
|
|
||||||
|
assert_eq!(i32::MIN.wrapping_div(-1), i32::MIN);
|
||||||
|
assert_eq!(i32::MIN.wrapping_rem(-1), 0);
|
||||||
|
|
||||||
assert_eq!(100i8.wrapping_neg(), -100);
|
assert_eq!(100i8.wrapping_neg(), -100);
|
||||||
assert_eq!((-128i8).wrapping_neg(), -128);
|
assert_eq!((-128i8).wrapping_neg(), -128);
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user