summaryrefslogtreecommitdiffstats
path: root/library/core/src/num
diff options
context:
space:
mode:
authorDaniel Baumann <daniel.baumann@progress-linux.org>2024-05-30 03:57:31 +0000
committerDaniel Baumann <daniel.baumann@progress-linux.org>2024-05-30 03:57:31 +0000
commitdc0db358abe19481e475e10c32149b53370f1a1c (patch)
treeab8ce99c4b255ce46f99ef402c27916055b899ee /library/core/src/num
parentReleasing progress-linux version 1.71.1+dfsg1-2~progress7.99u1. (diff)
downloadrustc-dc0db358abe19481e475e10c32149b53370f1a1c.tar.xz
rustc-dc0db358abe19481e475e10c32149b53370f1a1c.zip
Merging upstream version 1.72.1+dfsg1.
Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
Diffstat (limited to 'library/core/src/num')
-rw-r--r--library/core/src/num/f32.rs1
-rw-r--r--library/core/src/num/f64.rs1
-rw-r--r--library/core/src/num/mod.rs17
-rw-r--r--library/core/src/num/nonzero.rs21
4 files changed, 19 insertions, 21 deletions
diff --git a/library/core/src/num/f32.rs b/library/core/src/num/f32.rs
index 4a035ad61..d050d21c8 100644
--- a/library/core/src/num/f32.rs
+++ b/library/core/src/num/f32.rs
@@ -403,6 +403,7 @@ impl f32 {
/// and the stability of its representation over Rust versions
/// and target platforms isn't guaranteed.
#[stable(feature = "assoc_int_consts", since = "1.43.0")]
+ #[rustc_diagnostic_item = "f32_nan"]
pub const NAN: f32 = 0.0_f32 / 0.0_f32;
/// Infinity (∞).
#[stable(feature = "assoc_int_consts", since = "1.43.0")]
diff --git a/library/core/src/num/f64.rs b/library/core/src/num/f64.rs
index 3aafc435f..d9a738191 100644
--- a/library/core/src/num/f64.rs
+++ b/library/core/src/num/f64.rs
@@ -401,6 +401,7 @@ impl f64 {
/// This constant isn't guaranteed to equal to any specific NaN bitpattern,
/// and the stability of its representation over Rust versions
/// and target platforms isn't guaranteed.
+ #[rustc_diagnostic_item = "f64_nan"]
#[stable(feature = "assoc_int_consts", since = "1.43.0")]
pub const NAN: f64 = 0.0_f64 / 0.0_f64;
/// Infinity (∞).
diff --git a/library/core/src/num/mod.rs b/library/core/src/num/mod.rs
index c9baa09f4..95dcaf5dd 100644
--- a/library/core/src/num/mod.rs
+++ b/library/core/src/num/mod.rs
@@ -3,7 +3,6 @@
#![stable(feature = "rust1", since = "1.0.0")]
use crate::ascii;
-use crate::convert::TryInto;
use crate::intrinsics;
use crate::mem;
use crate::ops::{Add, Mul, Sub};
@@ -278,18 +277,12 @@ macro_rules! widening_impl {
macro_rules! conv_rhs_for_unchecked_shift {
($SelfT:ty, $x:expr) => {{
- #[inline]
- fn conv(x: u32) -> $SelfT {
- // FIXME(const-hack) replace with `.try_into().ok().unwrap_unchecked()`.
- // SAFETY: Any legal shift amount must be losslessly representable in the self type.
- unsafe { x.try_into().ok().unwrap_unchecked() }
- }
- #[inline]
- const fn const_conv(x: u32) -> $SelfT {
- x as _
+ // If the `as` cast will truncate, ensure we still tell the backend
+ // that the pre-truncation value was also small.
+ if <$SelfT>::BITS < 32 {
+ intrinsics::assume($x <= (<$SelfT>::MAX as u32));
}
-
- intrinsics::const_eval_select(($x,), const_conv, conv)
+ $x as $SelfT
}};
}
diff --git a/library/core/src/num/nonzero.rs b/library/core/src/num/nonzero.rs
index 7f06e170a..5939dedbd 100644
--- a/library/core/src/num/nonzero.rs
+++ b/library/core/src/num/nonzero.rs
@@ -348,7 +348,7 @@ macro_rules! nonzero_unsigned_operations {
}
/// Adds an unsigned integer to a non-zero value.
- #[doc = concat!("Return [`", stringify!($Int), "::MAX`] on overflow.")]
+ #[doc = concat!("Return [`", stringify!($Ty), "::MAX`] on overflow.")]
///
/// # Examples
///
@@ -579,7 +579,7 @@ macro_rules! nonzero_signed_operations {
/// Checked absolute value.
/// Checks for overflow and returns [`None`] if
- #[doc = concat!("`self == ", stringify!($Int), "::MIN`.")]
+ #[doc = concat!("`self == ", stringify!($Ty), "::MIN`.")]
/// The result cannot be zero.
///
/// # Example
@@ -800,7 +800,8 @@ macro_rules! nonzero_signed_operations {
self.get().is_negative()
}
- /// Checked negation. Computes `-self`, returning `None` if `self == i32::MIN`.
+ /// Checked negation. Computes `-self`,
+ #[doc = concat!("returning `None` if `self == ", stringify!($Ty), "::MIN`.")]
///
/// # Example
///
@@ -859,8 +860,10 @@ macro_rules! nonzero_signed_operations {
((unsafe { $Ty::new_unchecked(result) }), overflow)
}
- /// Saturating negation. Computes `-self`, returning `MAX` if
- /// `self == i32::MIN` instead of overflowing.
+ /// Saturating negation. Computes `-self`,
+ #[doc = concat!("returning [`", stringify!($Ty), "::MAX`]")]
+ #[doc = concat!("if `self == ", stringify!($Ty), "::MIN`")]
+ /// instead of overflowing.
///
/// # Example
///
@@ -993,7 +996,7 @@ macro_rules! nonzero_unsigned_signed_operations {
}
/// Multiplies two non-zero integers together.
- #[doc = concat!("Return [`", stringify!($Int), "::MAX`] on overflow.")]
+ #[doc = concat!("Return [`", stringify!($Ty), "::MAX`] on overflow.")]
///
/// # Examples
///
@@ -1102,11 +1105,11 @@ macro_rules! nonzero_unsigned_signed_operations {
#[doc = sign_dependent_expr!{
$signedness ?
if signed {
- concat!("Return [`", stringify!($Int), "::MIN`] ",
- "or [`", stringify!($Int), "::MAX`] on overflow.")
+ concat!("Return [`", stringify!($Ty), "::MIN`] ",
+ "or [`", stringify!($Ty), "::MAX`] on overflow.")
}
if unsigned {
- concat!("Return [`", stringify!($Int), "::MAX`] on overflow.")
+ concat!("Return [`", stringify!($Ty), "::MAX`] on overflow.")
}
}]
///