diff options
| author | Dylan DPC <dylan.dpc@gmail.com> | 2021-05-10 16:15:02 +0200 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2021-05-10 16:15:02 +0200 |
| commit | 7107c899700e8141b53eddbd5d9e93a6267cb691 (patch) | |
| tree | 086b20361b5bde316d038d9c799af9f6481a5e3c | |
| parent | 37c603864e4809cc575078971de39959a0e18c07 (diff) | |
| parent | e6b12c8e4f7817d6317ab7b981e440f260a8137e (diff) | |
| download | rust-7107c899700e8141b53eddbd5d9e93a6267cb691.tar.gz rust-7107c899700e8141b53eddbd5d9e93a6267cb691.zip | |
Rollup merge of #85096 - clarfonthey:const_unchecked, r=oli-obk
Make unchecked_{add,sub,mul} inherent methods unstably const
The intrinsics are marked as being stably const (even though they're not stable by nature of being intrinsics), but the currently-unstable inherent versions are not marked as const. This fixes this inconsistency. Split out of #85017,
r? `@oli-obk`
| -rw-r--r-- | library/core/src/iter/range.rs | 4 | ||||
| -rw-r--r-- | library/core/src/lib.rs | 1 | ||||
| -rw-r--r-- | library/core/src/num/int_macros.rs | 15 | ||||
| -rw-r--r-- | library/core/src/num/uint_macros.rs | 15 | ||||
| -rw-r--r-- | src/tools/tidy/src/features.rs | 14 |
5 files changed, 33 insertions, 16 deletions
diff --git a/library/core/src/iter/range.rs b/library/core/src/iter/range.rs index 4b293c596e7..5e39e71252f 100644 --- a/library/core/src/iter/range.rs +++ b/library/core/src/iter/range.rs @@ -106,7 +106,7 @@ pub unsafe trait Step: Clone + PartialOrd + Sized { /// For any `a` and `n`, where no overflow occurs: /// /// * `Step::forward_unchecked(a, n)` is equivalent to `Step::forward(a, n)` - #[unstable(feature = "unchecked_math", reason = "niche optimization path", issue = "none")] + #[unstable(feature = "step_trait_ext", reason = "recently added", issue = "42168")] unsafe fn forward_unchecked(start: Self, count: usize) -> Self { Step::forward(start, count) } @@ -178,7 +178,7 @@ pub unsafe trait Step: Clone + PartialOrd + Sized { /// For any `a` and `n`, where no overflow occurs: /// /// * `Step::backward_unchecked(a, n)` is equivalent to `Step::backward(a, n)` - #[unstable(feature = "unchecked_math", reason = "niche optimization path", issue = "none")] + #[unstable(feature = "step_trait_ext", reason = "recently added", issue = "42168")] unsafe fn backward_unchecked(start: Self, count: usize) -> Self { Step::backward(start, count) } diff --git a/library/core/src/lib.rs b/library/core/src/lib.rs index 07bf47b9c6f..6a4f2d5a544 100644 --- a/library/core/src/lib.rs +++ b/library/core/src/lib.rs @@ -77,6 +77,7 @@ #![feature(const_float_classify)] #![feature(const_float_bits_conv)] #![feature(const_int_unchecked_arith)] +#![feature(const_inherent_unchecked_arith)] #![feature(const_mut_refs)] #![feature(const_refs_to_cell)] #![feature(const_panic)] diff --git a/library/core/src/num/int_macros.rs b/library/core/src/num/int_macros.rs index 4b341132e31..47b2b30563c 100644 --- a/library/core/src/num/int_macros.rs +++ b/library/core/src/num/int_macros.rs @@ -412,12 +412,13 @@ macro_rules! int_impl { #[unstable( feature = "unchecked_math", reason = "niche optimization path", - issue = "none", + issue = "85122", )] #[must_use = "this returns the result of the operation, \ without modifying the original"] + #[rustc_const_unstable(feature = "const_inherent_unchecked_arith", issue = "85122")] #[inline(always)] - pub unsafe fn unchecked_add(self, rhs: Self) -> Self { + pub const unsafe fn unchecked_add(self, rhs: Self) -> Self { // SAFETY: the caller must uphold the safety contract for // `unchecked_add`. unsafe { intrinsics::unchecked_add(self, rhs) } @@ -450,12 +451,13 @@ macro_rules! int_impl { #[unstable( feature = "unchecked_math", reason = "niche optimization path", - issue = "none", + issue = "85122", )] #[must_use = "this returns the result of the operation, \ without modifying the original"] + #[rustc_const_unstable(feature = "const_inherent_unchecked_arith", issue = "85122")] #[inline(always)] - pub unsafe fn unchecked_sub(self, rhs: Self) -> Self { + pub const unsafe fn unchecked_sub(self, rhs: Self) -> Self { // SAFETY: the caller must uphold the safety contract for // `unchecked_sub`. unsafe { intrinsics::unchecked_sub(self, rhs) } @@ -488,12 +490,13 @@ macro_rules! int_impl { #[unstable( feature = "unchecked_math", reason = "niche optimization path", - issue = "none", + issue = "85122", )] #[must_use = "this returns the result of the operation, \ without modifying the original"] + #[rustc_const_unstable(feature = "const_inherent_unchecked_arith", issue = "85122")] #[inline(always)] - pub unsafe fn unchecked_mul(self, rhs: Self) -> Self { + pub const unsafe fn unchecked_mul(self, rhs: Self) -> Self { // SAFETY: the caller must uphold the safety contract for // `unchecked_mul`. unsafe { intrinsics::unchecked_mul(self, rhs) } diff --git a/library/core/src/num/uint_macros.rs b/library/core/src/num/uint_macros.rs index 08d9161eff1..f9fd28b6a8c 100644 --- a/library/core/src/num/uint_macros.rs +++ b/library/core/src/num/uint_macros.rs @@ -422,12 +422,13 @@ macro_rules! uint_impl { #[unstable( feature = "unchecked_math", reason = "niche optimization path", - issue = "none", + issue = "85122", )] #[must_use = "this returns the result of the operation, \ without modifying the original"] + #[rustc_const_unstable(feature = "const_inherent_unchecked_arith", issue = "85122")] #[inline(always)] - pub unsafe fn unchecked_add(self, rhs: Self) -> Self { + pub const unsafe fn unchecked_add(self, rhs: Self) -> Self { // SAFETY: the caller must uphold the safety contract for // `unchecked_add`. unsafe { intrinsics::unchecked_add(self, rhs) } @@ -460,12 +461,13 @@ macro_rules! uint_impl { #[unstable( feature = "unchecked_math", reason = "niche optimization path", - issue = "none", + issue = "85122", )] #[must_use = "this returns the result of the operation, \ without modifying the original"] + #[rustc_const_unstable(feature = "const_inherent_unchecked_arith", issue = "85122")] #[inline(always)] - pub unsafe fn unchecked_sub(self, rhs: Self) -> Self { + pub const unsafe fn unchecked_sub(self, rhs: Self) -> Self { // SAFETY: the caller must uphold the safety contract for // `unchecked_sub`. unsafe { intrinsics::unchecked_sub(self, rhs) } @@ -498,12 +500,13 @@ macro_rules! uint_impl { #[unstable( feature = "unchecked_math", reason = "niche optimization path", - issue = "none", + issue = "85122", )] #[must_use = "this returns the result of the operation, \ without modifying the original"] + #[rustc_const_unstable(feature = "const_inherent_unchecked_arith", issue = "85122")] #[inline(always)] - pub unsafe fn unchecked_mul(self, rhs: Self) -> Self { + pub const unsafe fn unchecked_mul(self, rhs: Self) -> Self { // SAFETY: the caller must uphold the safety contract for // `unchecked_mul`. unsafe { intrinsics::unchecked_mul(self, rhs) } diff --git a/src/tools/tidy/src/features.rs b/src/tools/tidy/src/features.rs index b14b5aeb572..a7e700b935e 100644 --- a/src/tools/tidy/src/features.rs +++ b/src/tools/tidy/src/features.rs @@ -51,6 +51,14 @@ pub struct Feature { pub has_gate_test: bool, pub tracking_issue: Option<NonZeroU32>, } +impl Feature { + fn tracking_issue_display(&self) -> impl fmt::Display { + match self.tracking_issue { + None => "none".to_string(), + Some(x) => x.to_string(), + } + } +} pub type Features = HashMap<String, Feature>; @@ -361,10 +369,12 @@ fn get_and_check_lib_features( if f.tracking_issue != s.tracking_issue && f.level != Status::Stable { tidy_error!( bad, - "{}:{}: mismatches the `issue` in {}", + "{}:{}: `issue` \"{}\" mismatches the {} `issue` of \"{}\"", file.display(), line, - display + f.tracking_issue_display(), + display, + s.tracking_issue_display(), ); } } |
