about summary refs log tree commit diff
path: root/src/test
diff options
context:
space:
mode:
authorDylan DPC <99973273+Dylan-DPC@users.noreply.github.com>2022-04-02 03:34:21 +0200
committerGitHub <noreply@github.com>2022-04-02 03:34:21 +0200
commitd7a24003d865cb3e17f82073c1ba8cbe6e7dea02 (patch)
treea5c7414f48d1282a3679649737045df6289314d8 /src/test
parenteb82facb1626166188d49599a3313fc95201f556 (diff)
parent971ecff70fbaea5f43f979289e9becd5d4fc4b48 (diff)
downloadrust-d7a24003d865cb3e17f82073c1ba8cbe6e7dea02.tar.gz
rust-d7a24003d865cb3e17f82073c1ba8cbe6e7dea02.zip
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](https://github.com/rust-lang/rust/blob/551b4fa395fa588d91cbecfb0cdfe1baa02670cf/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.
Diffstat (limited to 'src/test')
-rw-r--r--src/test/rustdoc/const-display.rs6
-rw-r--r--src/test/ui/consts/assert-type-intrinsics.rs2
-rw-r--r--src/test/ui/consts/const-eval/simd/insert_extract.rs2
3 files changed, 5 insertions, 5 deletions
diff --git a/src/test/rustdoc/const-display.rs b/src/test/rustdoc/const-display.rs
index e3f5d074783..8455dd9ef95 100644
--- a/src/test/rustdoc/const-display.rs
+++ b/src/test/rustdoc/const-display.rs
@@ -64,7 +64,7 @@ impl Foo {
     // @has 'foo/struct.Foo.html' '//*[@id="method.stable_impl"]/h4[@class="code-header"]' 'pub const fn stable_impl() -> u32'
     // @has - '//span[@class="since"]' '1.0.0 (const: 1.2.0)'
     #[stable(feature = "rust1", since = "1.0.0")]
-    #[rustc_const_stable(feature = "rust1", since = "1.2.0")]
+    #[rustc_const_stable(feature = "const2", since = "1.2.0")]
     pub const fn stable_impl() -> u32 { 42 }
 }
 
@@ -75,12 +75,12 @@ impl Bar {
     // Do not show non-const stabilities that are the same as the enclosing item.
     // @matches 'foo/struct.Bar.html' '//span[@class="since"]' '^const: 1.2.0$'
     #[stable(feature = "rust1", since = "1.0.0")]
-    #[rustc_const_stable(feature = "rust1", since = "1.2.0")]
+    #[rustc_const_stable(feature = "const2", since = "1.2.0")]
     pub const fn stable_impl() -> u32 { 42 }
 
     // Show const-stability even for unstable functions.
     // @matches 'foo/struct.Bar.html' '//span[@class="since"]' '^const: 1.3.0$'
     #[unstable(feature = "foo2", issue = "none")]
-    #[rustc_const_stable(feature = "rust1", since = "1.3.0")]
+    #[rustc_const_stable(feature = "const3", since = "1.3.0")]
     pub const fn const_stable_unstable() -> u32 { 42 }
 }
diff --git a/src/test/ui/consts/assert-type-intrinsics.rs b/src/test/ui/consts/assert-type-intrinsics.rs
index 31ff6aed03b..38e5c454edf 100644
--- a/src/test/ui/consts/assert-type-intrinsics.rs
+++ b/src/test/ui/consts/assert-type-intrinsics.rs
@@ -1,7 +1,7 @@
 // error-pattern: any use of this value will cause an error
 
 #![feature(never_type)]
-#![feature(const_maybe_uninit_assume_init, const_assert_type2)]
+#![feature(const_assert_type2)]
 #![feature(core_intrinsics)]
 
 use std::intrinsics;
diff --git a/src/test/ui/consts/const-eval/simd/insert_extract.rs b/src/test/ui/consts/const-eval/simd/insert_extract.rs
index a1d6c5e51b4..3472c05d12f 100644
--- a/src/test/ui/consts/const-eval/simd/insert_extract.rs
+++ b/src/test/ui/consts/const-eval/simd/insert_extract.rs
@@ -2,7 +2,7 @@
 #![feature(repr_simd)]
 #![feature(platform_intrinsics)]
 #![feature(staged_api)]
-#![stable(feature = "foo", since = "1.33.7")]
+#![stable(feature = "foo", since = "1.3.37")]
 #![allow(non_camel_case_types)]
 
 #[repr(simd)] struct i8x1(i8);