Skip to content

Note the version and PR of removed features when using it #141642

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 3 commits into from
Jun 10, 2025
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions compiler/rustc_expand/messages.ftl
Original file line number Diff line number Diff line change
Expand Up @@ -62,6 +62,7 @@ expand_feature_not_allowed =
expand_feature_removed =
feature has been removed
.label = feature has been removed
.note = removed in {$removed_rustc_version} (you are using {$current_rustc_version}){$pull_note}
.reason = {$reason}

expand_glob_delegation_outside_impls =
Expand Down
11 changes: 11 additions & 0 deletions compiler/rustc_expand/src/config.rs
Original file line number Diff line number Diff line change
Expand Up @@ -80,9 +80,20 @@ pub fn features(sess: &Session, krate_attrs: &[Attribute], crate_name: Symbol) -

// If the enabled feature has been removed, issue an error.
if let Some(f) = REMOVED_LANG_FEATURES.iter().find(|f| name == f.feature.name) {
let pull_note = if let Some(pull) = f.pull {
format!(
"; see <https://github.com/rust-lang/rust/pull/{}> for more information",
pull
)
} else {
"".to_owned()
};
sess.dcx().emit_err(FeatureRemoved {
span: mi.span(),
reason: f.reason.map(|reason| FeatureRemovedReason { reason }),
removed_rustc_version: f.feature.since,
current_rustc_version: sess.cfg_version,
pull_note,
});
continue;
}
Expand Down
4 changes: 4 additions & 0 deletions compiler/rustc_expand/src/errors.rs
Original file line number Diff line number Diff line change
Expand Up @@ -154,12 +154,16 @@ pub(crate) struct HelperAttributeNameInvalid {

#[derive(Diagnostic)]
#[diag(expand_feature_removed, code = E0557)]
#[note]
pub(crate) struct FeatureRemoved<'a> {
#[primary_span]
#[label]
pub span: Span,
#[subdiagnostic]
pub reason: Option<FeatureRemovedReason<'a>>,
pub removed_rustc_version: &'a str,
pub current_rustc_version: &'a str,
pub pull_note: String,
}

#[derive(Subdiagnostic)]
Expand Down
182 changes: 98 additions & 84 deletions compiler/rustc_feature/src/removed.rs

Large diffs are not rendered by default.

2 changes: 2 additions & 0 deletions tests/ui/deprecation/deprecated_no_stack_check.rs
Original file line number Diff line number Diff line change
@@ -1,3 +1,5 @@
//@ normalize-stderr: "you are using [0-9]+\.[0-9]+\.[0-9]+(-[a-zA-Z0-9]+)?( \([^)]*\))?" -> "you are using $$RUSTC_VERSION"

#![deny(warnings)]
#![feature(no_stack_check)]
//~^ ERROR: feature has been removed [E0557]
Expand Down
4 changes: 3 additions & 1 deletion tests/ui/deprecation/deprecated_no_stack_check.stderr
Original file line number Diff line number Diff line change
@@ -1,8 +1,10 @@
error[E0557]: feature has been removed
--> $DIR/deprecated_no_stack_check.rs:2:12
--> $DIR/deprecated_no_stack_check.rs:4:12
|
LL | #![feature(no_stack_check)]
| ^^^^^^^^^^^^^^ feature has been removed
|
= note: removed in 1.0.0 (you are using $RUSTC_VERSION); see <https://github.com/rust-lang/rust/pull/40110> for more information

error: aborting due to 1 previous error

Expand Down
2 changes: 2 additions & 0 deletions tests/ui/feature-gates/feature-gate-coverage-attribute.rs
Original file line number Diff line number Diff line change
@@ -1,3 +1,5 @@
//@ normalize-stderr: "you are using [0-9]+\.[0-9]+\.[0-9]+(-[a-zA-Z0-9]+)?( \([^)]*\))?" -> "you are using $$RUSTC_VERSION"

#![crate_type = "lib"]
#![feature(no_coverage)] //~ ERROR feature has been removed [E0557]

Expand Down
5 changes: 3 additions & 2 deletions tests/ui/feature-gates/feature-gate-coverage-attribute.stderr
Original file line number Diff line number Diff line change
@@ -1,13 +1,14 @@
error[E0557]: feature has been removed
--> $DIR/feature-gate-coverage-attribute.rs:2:12
--> $DIR/feature-gate-coverage-attribute.rs:4:12
|
LL | #![feature(no_coverage)]
| ^^^^^^^^^^^ feature has been removed
|
= note: removed in 1.74.0 (you are using $RUSTC_VERSION); see <https://github.com/rust-lang/rust/pull/114656> for more information
= note: renamed to `coverage_attribute`

error[E0658]: the `#[coverage]` attribute is an experimental feature
--> $DIR/feature-gate-coverage-attribute.rs:10:1
--> $DIR/feature-gate-coverage-attribute.rs:12:1
|
LL | #[coverage(off)]
| ^^^^^^^^^^^^^^^^
Expand Down
1 change: 1 addition & 0 deletions tests/ui/feature-gates/gated-bad-feature.rs
Original file line number Diff line number Diff line change
@@ -1,3 +1,4 @@
//@ normalize-stderr: "you are using [0-9]+\.[0-9]+\.[0-9]+(-[a-zA-Z0-9]+)?( \([^)]*\))?" -> "you are using $$RUSTC_VERSION"
#![feature(foo_bar_baz, foo(bar), foo = "baz", foo)]
//~^ ERROR malformed `feature`
//~| ERROR malformed `feature`
Expand Down
16 changes: 9 additions & 7 deletions tests/ui/feature-gates/gated-bad-feature.stderr
Original file line number Diff line number Diff line change
@@ -1,41 +1,43 @@
error[E0556]: malformed `feature` attribute input
--> $DIR/gated-bad-feature.rs:1:25
--> $DIR/gated-bad-feature.rs:2:25
|
LL | #![feature(foo_bar_baz, foo(bar), foo = "baz", foo)]
| ^^^^^^^^ help: expected just one word: `foo`

error[E0556]: malformed `feature` attribute input
--> $DIR/gated-bad-feature.rs:1:35
--> $DIR/gated-bad-feature.rs:2:35
|
LL | #![feature(foo_bar_baz, foo(bar), foo = "baz", foo)]
| ^^^^^^^^^^^ help: expected just one word: `foo`

error[E0557]: feature has been removed
--> $DIR/gated-bad-feature.rs:8:12
--> $DIR/gated-bad-feature.rs:9:12
|
LL | #![feature(test_removed_feature)]
| ^^^^^^^^^^^^^^^^^^^^ feature has been removed
|
= note: removed in 1.0.0 (you are using $RUSTC_VERSION)

error: malformed `feature` attribute input
--> $DIR/gated-bad-feature.rs:6:1
--> $DIR/gated-bad-feature.rs:7:1
|
LL | #![feature]
| ^^^^^^^^^^^ help: must be of the form: `#![feature(name1, name2, ...)]`

error: malformed `feature` attribute input
--> $DIR/gated-bad-feature.rs:7:1
--> $DIR/gated-bad-feature.rs:8:1
|
LL | #![feature = "foo"]
| ^^^^^^^^^^^^^^^^^^^ help: must be of the form: `#![feature(name1, name2, ...)]`

error[E0635]: unknown feature `foo_bar_baz`
--> $DIR/gated-bad-feature.rs:1:12
--> $DIR/gated-bad-feature.rs:2:12
|
LL | #![feature(foo_bar_baz, foo(bar), foo = "baz", foo)]
| ^^^^^^^^^^^

error[E0635]: unknown feature `foo`
--> $DIR/gated-bad-feature.rs:1:48
--> $DIR/gated-bad-feature.rs:2:48
|
LL | #![feature(foo_bar_baz, foo(bar), foo = "baz", foo)]
| ^^^
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
//@ normalize-stderr: "you are using [0-9]+\.[0-9]+\.[0-9]+(-[a-zA-Z0-9]+)?( \([^)]*\))?" -> "you are using $$RUSTC_VERSION"

#![feature(external_doc)] //~ ERROR feature has been removed
#![doc(include("README.md"))] //~ ERROR unknown `doc` attribute `include`

fn main(){}
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
error[E0557]: feature has been removed
--> $DIR/removed-features-note-version-and-pr-issue-141619.rs:3:12
|
LL | #![feature(external_doc)]
| ^^^^^^^^^^^^ feature has been removed
|
= note: removed in 1.54.0 (you are using $RUSTC_VERSION); see <https://github.com/rust-lang/rust/pull/85457> for more information
= note: use #[doc = include_str!("filename")] instead, which handles macro invocations

error: unknown `doc` attribute `include`
--> $DIR/removed-features-note-version-and-pr-issue-141619.rs:4:8
|
LL | #![doc(include("README.md"))]
| ^^^^^^^^^^^^^^^^^^^^
|
= note: `#[deny(invalid_doc_attributes)]` on by default

error: aborting due to 2 previous errors

For more information about this error, try `rustc --explain E0557`.
1 change: 1 addition & 0 deletions tests/ui/macros/macro-reexport-removed.rs
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
//@ aux-build:two_macros.rs
//@ normalize-stderr: "you are using [0-9]+\.[0-9]+\.[0-9]+(-[a-zA-Z0-9]+)?( \([^)]*\))?" -> "you are using $$RUSTC_VERSION"

#![feature(macro_reexport)] //~ ERROR feature has been removed

Expand Down
5 changes: 3 additions & 2 deletions tests/ui/macros/macro-reexport-removed.stderr
Original file line number Diff line number Diff line change
@@ -1,13 +1,14 @@
error[E0557]: feature has been removed
--> $DIR/macro-reexport-removed.rs:3:12
--> $DIR/macro-reexport-removed.rs:4:12
|
LL | #![feature(macro_reexport)]
| ^^^^^^^^^^^^^^ feature has been removed
|
= note: removed in 1.0.0 (you are using $RUSTC_VERSION); see <https://github.com/rust-lang/rust/pull/49982> for more information
= note: subsumed by `pub use`

error: cannot find attribute `macro_reexport` in this scope
--> $DIR/macro-reexport-removed.rs:5:3
--> $DIR/macro-reexport-removed.rs:6:3
|
LL | #[macro_reexport(macro_one)]
| ^^^^^^^^^^^^^^ help: a built-in attribute with a similar name exists: `macro_export`
Expand Down
2 changes: 2 additions & 0 deletions tests/ui/rustdoc/renamed-features-rustdoc_internals.rs
Original file line number Diff line number Diff line change
@@ -1,3 +1,5 @@
//@ normalize-stderr: "you are using [0-9]+\.[0-9]+\.[0-9]+(-[a-zA-Z0-9]+)?( \([^)]*\))?" -> "you are using $$RUSTC_VERSION"

#![feature(doc_keyword)] //~ ERROR
#![feature(doc_primitive)] //~ ERROR
#![crate_type = "lib"]
Expand Down
6 changes: 4 additions & 2 deletions tests/ui/rustdoc/renamed-features-rustdoc_internals.stderr
Original file line number Diff line number Diff line change
@@ -1,17 +1,19 @@
error[E0557]: feature has been removed
--> $DIR/renamed-features-rustdoc_internals.rs:1:12
--> $DIR/renamed-features-rustdoc_internals.rs:3:12
|
LL | #![feature(doc_keyword)]
| ^^^^^^^^^^^ feature has been removed
|
= note: removed in 1.58.0 (you are using $RUSTC_VERSION); see <https://github.com/rust-lang/rust/pull/90420> for more information
= note: merged into `#![feature(rustdoc_internals)]`

error[E0557]: feature has been removed
--> $DIR/renamed-features-rustdoc_internals.rs:2:12
--> $DIR/renamed-features-rustdoc_internals.rs:4:12
|
LL | #![feature(doc_primitive)]
| ^^^^^^^^^^^^^ feature has been removed
|
= note: removed in 1.58.0 (you are using $RUSTC_VERSION); see <https://github.com/rust-lang/rust/pull/90420> for more information
= note: merged into `#![feature(rustdoc_internals)]`

error: aborting due to 2 previous errors
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@
// Regression test for issue #125877.

//@ compile-flags: -Znext-solver
//@ normalize-stderr: "you are using [0-9]+\.[0-9]+\.[0-9]+(-[a-zA-Z0-9]+)?( \([^)]*\))?" -> "you are using $$RUSTC_VERSION"

#![feature(const_trait_impl, effects)]
//~^ ERROR feature has been removed
Expand Down
Original file line number Diff line number Diff line change
@@ -1,13 +1,14 @@
error[E0557]: feature has been removed
--> $DIR/const-trait-impl-parameter-mismatch.rs:10:30
--> $DIR/const-trait-impl-parameter-mismatch.rs:11:30
|
LL | #![feature(const_trait_impl, effects)]
| ^^^^^^^ feature has been removed
|
= note: removed in 1.84.0 (you are using $RUSTC_VERSION); see <https://github.com/rust-lang/rust/pull/132479> for more information
= note: removed, redundant with `#![feature(const_trait_impl)]`

error[E0049]: associated function `compute` has 0 type parameters but its trait declaration has 1 type parameter
--> $DIR/const-trait-impl-parameter-mismatch.rs:19:16
--> $DIR/const-trait-impl-parameter-mismatch.rs:20:16
|
LL | fn compute<T: ~const Aux>() -> u32;
| - expected 1 type parameter
Expand Down
Loading