about summary refs log tree commit diff
path: root/src/tools
diff options
context:
space:
mode:
authorbors <bors@rust-lang.org>2024-03-29 20:25:08 +0000
committerbors <bors@rust-lang.org>2024-03-29 20:25:08 +0000
commitfaae5f1ffe7b7b97e91eee6184807ac7307aafaa (patch)
treea05bb2091da1ce88f1e023d0b9c45ac9360729e2 /src/tools
parentaf4a5a13a15fa0c60e06321077ef452f769b42fd (diff)
parent50392ccc5a38f2e4580c67d51836f5add64f7d48 (diff)
downloadrust-faae5f1ffe7b7b97e91eee6184807ac7307aafaa.tar.gz
rust-faae5f1ffe7b7b97e91eee6184807ac7307aafaa.zip
Auto merge of #122520 - scottmcm:stabilize_unchecked_math_basics, r=jhpratt
Stabilize `unchecked_{add,sub,mul}`

Tracking issue: #85122

I think we might as well just stabilize these basic three.  They're the ones that have `nuw`/`nsw` flags in LLVM.

Notably, this doesn't include the potentially-more-complex or -more-situational things like `unchecked_neg` or `unchecked_shr` that are under different feature flags.

To quote Ralf https://github.com/rust-lang/rust/issues/85122#issuecomment-1681669646,

> Are there any objections to stabilizing at least `unchecked_{add,sub,mul}`? For those there shouldn't be any surprises about what their safety requirements are.

*Semantially* these are [already available on stable, even in `const`, via](https://play.rust-lang.org/?version=stable&mode=debug&edition=2021&gist=bdb1ff889b61950897f1e9f56d0c9a36) `checked_*`+`unreachable_unchecked`.  So IMHO we might as well just let people write them directly, rather than try to go through a `let Some(x) = x.checked_add(y) else { unsafe { hint::unreachable_unchecked() }};` dance.

I added additional text to each method to attempt to better describe the behaviour and encourage `wrapping_*` instead.

r? rust-lang/libs-api
Diffstat (limited to 'src/tools')
-rw-r--r--src/tools/miri/tests/fail/intrinsics/unchecked_add1.rs2
-rw-r--r--src/tools/miri/tests/fail/intrinsics/unchecked_add2.rs2
-rw-r--r--src/tools/miri/tests/fail/intrinsics/unchecked_mul1.rs1
-rw-r--r--src/tools/miri/tests/fail/intrinsics/unchecked_mul2.rs1
-rw-r--r--src/tools/miri/tests/fail/intrinsics/unchecked_sub1.rs1
-rw-r--r--src/tools/miri/tests/fail/intrinsics/unchecked_sub2.rs1
6 files changed, 0 insertions, 8 deletions
diff --git a/src/tools/miri/tests/fail/intrinsics/unchecked_add1.rs b/src/tools/miri/tests/fail/intrinsics/unchecked_add1.rs
index 13265d0fb0e..3f8b4e55151 100644
--- a/src/tools/miri/tests/fail/intrinsics/unchecked_add1.rs
+++ b/src/tools/miri/tests/fail/intrinsics/unchecked_add1.rs
@@ -1,5 +1,3 @@
-#![feature(unchecked_math)]
-
 fn main() {
     // MAX overflow
     let _val = unsafe { 40000u16.unchecked_add(30000) }; //~ ERROR: overflow executing `unchecked_add`
diff --git a/src/tools/miri/tests/fail/intrinsics/unchecked_add2.rs b/src/tools/miri/tests/fail/intrinsics/unchecked_add2.rs
index 229f50321d7..3283dbf8e7e 100644
--- a/src/tools/miri/tests/fail/intrinsics/unchecked_add2.rs
+++ b/src/tools/miri/tests/fail/intrinsics/unchecked_add2.rs
@@ -1,5 +1,3 @@
-#![feature(unchecked_math)]
-
 fn main() {
     // MIN overflow
     let _val = unsafe { (-30000i16).unchecked_add(-8000) }; //~ ERROR: overflow executing `unchecked_add`
diff --git a/src/tools/miri/tests/fail/intrinsics/unchecked_mul1.rs b/src/tools/miri/tests/fail/intrinsics/unchecked_mul1.rs
index 810d3418dc8..2feed7759ec 100644
--- a/src/tools/miri/tests/fail/intrinsics/unchecked_mul1.rs
+++ b/src/tools/miri/tests/fail/intrinsics/unchecked_mul1.rs
@@ -1,4 +1,3 @@
-#![feature(unchecked_math)]
 fn main() {
     // MAX overflow
     let _val = unsafe { 300u16.unchecked_mul(250u16) }; //~ ERROR: overflow executing `unchecked_mul`
diff --git a/src/tools/miri/tests/fail/intrinsics/unchecked_mul2.rs b/src/tools/miri/tests/fail/intrinsics/unchecked_mul2.rs
index 421019542a9..42cd509404a 100644
--- a/src/tools/miri/tests/fail/intrinsics/unchecked_mul2.rs
+++ b/src/tools/miri/tests/fail/intrinsics/unchecked_mul2.rs
@@ -1,4 +1,3 @@
-#![feature(unchecked_math)]
 fn main() {
     // MIN overflow
     let _val = unsafe { 1_000_000_000i32.unchecked_mul(-4) }; //~ ERROR: overflow executing `unchecked_mul`
diff --git a/src/tools/miri/tests/fail/intrinsics/unchecked_sub1.rs b/src/tools/miri/tests/fail/intrinsics/unchecked_sub1.rs
index c6e00666744..e5178bf4eff 100644
--- a/src/tools/miri/tests/fail/intrinsics/unchecked_sub1.rs
+++ b/src/tools/miri/tests/fail/intrinsics/unchecked_sub1.rs
@@ -1,4 +1,3 @@
-#![feature(unchecked_math)]
 fn main() {
     // MIN overflow
     let _val = unsafe { 14u32.unchecked_sub(22) }; //~ ERROR: overflow executing `unchecked_sub`
diff --git a/src/tools/miri/tests/fail/intrinsics/unchecked_sub2.rs b/src/tools/miri/tests/fail/intrinsics/unchecked_sub2.rs
index 65aa292e212..ac9fd1e5d06 100644
--- a/src/tools/miri/tests/fail/intrinsics/unchecked_sub2.rs
+++ b/src/tools/miri/tests/fail/intrinsics/unchecked_sub2.rs
@@ -1,4 +1,3 @@
-#![feature(unchecked_math)]
 fn main() {
     // MAX overflow
     let _val = unsafe { 30000i16.unchecked_sub(-7000) }; //~ ERROR: overflow executing `unchecked_sub`