1
Fork 0

Stabilize const_float_methods

This commit is contained in:
Eduardo Sánchez Muñoz 2024-11-23 18:06:35 +01:00
parent ff1737bb00
commit 6f7dc38031
8 changed files with 70 additions and 51 deletions

View file

@ -4267,7 +4267,11 @@ pub const fn minnumf16(_x: f16, _y: f16) -> f16 {
/// The stabilized version of this intrinsic is /// The stabilized version of this intrinsic is
/// [`f32::min`] /// [`f32::min`]
#[rustc_nounwind] #[rustc_nounwind]
#[cfg_attr(bootstrap, rustc_const_unstable(feature = "const_float_methods", issue = "130843"))] #[cfg_attr(
bootstrap,
rustc_const_stable(feature = "const_float_methods", since = "CURRENT_RUSTC_VERSION")
)]
#[cfg_attr(not(bootstrap), rustc_intrinsic_const_stable_indirect)]
#[rustc_intrinsic] #[rustc_intrinsic]
#[rustc_intrinsic_must_be_overridden] #[rustc_intrinsic_must_be_overridden]
pub const fn minnumf32(_x: f32, _y: f32) -> f32 { pub const fn minnumf32(_x: f32, _y: f32) -> f32 {
@ -4284,7 +4288,11 @@ pub const fn minnumf32(_x: f32, _y: f32) -> f32 {
/// The stabilized version of this intrinsic is /// The stabilized version of this intrinsic is
/// [`f64::min`] /// [`f64::min`]
#[rustc_nounwind] #[rustc_nounwind]
#[cfg_attr(bootstrap, rustc_const_unstable(feature = "const_float_methods", issue = "130843"))] #[cfg_attr(
bootstrap,
rustc_const_stable(feature = "const_float_methods", since = "CURRENT_RUSTC_VERSION")
)]
#[cfg_attr(not(bootstrap), rustc_intrinsic_const_stable_indirect)]
#[rustc_intrinsic] #[rustc_intrinsic]
#[rustc_intrinsic_must_be_overridden] #[rustc_intrinsic_must_be_overridden]
pub const fn minnumf64(_x: f64, _y: f64) -> f64 { pub const fn minnumf64(_x: f64, _y: f64) -> f64 {
@ -4335,7 +4343,11 @@ pub const fn maxnumf16(_x: f16, _y: f16) -> f16 {
/// The stabilized version of this intrinsic is /// The stabilized version of this intrinsic is
/// [`f32::max`] /// [`f32::max`]
#[rustc_nounwind] #[rustc_nounwind]
#[cfg_attr(bootstrap, rustc_const_unstable(feature = "const_float_methods", issue = "130843"))] #[cfg_attr(
bootstrap,
rustc_const_stable(feature = "const_float_methods", since = "CURRENT_RUSTC_VERSION")
)]
#[cfg_attr(not(bootstrap), rustc_intrinsic_const_stable_indirect)]
#[rustc_intrinsic] #[rustc_intrinsic]
#[rustc_intrinsic_must_be_overridden] #[rustc_intrinsic_must_be_overridden]
pub const fn maxnumf32(_x: f32, _y: f32) -> f32 { pub const fn maxnumf32(_x: f32, _y: f32) -> f32 {
@ -4352,7 +4364,11 @@ pub const fn maxnumf32(_x: f32, _y: f32) -> f32 {
/// The stabilized version of this intrinsic is /// The stabilized version of this intrinsic is
/// [`f64::max`] /// [`f64::max`]
#[rustc_nounwind] #[rustc_nounwind]
#[cfg_attr(bootstrap, rustc_const_unstable(feature = "const_float_methods", issue = "130843"))] #[cfg_attr(
bootstrap,
rustc_const_stable(feature = "const_float_methods", since = "CURRENT_RUSTC_VERSION")
)]
#[cfg_attr(not(bootstrap), rustc_intrinsic_const_stable_indirect)]
#[rustc_intrinsic] #[rustc_intrinsic]
#[rustc_intrinsic_must_be_overridden] #[rustc_intrinsic_must_be_overridden]
pub const fn maxnumf64(_x: f64, _y: f64) -> f64 { pub const fn maxnumf64(_x: f64, _y: f64) -> f64 {
@ -4393,7 +4409,11 @@ pub const unsafe fn fabsf16(_x: f16) -> f16 {
/// The stabilized version of this intrinsic is /// The stabilized version of this intrinsic is
/// [`f32::abs`](../../std/primitive.f32.html#method.abs) /// [`f32::abs`](../../std/primitive.f32.html#method.abs)
#[rustc_nounwind] #[rustc_nounwind]
#[cfg_attr(bootstrap, rustc_const_unstable(feature = "const_float_methods", issue = "130843"))] #[cfg_attr(
bootstrap,
rustc_const_stable(feature = "const_float_methods", since = "CURRENT_RUSTC_VERSION")
)]
#[cfg_attr(not(bootstrap), rustc_intrinsic_const_stable_indirect)]
#[rustc_intrinsic] #[rustc_intrinsic]
#[rustc_intrinsic_must_be_overridden] #[rustc_intrinsic_must_be_overridden]
pub const unsafe fn fabsf32(_x: f32) -> f32 { pub const unsafe fn fabsf32(_x: f32) -> f32 {
@ -4405,7 +4425,11 @@ pub const unsafe fn fabsf32(_x: f32) -> f32 {
/// The stabilized version of this intrinsic is /// The stabilized version of this intrinsic is
/// [`f64::abs`](../../std/primitive.f64.html#method.abs) /// [`f64::abs`](../../std/primitive.f64.html#method.abs)
#[rustc_nounwind] #[rustc_nounwind]
#[cfg_attr(bootstrap, rustc_const_unstable(feature = "const_float_methods", issue = "130843"))] #[cfg_attr(
bootstrap,
rustc_const_stable(feature = "const_float_methods", since = "CURRENT_RUSTC_VERSION")
)]
#[cfg_attr(not(bootstrap), rustc_intrinsic_const_stable_indirect)]
#[rustc_intrinsic] #[rustc_intrinsic]
#[rustc_intrinsic_must_be_overridden] #[rustc_intrinsic_must_be_overridden]
pub const unsafe fn fabsf64(_x: f64) -> f64 { pub const unsafe fn fabsf64(_x: f64) -> f64 {
@ -4441,7 +4465,11 @@ pub const unsafe fn copysignf16(_x: f16, _y: f16) -> f16 {
/// The stabilized version of this intrinsic is /// The stabilized version of this intrinsic is
/// [`f32::copysign`](../../std/primitive.f32.html#method.copysign) /// [`f32::copysign`](../../std/primitive.f32.html#method.copysign)
#[rustc_nounwind] #[rustc_nounwind]
#[cfg_attr(bootstrap, rustc_const_unstable(feature = "const_float_methods", issue = "130843"))] #[cfg_attr(
bootstrap,
rustc_const_stable(feature = "const_float_methods", since = "CURRENT_RUSTC_VERSION")
)]
#[cfg_attr(not(bootstrap), rustc_intrinsic_const_stable_indirect)]
#[rustc_intrinsic] #[rustc_intrinsic]
#[rustc_intrinsic_must_be_overridden] #[rustc_intrinsic_must_be_overridden]
pub const unsafe fn copysignf32(_x: f32, _y: f32) -> f32 { pub const unsafe fn copysignf32(_x: f32, _y: f32) -> f32 {
@ -4452,7 +4480,11 @@ pub const unsafe fn copysignf32(_x: f32, _y: f32) -> f32 {
/// The stabilized version of this intrinsic is /// The stabilized version of this intrinsic is
/// [`f64::copysign`](../../std/primitive.f64.html#method.copysign) /// [`f64::copysign`](../../std/primitive.f64.html#method.copysign)
#[rustc_nounwind] #[rustc_nounwind]
#[cfg_attr(bootstrap, rustc_const_unstable(feature = "const_float_methods", issue = "130843"))] #[cfg_attr(
bootstrap,
rustc_const_stable(feature = "const_float_methods", since = "CURRENT_RUSTC_VERSION")
)]
#[cfg_attr(not(bootstrap), rustc_intrinsic_const_stable_indirect)]
#[rustc_intrinsic] #[rustc_intrinsic]
#[rustc_intrinsic_must_be_overridden] #[rustc_intrinsic_must_be_overridden]
pub const unsafe fn copysignf64(_x: f64, _y: f64) -> f64 { pub const unsafe fn copysignf64(_x: f64, _y: f64) -> f64 {

View file

@ -118,7 +118,6 @@
#![feature(const_black_box)] #![feature(const_black_box)]
#![feature(const_eq_ignore_ascii_case)] #![feature(const_eq_ignore_ascii_case)]
#![feature(const_eval_select)] #![feature(const_eval_select)]
#![feature(const_float_methods)]
#![feature(const_heap)] #![feature(const_heap)]
#![feature(const_nonnull_new)] #![feature(const_nonnull_new)]
#![feature(const_ptr_sub_ptr)] #![feature(const_ptr_sub_ptr)]

View file

@ -334,7 +334,7 @@ impl f128 {
#[inline] #[inline]
#[must_use] #[must_use]
#[unstable(feature = "f128", issue = "116909")] #[unstable(feature = "f128", issue = "116909")]
#[rustc_allow_const_fn_unstable(const_float_methods)] // for `abs` #[rustc_const_unstable(feature = "f128", issue = "116909")]
pub const fn is_finite(self) -> bool { pub const fn is_finite(self) -> bool {
// There's no need to handle NaN separately: if self is NaN, // There's no need to handle NaN separately: if self is NaN,
// the comparison is not true, exactly as desired. // the comparison is not true, exactly as desired.
@ -612,7 +612,6 @@ impl f128 {
/// ``` /// ```
#[inline] #[inline]
#[unstable(feature = "f128", issue = "116909")] #[unstable(feature = "f128", issue = "116909")]
#[rustc_const_unstable(feature = "const_float_methods", issue = "130843")]
#[must_use = "this returns the result of the operation, without modifying the original"] #[must_use = "this returns the result of the operation, without modifying the original"]
pub const fn recip(self) -> Self { pub const fn recip(self) -> Self {
1.0 / self 1.0 / self
@ -633,7 +632,6 @@ impl f128 {
/// ``` /// ```
#[inline] #[inline]
#[unstable(feature = "f128", issue = "116909")] #[unstable(feature = "f128", issue = "116909")]
#[rustc_const_unstable(feature = "const_float_methods", issue = "130843")]
#[must_use = "this returns the result of the operation, without modifying the original"] #[must_use = "this returns the result of the operation, without modifying the original"]
pub const fn to_degrees(self) -> Self { pub const fn to_degrees(self) -> Self {
// Use a literal for better precision. // Use a literal for better precision.
@ -657,7 +655,6 @@ impl f128 {
/// ``` /// ```
#[inline] #[inline]
#[unstable(feature = "f128", issue = "116909")] #[unstable(feature = "f128", issue = "116909")]
#[rustc_const_unstable(feature = "const_float_methods", issue = "130843")]
#[must_use = "this returns the result of the operation, without modifying the original"] #[must_use = "this returns the result of the operation, without modifying the original"]
pub const fn to_radians(self) -> f128 { pub const fn to_radians(self) -> f128 {
// Use a literal for better precision. // Use a literal for better precision.
@ -686,7 +683,7 @@ impl f128 {
/// ``` /// ```
#[inline] #[inline]
#[unstable(feature = "f128", issue = "116909")] #[unstable(feature = "f128", issue = "116909")]
#[rustc_const_unstable(feature = "const_float_methods", issue = "130843")] #[rustc_const_unstable(feature = "f128", issue = "116909")]
#[must_use = "this returns the result of the comparison, without modifying either input"] #[must_use = "this returns the result of the comparison, without modifying either input"]
pub const fn max(self, other: f128) -> f128 { pub const fn max(self, other: f128) -> f128 {
intrinsics::maxnumf128(self, other) intrinsics::maxnumf128(self, other)
@ -712,7 +709,7 @@ impl f128 {
/// ``` /// ```
#[inline] #[inline]
#[unstable(feature = "f128", issue = "116909")] #[unstable(feature = "f128", issue = "116909")]
#[rustc_const_unstable(feature = "const_float_methods", issue = "130843")] #[rustc_const_unstable(feature = "f128", issue = "116909")]
#[must_use = "this returns the result of the comparison, without modifying either input"] #[must_use = "this returns the result of the comparison, without modifying either input"]
pub const fn min(self, other: f128) -> f128 { pub const fn min(self, other: f128) -> f128 {
intrinsics::minnumf128(self, other) intrinsics::minnumf128(self, other)
@ -1251,7 +1248,6 @@ impl f128 {
/// ``` /// ```
#[inline] #[inline]
#[unstable(feature = "f128", issue = "116909")] #[unstable(feature = "f128", issue = "116909")]
#[rustc_const_unstable(feature = "const_float_methods", issue = "130843")]
#[must_use = "method returns a new number and does not mutate the original value"] #[must_use = "method returns a new number and does not mutate the original value"]
pub const fn clamp(mut self, min: f128, max: f128) -> f128 { pub const fn clamp(mut self, min: f128, max: f128) -> f128 {
const_assert!( const_assert!(
@ -1292,7 +1288,7 @@ impl f128 {
/// ``` /// ```
#[inline] #[inline]
#[unstable(feature = "f128", issue = "116909")] #[unstable(feature = "f128", issue = "116909")]
#[rustc_const_unstable(feature = "const_float_methods", issue = "130843")] #[rustc_const_unstable(feature = "f128", issue = "116909")]
#[must_use = "method returns a new number and does not mutate the original value"] #[must_use = "method returns a new number and does not mutate the original value"]
pub const fn abs(self) -> Self { pub const fn abs(self) -> Self {
// FIXME(f16_f128): replace with `intrinsics::fabsf128` when available // FIXME(f16_f128): replace with `intrinsics::fabsf128` when available
@ -1322,7 +1318,7 @@ impl f128 {
/// ``` /// ```
#[inline] #[inline]
#[unstable(feature = "f128", issue = "116909")] #[unstable(feature = "f128", issue = "116909")]
#[rustc_const_unstable(feature = "const_float_methods", issue = "130843")] #[rustc_const_unstable(feature = "f128", issue = "116909")]
#[must_use = "method returns a new number and does not mutate the original value"] #[must_use = "method returns a new number and does not mutate the original value"]
pub const fn signum(self) -> f128 { pub const fn signum(self) -> f128 {
if self.is_nan() { Self::NAN } else { 1.0_f128.copysign(self) } if self.is_nan() { Self::NAN } else { 1.0_f128.copysign(self) }
@ -1360,7 +1356,7 @@ impl f128 {
/// ``` /// ```
#[inline] #[inline]
#[unstable(feature = "f128", issue = "116909")] #[unstable(feature = "f128", issue = "116909")]
#[rustc_const_unstable(feature = "const_float_methods", issue = "130843")] #[rustc_const_unstable(feature = "f128", issue = "116909")]
#[must_use = "method returns a new number and does not mutate the original value"] #[must_use = "method returns a new number and does not mutate the original value"]
pub const fn copysign(self, sign: f128) -> f128 { pub const fn copysign(self, sign: f128) -> f128 {
// SAFETY: this is actually a safe intrinsic // SAFETY: this is actually a safe intrinsic

View file

@ -326,7 +326,7 @@ impl f16 {
#[inline] #[inline]
#[must_use] #[must_use]
#[unstable(feature = "f16", issue = "116909")] #[unstable(feature = "f16", issue = "116909")]
#[rustc_allow_const_fn_unstable(const_float_methods)] // for `abs` #[rustc_const_unstable(feature = "f16", issue = "116909")]
pub const fn is_finite(self) -> bool { pub const fn is_finite(self) -> bool {
// There's no need to handle NaN separately: if self is NaN, // There's no need to handle NaN separately: if self is NaN,
// the comparison is not true, exactly as desired. // the comparison is not true, exactly as desired.
@ -605,7 +605,6 @@ impl f16 {
/// ``` /// ```
#[inline] #[inline]
#[unstable(feature = "f16", issue = "116909")] #[unstable(feature = "f16", issue = "116909")]
#[rustc_const_unstable(feature = "const_float_methods", issue = "130843")]
#[must_use = "this returns the result of the operation, without modifying the original"] #[must_use = "this returns the result of the operation, without modifying the original"]
pub const fn recip(self) -> Self { pub const fn recip(self) -> Self {
1.0 / self 1.0 / self
@ -626,7 +625,6 @@ impl f16 {
/// ``` /// ```
#[inline] #[inline]
#[unstable(feature = "f16", issue = "116909")] #[unstable(feature = "f16", issue = "116909")]
#[rustc_const_unstable(feature = "const_float_methods", issue = "130843")]
#[must_use = "this returns the result of the operation, without modifying the original"] #[must_use = "this returns the result of the operation, without modifying the original"]
pub const fn to_degrees(self) -> Self { pub const fn to_degrees(self) -> Self {
// Use a literal for better precision. // Use a literal for better precision.
@ -650,7 +648,6 @@ impl f16 {
/// ``` /// ```
#[inline] #[inline]
#[unstable(feature = "f16", issue = "116909")] #[unstable(feature = "f16", issue = "116909")]
#[rustc_const_unstable(feature = "const_float_methods", issue = "130843")]
#[must_use = "this returns the result of the operation, without modifying the original"] #[must_use = "this returns the result of the operation, without modifying the original"]
pub const fn to_radians(self) -> f16 { pub const fn to_radians(self) -> f16 {
// Use a literal for better precision. // Use a literal for better precision.
@ -677,7 +674,7 @@ impl f16 {
/// ``` /// ```
#[inline] #[inline]
#[unstable(feature = "f16", issue = "116909")] #[unstable(feature = "f16", issue = "116909")]
#[rustc_const_unstable(feature = "const_float_methods", issue = "130843")] #[rustc_const_unstable(feature = "f16", issue = "116909")]
#[must_use = "this returns the result of the comparison, without modifying either input"] #[must_use = "this returns the result of the comparison, without modifying either input"]
pub const fn max(self, other: f16) -> f16 { pub const fn max(self, other: f16) -> f16 {
intrinsics::maxnumf16(self, other) intrinsics::maxnumf16(self, other)
@ -702,7 +699,7 @@ impl f16 {
/// ``` /// ```
#[inline] #[inline]
#[unstable(feature = "f16", issue = "116909")] #[unstable(feature = "f16", issue = "116909")]
#[rustc_const_unstable(feature = "const_float_methods", issue = "130843")] #[rustc_const_unstable(feature = "f16", issue = "116909")]
#[must_use = "this returns the result of the comparison, without modifying either input"] #[must_use = "this returns the result of the comparison, without modifying either input"]
pub const fn min(self, other: f16) -> f16 { pub const fn min(self, other: f16) -> f16 {
intrinsics::minnumf16(self, other) intrinsics::minnumf16(self, other)
@ -1228,7 +1225,6 @@ impl f16 {
/// ``` /// ```
#[inline] #[inline]
#[unstable(feature = "f16", issue = "116909")] #[unstable(feature = "f16", issue = "116909")]
#[rustc_const_unstable(feature = "const_float_methods", issue = "130843")]
#[must_use = "method returns a new number and does not mutate the original value"] #[must_use = "method returns a new number and does not mutate the original value"]
pub const fn clamp(mut self, min: f16, max: f16) -> f16 { pub const fn clamp(mut self, min: f16, max: f16) -> f16 {
const_assert!( const_assert!(
@ -1269,7 +1265,7 @@ impl f16 {
/// ``` /// ```
#[inline] #[inline]
#[unstable(feature = "f16", issue = "116909")] #[unstable(feature = "f16", issue = "116909")]
#[rustc_const_unstable(feature = "const_float_methods", issue = "130843")] #[rustc_const_unstable(feature = "f16", issue = "116909")]
#[must_use = "method returns a new number and does not mutate the original value"] #[must_use = "method returns a new number and does not mutate the original value"]
pub const fn abs(self) -> Self { pub const fn abs(self) -> Self {
// FIXME(f16_f128): replace with `intrinsics::fabsf16` when available // FIXME(f16_f128): replace with `intrinsics::fabsf16` when available
@ -1298,7 +1294,7 @@ impl f16 {
/// ``` /// ```
#[inline] #[inline]
#[unstable(feature = "f16", issue = "116909")] #[unstable(feature = "f16", issue = "116909")]
#[rustc_const_unstable(feature = "const_float_methods", issue = "130843")] #[rustc_const_unstable(feature = "f16", issue = "116909")]
#[must_use = "method returns a new number and does not mutate the original value"] #[must_use = "method returns a new number and does not mutate the original value"]
pub const fn signum(self) -> f16 { pub const fn signum(self) -> f16 {
if self.is_nan() { Self::NAN } else { 1.0_f16.copysign(self) } if self.is_nan() { Self::NAN } else { 1.0_f16.copysign(self) }
@ -1336,7 +1332,7 @@ impl f16 {
/// ``` /// ```
#[inline] #[inline]
#[unstable(feature = "f16", issue = "116909")] #[unstable(feature = "f16", issue = "116909")]
#[rustc_const_unstable(feature = "const_float_methods", issue = "130843")] #[rustc_const_unstable(feature = "f16", issue = "116909")]
#[must_use = "method returns a new number and does not mutate the original value"] #[must_use = "method returns a new number and does not mutate the original value"]
pub const fn copysign(self, sign: f16) -> f16 { pub const fn copysign(self, sign: f16) -> f16 {
// SAFETY: this is actually a safe intrinsic // SAFETY: this is actually a safe intrinsic

View file

@ -569,7 +569,6 @@ impl f32 {
#[stable(feature = "rust1", since = "1.0.0")] #[stable(feature = "rust1", since = "1.0.0")]
#[rustc_const_stable(feature = "const_float_classify", since = "1.83.0")] #[rustc_const_stable(feature = "const_float_classify", since = "1.83.0")]
#[inline] #[inline]
#[rustc_allow_const_fn_unstable(const_float_methods)] // for `abs`
pub const fn is_finite(self) -> bool { pub const fn is_finite(self) -> bool {
// There's no need to handle NaN separately: if self is NaN, // There's no need to handle NaN separately: if self is NaN,
// the comparison is not true, exactly as desired. // the comparison is not true, exactly as desired.
@ -819,7 +818,7 @@ impl f32 {
/// ``` /// ```
#[must_use = "this returns the result of the operation, without modifying the original"] #[must_use = "this returns the result of the operation, without modifying the original"]
#[stable(feature = "rust1", since = "1.0.0")] #[stable(feature = "rust1", since = "1.0.0")]
#[rustc_const_unstable(feature = "const_float_methods", issue = "130843")] #[rustc_const_stable(feature = "const_float_methods", since = "CURRENT_RUSTC_VERSION")]
#[inline] #[inline]
pub const fn recip(self) -> f32 { pub const fn recip(self) -> f32 {
1.0 / self 1.0 / self
@ -837,7 +836,7 @@ impl f32 {
#[must_use = "this returns the result of the operation, \ #[must_use = "this returns the result of the operation, \
without modifying the original"] without modifying the original"]
#[stable(feature = "f32_deg_rad_conversions", since = "1.7.0")] #[stable(feature = "f32_deg_rad_conversions", since = "1.7.0")]
#[rustc_const_unstable(feature = "const_float_methods", issue = "130843")] #[rustc_const_stable(feature = "const_float_methods", since = "CURRENT_RUSTC_VERSION")]
#[inline] #[inline]
pub const fn to_degrees(self) -> f32 { pub const fn to_degrees(self) -> f32 {
// Use a constant for better precision. // Use a constant for better precision.
@ -857,7 +856,7 @@ impl f32 {
#[must_use = "this returns the result of the operation, \ #[must_use = "this returns the result of the operation, \
without modifying the original"] without modifying the original"]
#[stable(feature = "f32_deg_rad_conversions", since = "1.7.0")] #[stable(feature = "f32_deg_rad_conversions", since = "1.7.0")]
#[rustc_const_unstable(feature = "const_float_methods", issue = "130843")] #[rustc_const_stable(feature = "const_float_methods", since = "CURRENT_RUSTC_VERSION")]
#[inline] #[inline]
pub const fn to_radians(self) -> f32 { pub const fn to_radians(self) -> f32 {
const RADS_PER_DEG: f32 = consts::PI / 180.0; const RADS_PER_DEG: f32 = consts::PI / 180.0;
@ -879,7 +878,7 @@ impl f32 {
/// ``` /// ```
#[must_use = "this returns the result of the comparison, without modifying either input"] #[must_use = "this returns the result of the comparison, without modifying either input"]
#[stable(feature = "rust1", since = "1.0.0")] #[stable(feature = "rust1", since = "1.0.0")]
#[rustc_const_unstable(feature = "const_float_methods", issue = "130843")] #[rustc_const_stable(feature = "const_float_methods", since = "CURRENT_RUSTC_VERSION")]
#[inline] #[inline]
pub const fn max(self, other: f32) -> f32 { pub const fn max(self, other: f32) -> f32 {
intrinsics::maxnumf32(self, other) intrinsics::maxnumf32(self, other)
@ -900,7 +899,7 @@ impl f32 {
/// ``` /// ```
#[must_use = "this returns the result of the comparison, without modifying either input"] #[must_use = "this returns the result of the comparison, without modifying either input"]
#[stable(feature = "rust1", since = "1.0.0")] #[stable(feature = "rust1", since = "1.0.0")]
#[rustc_const_unstable(feature = "const_float_methods", issue = "130843")] #[rustc_const_stable(feature = "const_float_methods", since = "CURRENT_RUSTC_VERSION")]
#[inline] #[inline]
pub const fn min(self, other: f32) -> f32 { pub const fn min(self, other: f32) -> f32 {
intrinsics::minnumf32(self, other) intrinsics::minnumf32(self, other)
@ -1397,7 +1396,7 @@ impl f32 {
/// ``` /// ```
#[must_use = "method returns a new number and does not mutate the original value"] #[must_use = "method returns a new number and does not mutate the original value"]
#[stable(feature = "clamp", since = "1.50.0")] #[stable(feature = "clamp", since = "1.50.0")]
#[rustc_const_unstable(feature = "const_float_methods", issue = "130843")] #[rustc_const_stable(feature = "const_float_methods", since = "CURRENT_RUSTC_VERSION")]
#[inline] #[inline]
pub const fn clamp(mut self, min: f32, max: f32) -> f32 { pub const fn clamp(mut self, min: f32, max: f32) -> f32 {
const_assert!( const_assert!(
@ -1434,7 +1433,7 @@ impl f32 {
/// ``` /// ```
#[must_use = "method returns a new number and does not mutate the original value"] #[must_use = "method returns a new number and does not mutate the original value"]
#[stable(feature = "rust1", since = "1.0.0")] #[stable(feature = "rust1", since = "1.0.0")]
#[rustc_const_unstable(feature = "const_float_methods", issue = "130843")] #[rustc_const_stable(feature = "const_float_methods", since = "CURRENT_RUSTC_VERSION")]
#[inline] #[inline]
pub const fn abs(self) -> f32 { pub const fn abs(self) -> f32 {
// SAFETY: this is actually a safe intrinsic // SAFETY: this is actually a safe intrinsic
@ -1459,7 +1458,7 @@ impl f32 {
/// ``` /// ```
#[must_use = "method returns a new number and does not mutate the original value"] #[must_use = "method returns a new number and does not mutate the original value"]
#[stable(feature = "rust1", since = "1.0.0")] #[stable(feature = "rust1", since = "1.0.0")]
#[rustc_const_unstable(feature = "const_float_methods", issue = "130843")] #[rustc_const_stable(feature = "const_float_methods", since = "CURRENT_RUSTC_VERSION")]
#[inline] #[inline]
pub const fn signum(self) -> f32 { pub const fn signum(self) -> f32 {
if self.is_nan() { Self::NAN } else { 1.0_f32.copysign(self) } if self.is_nan() { Self::NAN } else { 1.0_f32.copysign(self) }
@ -1494,7 +1493,7 @@ impl f32 {
#[must_use = "method returns a new number and does not mutate the original value"] #[must_use = "method returns a new number and does not mutate the original value"]
#[inline] #[inline]
#[stable(feature = "copysign", since = "1.35.0")] #[stable(feature = "copysign", since = "1.35.0")]
#[rustc_const_unstable(feature = "const_float_methods", issue = "130843")] #[rustc_const_stable(feature = "const_float_methods", since = "CURRENT_RUSTC_VERSION")]
pub const fn copysign(self, sign: f32) -> f32 { pub const fn copysign(self, sign: f32) -> f32 {
// SAFETY: this is actually a safe intrinsic // SAFETY: this is actually a safe intrinsic
unsafe { intrinsics::copysignf32(self, sign) } unsafe { intrinsics::copysignf32(self, sign) }

View file

@ -568,7 +568,6 @@ impl f64 {
#[stable(feature = "rust1", since = "1.0.0")] #[stable(feature = "rust1", since = "1.0.0")]
#[rustc_const_stable(feature = "const_float_classify", since = "1.83.0")] #[rustc_const_stable(feature = "const_float_classify", since = "1.83.0")]
#[inline] #[inline]
#[rustc_allow_const_fn_unstable(const_float_methods)] // for `abs`
pub const fn is_finite(self) -> bool { pub const fn is_finite(self) -> bool {
// There's no need to handle NaN separately: if self is NaN, // There's no need to handle NaN separately: if self is NaN,
// the comparison is not true, exactly as desired. // the comparison is not true, exactly as desired.
@ -836,7 +835,7 @@ impl f64 {
/// ``` /// ```
#[must_use = "this returns the result of the operation, without modifying the original"] #[must_use = "this returns the result of the operation, without modifying the original"]
#[stable(feature = "rust1", since = "1.0.0")] #[stable(feature = "rust1", since = "1.0.0")]
#[rustc_const_unstable(feature = "const_float_methods", issue = "130843")] #[rustc_const_stable(feature = "const_float_methods", since = "CURRENT_RUSTC_VERSION")]
#[inline] #[inline]
pub const fn recip(self) -> f64 { pub const fn recip(self) -> f64 {
1.0 / self 1.0 / self
@ -854,7 +853,7 @@ impl f64 {
#[must_use = "this returns the result of the operation, \ #[must_use = "this returns the result of the operation, \
without modifying the original"] without modifying the original"]
#[stable(feature = "rust1", since = "1.0.0")] #[stable(feature = "rust1", since = "1.0.0")]
#[rustc_const_unstable(feature = "const_float_methods", issue = "130843")] #[rustc_const_stable(feature = "const_float_methods", since = "CURRENT_RUSTC_VERSION")]
#[inline] #[inline]
pub const fn to_degrees(self) -> f64 { pub const fn to_degrees(self) -> f64 {
// The division here is correctly rounded with respect to the true // The division here is correctly rounded with respect to the true
@ -875,7 +874,7 @@ impl f64 {
#[must_use = "this returns the result of the operation, \ #[must_use = "this returns the result of the operation, \
without modifying the original"] without modifying the original"]
#[stable(feature = "rust1", since = "1.0.0")] #[stable(feature = "rust1", since = "1.0.0")]
#[rustc_const_unstable(feature = "const_float_methods", issue = "130843")] #[rustc_const_stable(feature = "const_float_methods", since = "CURRENT_RUSTC_VERSION")]
#[inline] #[inline]
pub const fn to_radians(self) -> f64 { pub const fn to_radians(self) -> f64 {
const RADS_PER_DEG: f64 = consts::PI / 180.0; const RADS_PER_DEG: f64 = consts::PI / 180.0;
@ -897,7 +896,7 @@ impl f64 {
/// ``` /// ```
#[must_use = "this returns the result of the comparison, without modifying either input"] #[must_use = "this returns the result of the comparison, without modifying either input"]
#[stable(feature = "rust1", since = "1.0.0")] #[stable(feature = "rust1", since = "1.0.0")]
#[rustc_const_unstable(feature = "const_float_methods", issue = "130843")] #[rustc_const_stable(feature = "const_float_methods", since = "CURRENT_RUSTC_VERSION")]
#[inline] #[inline]
pub const fn max(self, other: f64) -> f64 { pub const fn max(self, other: f64) -> f64 {
intrinsics::maxnumf64(self, other) intrinsics::maxnumf64(self, other)
@ -918,7 +917,7 @@ impl f64 {
/// ``` /// ```
#[must_use = "this returns the result of the comparison, without modifying either input"] #[must_use = "this returns the result of the comparison, without modifying either input"]
#[stable(feature = "rust1", since = "1.0.0")] #[stable(feature = "rust1", since = "1.0.0")]
#[rustc_const_unstable(feature = "const_float_methods", issue = "130843")] #[rustc_const_stable(feature = "const_float_methods", since = "CURRENT_RUSTC_VERSION")]
#[inline] #[inline]
pub const fn min(self, other: f64) -> f64 { pub const fn min(self, other: f64) -> f64 {
intrinsics::minnumf64(self, other) intrinsics::minnumf64(self, other)
@ -1397,7 +1396,7 @@ impl f64 {
/// ``` /// ```
#[must_use = "method returns a new number and does not mutate the original value"] #[must_use = "method returns a new number and does not mutate the original value"]
#[stable(feature = "clamp", since = "1.50.0")] #[stable(feature = "clamp", since = "1.50.0")]
#[rustc_const_unstable(feature = "const_float_methods", issue = "130843")] #[rustc_const_stable(feature = "const_float_methods", since = "CURRENT_RUSTC_VERSION")]
#[inline] #[inline]
pub const fn clamp(mut self, min: f64, max: f64) -> f64 { pub const fn clamp(mut self, min: f64, max: f64) -> f64 {
const_assert!( const_assert!(
@ -1434,7 +1433,7 @@ impl f64 {
/// ``` /// ```
#[must_use = "method returns a new number and does not mutate the original value"] #[must_use = "method returns a new number and does not mutate the original value"]
#[stable(feature = "rust1", since = "1.0.0")] #[stable(feature = "rust1", since = "1.0.0")]
#[rustc_const_unstable(feature = "const_float_methods", issue = "130843")] #[rustc_const_stable(feature = "const_float_methods", since = "CURRENT_RUSTC_VERSION")]
#[inline] #[inline]
pub const fn abs(self) -> f64 { pub const fn abs(self) -> f64 {
// SAFETY: this is actually a safe intrinsic // SAFETY: this is actually a safe intrinsic
@ -1459,7 +1458,7 @@ impl f64 {
/// ``` /// ```
#[must_use = "method returns a new number and does not mutate the original value"] #[must_use = "method returns a new number and does not mutate the original value"]
#[stable(feature = "rust1", since = "1.0.0")] #[stable(feature = "rust1", since = "1.0.0")]
#[rustc_const_unstable(feature = "const_float_methods", issue = "130843")] #[rustc_const_stable(feature = "const_float_methods", since = "CURRENT_RUSTC_VERSION")]
#[inline] #[inline]
pub const fn signum(self) -> f64 { pub const fn signum(self) -> f64 {
if self.is_nan() { Self::NAN } else { 1.0_f64.copysign(self) } if self.is_nan() { Self::NAN } else { 1.0_f64.copysign(self) }
@ -1493,7 +1492,7 @@ impl f64 {
/// ``` /// ```
#[must_use = "method returns a new number and does not mutate the original value"] #[must_use = "method returns a new number and does not mutate the original value"]
#[stable(feature = "copysign", since = "1.35.0")] #[stable(feature = "copysign", since = "1.35.0")]
#[rustc_const_unstable(feature = "const_float_methods", issue = "130843")] #[rustc_const_stable(feature = "const_float_methods", since = "CURRENT_RUSTC_VERSION")]
#[inline] #[inline]
pub const fn copysign(self, sign: f64) -> f64 { pub const fn copysign(self, sign: f64) -> f64 {
// SAFETY: this is actually a safe intrinsic // SAFETY: this is actually a safe intrinsic

View file

@ -288,7 +288,6 @@
#![feature(cfg_target_thread_local)] #![feature(cfg_target_thread_local)]
#![feature(cfi_encoding)] #![feature(cfi_encoding)]
#![feature(concat_idents)] #![feature(concat_idents)]
#![feature(const_float_methods)]
#![feature(decl_macro)] #![feature(decl_macro)]
#![feature(deprecated_suggestion)] #![feature(deprecated_suggestion)]
#![feature(doc_cfg)] #![feature(doc_cfg)]

View file

@ -1,7 +1,6 @@
//@ run-pass //@ run-pass
//! Tests the float intrinsics: min, max, abs, copysign //! Tests the float intrinsics: min, max, abs, copysign
#![feature(const_float_methods)]
#![feature(f16, f128)] #![feature(f16, f128)]
const F16_MIN: f16 = 1.0_f16.min(0.5_f16); const F16_MIN: f16 = 1.0_f16.min(0.5_f16);