Rollup merge of #95354 - dtolnay:rustc_const_stable, r=lcnr
Handle rustc_const_stable attribute in library feature collector
The library feature collector in [compiler/rustc_passes/src/lib_features.rs](551b4fa395/compiler/rustc_passes/src/lib_features.rs
) has only been looking at `#[stable(…)]`, `#[unstable(…)]`, and `#[rustc_const_unstable(…)]` attributes, while ignoring `#[rustc_const_stable(…)]`. The consequences of this were:
- When any const feature got stabilized (changing one or more `rustc_const_unstable` to `rustc_const_stable`), users who had previously enabled that unstable feature using `#![feature(…)]` would get told "unknown feature", rather than rustc's nicer "the feature … has been stable since … and no longer requires an attribute to enable".
This can be seen in the way that https://github.com/rust-lang/rust/pull/93957#issuecomment-1079794660 failed after rebase:
```console
error[E0635]: unknown feature `const_ptr_offset`
--> $DIR/offset_from_ub.rs:1:35
|
LL | #![feature(const_ptr_offset_from, const_ptr_offset)]
| ^^^^^^^^^^^^^^^^
```
- We weren't enforcing that a particular feature is either stable everywhere or unstable everywhere, and that a feature that has been stabilized has the same stabilization version everywhere, both of which we enforce for the other stability attributes.
This PR updates the library feature collector to handle `rustc_const_stable`, and fixes places in the standard library and test suite where `rustc_const_stable` was being used in a way that does not meet the rules for a stability attribute.
This commit is contained in:
commit
d7a24003d8
21 changed files with 69 additions and 68 deletions
|
@ -2498,7 +2498,7 @@ macro_rules! atomic_int_ptr_sized {
|
|||
stable(feature = "atomic_access", since = "1.15.0"),
|
||||
stable(feature = "atomic_from", since = "1.23.0"),
|
||||
stable(feature = "atomic_nand", since = "1.27.0"),
|
||||
rustc_const_stable(feature = "const_integer_atomics", since = "1.24.0"),
|
||||
rustc_const_stable(feature = "const_ptr_sized_atomics", since = "1.24.0"),
|
||||
stable(feature = "rust1", since = "1.0.0"),
|
||||
"isize",
|
||||
"",
|
||||
|
@ -2518,7 +2518,7 @@ macro_rules! atomic_int_ptr_sized {
|
|||
stable(feature = "atomic_access", since = "1.15.0"),
|
||||
stable(feature = "atomic_from", since = "1.23.0"),
|
||||
stable(feature = "atomic_nand", since = "1.27.0"),
|
||||
rustc_const_stable(feature = "const_integer_atomics", since = "1.24.0"),
|
||||
rustc_const_stable(feature = "const_ptr_sized_atomics", since = "1.24.0"),
|
||||
stable(feature = "rust1", since = "1.0.0"),
|
||||
"usize",
|
||||
"",
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue