Rollup merge of #153622 - RalfJung:rm-soft-unstable, r=JonathanBrouwer

remove concept of soft-unstable features

Implements https://github.com/rust-lang/compiler-team/issues/972

@rust-lang/libs-api last chance to speak up before this feature is gone :)

Fixes https://github.com/rust-lang/rust/issues/153572
Fixes https://github.com/rust-lang/rust/issues/64266
This commit is contained in:
Jonathan Brouwer
2026-03-17 17:51:32 +01:00
committed by GitHub
20 changed files with 118 additions and 217 deletions
@@ -376,7 +376,6 @@ pub(crate) fn parse_unstability<S: Stage>(
let mut reason = None;
let mut issue = None;
let mut issue_num = None;
let mut is_soft = false;
let mut implied_by = None;
let mut old_name = None;
@@ -423,12 +422,6 @@ pub(crate) fn parse_unstability<S: Stage>(
},
};
}
Some(sym::soft) => {
if let Err(span) = args.no_args() {
cx.emit_err(session_diagnostics::SoftNoArgs { span });
}
is_soft = true;
}
Some(sym::implied_by) => {
insert_value_into_option_or_error(cx, &param, &mut implied_by, word.unwrap())?
}
@@ -438,14 +431,7 @@ pub(crate) fn parse_unstability<S: Stage>(
_ => {
cx.expected_specific_argument(
param.span(),
&[
sym::feature,
sym::reason,
sym::issue,
sym::soft,
sym::implied_by,
sym::old_name,
],
&[sym::feature, sym::reason, sym::issue, sym::implied_by, sym::old_name],
);
return None;
}
@@ -468,7 +454,6 @@ pub(crate) fn parse_unstability<S: Stage>(
let level = StabilityLevel::Unstable {
reason: UnstableReason::from_opt_reason(reason),
issue: issue_num,
is_soft,
implied_by,
old_name,
};
@@ -374,13 +374,6 @@ pub(crate) struct InvalidSince {
pub span: Span,
}
#[derive(Diagnostic)]
#[diag("`soft` should not have any arguments")]
pub(crate) struct SoftNoArgs {
#[primary_span]
pub span: Span,
}
#[derive(Diagnostic)]
#[diag("unknown version literal format, assuming it refers to a future version")]
pub(crate) struct UnknownVersionLiteral {
-1
View File
@@ -112,7 +112,6 @@ pub enum StabilityLevel {
reason: UnstableReason,
/// Relevant `rust-lang/rust` issue.
issue: Option<NonZero<u32>>,
is_soft: bool,
/// If part of a feature is stabilized and a new feature is added for the remaining parts,
/// then the `implied_by` attribute is used to indicate which now-stable feature previously
/// contained an item.
+1
View File
@@ -642,6 +642,7 @@ macro_rules! add_lint_group {
see <https://github.com/rust-lang/rust/issues/40107> for more information",
);
store.register_removed("wasm_c_abi", "the wasm C ABI has been fixed");
store.register_removed("soft_unstable", "the general soft-unstable mechanism has been removed");
}
fn register_internals(store: &mut LintStore) {
-17
View File
@@ -106,7 +106,6 @@
SEMICOLON_IN_EXPRESSIONS_FROM_MACROS,
SHADOWING_SUPERTRAIT_ITEMS,
SINGLE_USE_LIFETIMES,
SOFT_UNSTABLE,
STABLE_FEATURES,
TAIL_EXPR_DROP_ORDER,
TEST_UNSTABLE_LINT,
@@ -2345,22 +2344,6 @@
};
}
declare_lint! {
/// The `soft_unstable` lint detects unstable features that were unintentionally allowed on
/// stable. This is a [future-incompatible] lint to transition this to a hard error in the
/// future. See [issue #64266] for more details.
///
/// [issue #64266]: https://github.com/rust-lang/rust/issues/64266
/// [future-incompatible]: ../index.md#future-incompatible-lints
pub SOFT_UNSTABLE,
Deny,
"a feature gate that doesn't break dependent crates",
@future_incompatible = FutureIncompatibleInfo {
reason: fcw!(FutureReleaseError #64266),
report_in_deps: true,
};
}
declare_lint! {
/// The `inline_no_sanitize` lint detects incompatible use of
/// [`#[inline(always)]`][inline] and [`#[sanitize(xyz = "off")]`][sanitize].
+13 -43
View File
@@ -11,7 +11,7 @@
use rustc_hir::{self as hir, ConstStability, DefaultBodyStability, HirId, Stability};
use rustc_macros::{Decodable, Encodable, HashStable, Subdiagnostic};
use rustc_session::Session;
use rustc_session::lint::builtin::{DEPRECATED, DEPRECATED_IN_FUTURE, SOFT_UNSTABLE};
use rustc_session::lint::builtin::{DEPRECATED, DEPRECATED_IN_FUTURE};
use rustc_session::lint::{BuiltinLintDiag, DeprecatedSinceKind, Level, Lint};
use rustc_session::parse::feature_err_issue;
use rustc_span::{Span, Symbol, sym};
@@ -68,9 +68,7 @@ pub fn report_unstable(
reason: Option<Symbol>,
issue: Option<NonZero<u32>>,
suggestion: Option<(Span, String, String, Applicability)>,
is_soft: bool,
span: Span,
soft_handler: impl FnOnce(&'static Lint, Span, String),
kind: UnstableKind,
) {
let qual = match kind {
@@ -83,18 +81,14 @@ pub fn report_unstable(
None => format!("use of unstable{qual} library feature `{feature}`"),
};
if is_soft {
soft_handler(SOFT_UNSTABLE, span, msg)
} else {
let mut err = feature_err_issue(sess, feature, span, GateIssue::Library(issue), msg);
if let Some((inner_types, msg, sugg, applicability)) = suggestion {
err.span_suggestion(inner_types, msg, sugg, applicability);
}
if let UnstableKind::Const(kw) = kind {
err.span_label(kw, "trait is not stable as const yet");
}
err.emit();
let mut err = feature_err_issue(sess, feature, span, GateIssue::Library(issue), msg);
if let Some((inner_types, msg, sugg, applicability)) = suggestion {
err.span_suggestion(inner_types, msg, sugg, applicability);
}
if let UnstableKind::Const(kw) = kind {
err.span_label(kw, "trait is not stable as const yet");
}
err.emit();
}
fn deprecation_lint(is_in_effect: bool) -> &'static Lint {
@@ -266,7 +260,6 @@ pub enum EvalResult {
reason: Option<Symbol>,
issue: Option<NonZero<u32>>,
suggestion: Option<(Span, String, String, Applicability)>,
is_soft: bool,
},
/// The item does not have the `#[stable]` or `#[unstable]` marker assigned.
Unmarked,
@@ -386,7 +379,7 @@ pub fn eval_stability_allow_unstable(
match stability {
Some(Stability {
level: hir::StabilityLevel::Unstable { reason, issue, is_soft, implied_by, .. },
level: hir::StabilityLevel::Unstable { reason, issue, implied_by, .. },
feature,
..
}) => {
@@ -428,13 +421,7 @@ pub fn eval_stability_allow_unstable(
}
let suggestion = suggestion_for_allocator_api(self, def_id, span, feature);
EvalResult::Deny {
feature,
reason: reason.to_opt_reason(),
issue,
suggestion,
is_soft,
}
EvalResult::Deny { feature, reason: reason.to_opt_reason(), issue, suggestion }
}
Some(_) => {
// Stable APIs are always ok to call and deprecated APIs are
@@ -469,7 +456,7 @@ pub fn eval_default_body_stability(self, def_id: DefId, span: Span) -> EvalResul
match stability {
Some(DefaultBodyStability {
level: hir::StabilityLevel::Unstable { reason, issue, is_soft, .. },
level: hir::StabilityLevel::Unstable { reason, issue, .. },
feature,
}) => {
if span.allows_unstable(feature) {
@@ -485,7 +472,6 @@ pub fn eval_default_body_stability(self, def_id: DefId, span: Span) -> EvalResul
reason: reason.to_opt_reason(),
issue,
suggestion: None,
is_soft,
}
}
Some(_) => {
@@ -563,30 +549,18 @@ pub fn check_optional_stability(
allow_unstable: AllowUnstable,
unmarked: impl FnOnce(Span, DefId),
) -> bool {
let soft_handler = |lint, span, msg: String| {
self.emit_node_span_lint(
lint,
id.unwrap_or(hir::CRATE_HIR_ID),
span,
rustc_errors::DiagDecorator(|lint| {
lint.primary_message(msg);
}),
);
};
let eval_result =
self.eval_stability_allow_unstable(def_id, id, span, method_span, allow_unstable);
let is_allowed = matches!(eval_result, EvalResult::Allow);
match eval_result {
EvalResult::Allow => {}
EvalResult::Deny { feature, reason, issue, suggestion, is_soft } => report_unstable(
EvalResult::Deny { feature, reason, issue, suggestion } => report_unstable(
self.sess,
feature,
reason,
issue,
suggestion,
is_soft,
span,
soft_handler,
UnstableKind::Regular,
),
EvalResult::Unmarked => unmarked(span, def_id),
@@ -623,12 +597,10 @@ pub fn check_const_stability(self, def_id: DefId, span: Span, const_kw_span: Spa
match stability {
Some(ConstStability {
level: hir::StabilityLevel::Unstable { reason, issue, is_soft, implied_by, .. },
level: hir::StabilityLevel::Unstable { reason, issue, implied_by, .. },
feature,
..
}) => {
assert!(!is_soft);
if span.allows_unstable(feature) {
debug!("body stability: skipping span={:?} since it is internal", span);
return;
@@ -652,9 +624,7 @@ pub fn check_const_stability(self, def_id: DefId, span: Span, const_kw_span: Spa
reason.to_opt_reason(),
issue,
None,
false,
span,
|_, _, _| {},
UnstableKind::Const(const_kw_span),
);
}
-1
View File
@@ -131,7 +131,6 @@ fn inherit_stability(def_kind: DefKind) -> bool {
level: StabilityLevel::Unstable {
reason: UnstableReason::Default,
issue: NonZero::new(27812),
is_soft: false,
implied_by: None,
old_name: None,
},
+1 -12
View File
@@ -1,7 +1,7 @@
use rustc_errors::codes::*;
use rustc_errors::formatting::DiagMessageAddArg;
use rustc_errors::{
Applicability, Diag, DiagCtxtHandle, DiagMessage, Diagnostic, ElidedLifetimeInPathSubdiag,
Applicability, Diag, DiagCtxtHandle, Diagnostic, ElidedLifetimeInPathSubdiag,
EmissionGuarantee, IntoDiagArg, Level, MultiSpan, Subdiagnostic, msg,
};
use rustc_macros::{Diagnostic, Subdiagnostic};
@@ -1453,17 +1453,6 @@ pub(crate) struct MacroRuleNeverUsed {
pub name: Symbol,
}
pub(crate) struct UnstableFeature {
pub msg: DiagMessage,
}
impl<'a> Diagnostic<'a, ()> for UnstableFeature {
fn into_diag(self, dcx: DiagCtxtHandle<'a>, level: Level) -> Diag<'a, ()> {
let Self { msg } = self;
Diag::new(dcx, level, msg)
}
}
#[derive(Diagnostic)]
#[diag("`extern crate` is not idiomatic in the new edition")]
pub(crate) struct ExternCrateNotIdiomatic {
+1 -14
View File
@@ -1064,8 +1064,7 @@ fn check_stability_and_deprecation(
) {
let span = path.span;
if let Some(stability) = &ext.stability
&& let StabilityLevel::Unstable { reason, issue, is_soft, implied_by, .. } =
stability.level
&& let StabilityLevel::Unstable { reason, issue, implied_by, .. } = stability.level
{
let feature = stability.feature;
@@ -1073,25 +1072,13 @@ fn check_stability_and_deprecation(
|feature| self.tcx.features().enabled(feature) || span.allows_unstable(feature);
let allowed_by_implication = implied_by.is_some_and(|feature| is_allowed(feature));
if !is_allowed(feature) && !allowed_by_implication {
let lint_buffer = &mut self.lint_buffer;
let soft_handler = |lint, span, msg: String| {
lint_buffer.buffer_lint(
lint,
node_id,
span,
// FIXME make this translatable
errors::UnstableFeature { msg: msg.into() },
)
};
stability::report_unstable(
self.tcx.sess,
feature,
reason.to_opt_reason(),
issue,
None,
is_soft,
span,
soft_handler,
stability::UnstableKind::Regular,
);
}
-1
View File
@@ -1915,7 +1915,6 @@
slice_len_fn,
slice_patterns,
slicing_syntax,
soft,
sparc,
sparc64,
sparc_target_feature,
+1 -1
View File
@@ -2430,7 +2430,7 @@ mod size_asserts {
static_assert_size!(GenericParamDef, 40);
static_assert_size!(Generics, 16);
static_assert_size!(Item, 8);
static_assert_size!(ItemInner, 144);
static_assert_size!(ItemInner, 136);
static_assert_size!(ItemKind, 48);
static_assert_size!(PathSegment, 32);
static_assert_size!(Type, 32);
@@ -1,6 +1,5 @@
// The non-crate level cases are in issue-43106-gating-of-builtin-attrs.rs.
#![allow(soft_unstable)]
#![test = "4200"]
//~^ ERROR `test` attribute cannot be used at crate level
fn main() {}
@@ -1,5 +1,5 @@
error: `test` attribute cannot be used at crate level
--> $DIR/issue-43106-gating-of-test.rs:4:1
--> $DIR/issue-43106-gating-of-test.rs:3:1
|
LL | #![test = "4200"]
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-1
View File
@@ -1,5 +1,4 @@
//@ compile-flags: --test
#![allow(soft_unstable)]
#![test]
//~^ ERROR `test` attribute cannot be used at crate level
+1 -1
View File
@@ -1,5 +1,5 @@
error: `test` attribute cannot be used at crate level
--> $DIR/issue-28134.rs:4:1
--> $DIR/issue-28134.rs:3:1
|
LL | #![test]
| ^^^^^^^^
+39 -39
View File
@@ -1,83 +1,83 @@
error: expected non-macro attribute, found attribute macro `derive`
--> $DIR/cfg_attribute.rs:32:7
--> $DIR/cfg_attribute.rs:31:7
|
LL | #[derive(Clone)] ():,
| ^^^^^^ not a non-macro attribute
error: expected non-macro attribute, found attribute macro `derive`
--> $DIR/cfg_attribute.rs:43:11
--> $DIR/cfg_attribute.rs:42:11
|
LL | #[derive(Clone)] ():,
| ^^^^^^ not a non-macro attribute
error: expected non-macro attribute, found attribute macro `derive`
--> $DIR/cfg_attribute.rs:54:11
--> $DIR/cfg_attribute.rs:53:11
|
LL | #[derive(Clone)] ():,
| ^^^^^^ not a non-macro attribute
error: expected non-macro attribute, found attribute macro `derive`
--> $DIR/cfg_attribute.rs:66:7
--> $DIR/cfg_attribute.rs:65:7
|
LL | #[derive(Clone)] ():,
| ^^^^^^ not a non-macro attribute
error: expected non-macro attribute, found attribute macro `derive`
--> $DIR/cfg_attribute.rs:76:11
--> $DIR/cfg_attribute.rs:75:11
|
LL | #[derive(Clone)] ():,
| ^^^^^^ not a non-macro attribute
error: expected non-macro attribute, found attribute macro `derive`
--> $DIR/cfg_attribute.rs:87:11
--> $DIR/cfg_attribute.rs:86:11
|
LL | #[derive(Clone)] ():,
| ^^^^^^ not a non-macro attribute
error: expected non-macro attribute, found attribute macro `derive`
--> $DIR/cfg_attribute.rs:100:7
--> $DIR/cfg_attribute.rs:99:7
|
LL | #[derive(Clone)] ():,
| ^^^^^^ not a non-macro attribute
error: expected non-macro attribute, found attribute macro `derive`
--> $DIR/cfg_attribute.rs:114:7
--> $DIR/cfg_attribute.rs:113:7
|
LL | #[derive(Clone)] ():,
| ^^^^^^ not a non-macro attribute
error: expected non-macro attribute, found attribute macro `derive`
--> $DIR/cfg_attribute.rs:129:7
--> $DIR/cfg_attribute.rs:128:7
|
LL | #[derive(Clone)] ():,
| ^^^^^^ not a non-macro attribute
error: expected non-macro attribute, found attribute macro `derive`
--> $DIR/cfg_attribute.rs:144:7
--> $DIR/cfg_attribute.rs:143:7
|
LL | #[derive(Clone)] ():,
| ^^^^^^ not a non-macro attribute
error: expected non-macro attribute, found attribute macro `derive`
--> $DIR/cfg_attribute.rs:155:7
--> $DIR/cfg_attribute.rs:154:7
|
LL | #[derive(Clone)] ():,
| ^^^^^^ not a non-macro attribute
error: expected non-macro attribute, found attribute macro `derive`
--> $DIR/cfg_attribute.rs:165:11
--> $DIR/cfg_attribute.rs:164:11
|
LL | #[derive(Clone)] ():,
| ^^^^^^ not a non-macro attribute
error: expected non-macro attribute, found attribute macro `derive`
--> $DIR/cfg_attribute.rs:178:7
--> $DIR/cfg_attribute.rs:177:7
|
LL | #[derive(Clone)] ():,
| ^^^^^^ not a non-macro attribute
error: most attributes are not supported in `where` clauses
--> $DIR/cfg_attribute.rs:32:5
--> $DIR/cfg_attribute.rs:31:5
|
LL | #[derive(Clone)] ():,
| ^^^^^^^^^^^^^^^^
@@ -85,7 +85,7 @@ LL | #[derive(Clone)] ():,
= help: only `#[cfg]` and `#[cfg_attr]` are supported
error: most attributes are not supported in `where` clauses
--> $DIR/cfg_attribute.rs:35:5
--> $DIR/cfg_attribute.rs:34:5
|
LL | #[rustfmt::skip] ():,
| ^^^^^^^^^^^^^^^^
@@ -93,7 +93,7 @@ LL | #[rustfmt::skip] ():,
= help: only `#[cfg]` and `#[cfg_attr]` are supported
error: most attributes are not supported in `where` clauses
--> $DIR/cfg_attribute.rs:66:5
--> $DIR/cfg_attribute.rs:65:5
|
LL | #[derive(Clone)] ():,
| ^^^^^^^^^^^^^^^^
@@ -101,7 +101,7 @@ LL | #[derive(Clone)] ():,
= help: only `#[cfg]` and `#[cfg_attr]` are supported
error: most attributes are not supported in `where` clauses
--> $DIR/cfg_attribute.rs:69:5
--> $DIR/cfg_attribute.rs:68:5
|
LL | #[rustfmt::skip] ():,
| ^^^^^^^^^^^^^^^^
@@ -109,7 +109,7 @@ LL | #[rustfmt::skip] ():,
= help: only `#[cfg]` and `#[cfg_attr]` are supported
error: most attributes are not supported in `where` clauses
--> $DIR/cfg_attribute.rs:100:5
--> $DIR/cfg_attribute.rs:99:5
|
LL | #[derive(Clone)] ():,
| ^^^^^^^^^^^^^^^^
@@ -117,7 +117,7 @@ LL | #[derive(Clone)] ():,
= help: only `#[cfg]` and `#[cfg_attr]` are supported
error: most attributes are not supported in `where` clauses
--> $DIR/cfg_attribute.rs:103:5
--> $DIR/cfg_attribute.rs:102:5
|
LL | #[rustfmt::skip] ():,
| ^^^^^^^^^^^^^^^^
@@ -125,7 +125,7 @@ LL | #[rustfmt::skip] ():,
= help: only `#[cfg]` and `#[cfg_attr]` are supported
error: most attributes are not supported in `where` clauses
--> $DIR/cfg_attribute.rs:114:5
--> $DIR/cfg_attribute.rs:113:5
|
LL | #[derive(Clone)] ():,
| ^^^^^^^^^^^^^^^^
@@ -133,7 +133,7 @@ LL | #[derive(Clone)] ():,
= help: only `#[cfg]` and `#[cfg_attr]` are supported
error: most attributes are not supported in `where` clauses
--> $DIR/cfg_attribute.rs:117:5
--> $DIR/cfg_attribute.rs:116:5
|
LL | #[rustfmt::skip] ():,
| ^^^^^^^^^^^^^^^^
@@ -141,7 +141,7 @@ LL | #[rustfmt::skip] ():,
= help: only `#[cfg]` and `#[cfg_attr]` are supported
error: most attributes are not supported in `where` clauses
--> $DIR/cfg_attribute.rs:129:5
--> $DIR/cfg_attribute.rs:128:5
|
LL | #[derive(Clone)] ():,
| ^^^^^^^^^^^^^^^^
@@ -149,7 +149,7 @@ LL | #[derive(Clone)] ():,
= help: only `#[cfg]` and `#[cfg_attr]` are supported
error: most attributes are not supported in `where` clauses
--> $DIR/cfg_attribute.rs:132:5
--> $DIR/cfg_attribute.rs:131:5
|
LL | #[rustfmt::skip] ():,
| ^^^^^^^^^^^^^^^^
@@ -157,7 +157,7 @@ LL | #[rustfmt::skip] ():,
= help: only `#[cfg]` and `#[cfg_attr]` are supported
error: most attributes are not supported in `where` clauses
--> $DIR/cfg_attribute.rs:144:5
--> $DIR/cfg_attribute.rs:143:5
|
LL | #[derive(Clone)] ():,
| ^^^^^^^^^^^^^^^^
@@ -165,7 +165,7 @@ LL | #[derive(Clone)] ():,
= help: only `#[cfg]` and `#[cfg_attr]` are supported
error: most attributes are not supported in `where` clauses
--> $DIR/cfg_attribute.rs:147:5
--> $DIR/cfg_attribute.rs:146:5
|
LL | #[rustfmt::skip] ():,
| ^^^^^^^^^^^^^^^^
@@ -173,7 +173,7 @@ LL | #[rustfmt::skip] ():,
= help: only `#[cfg]` and `#[cfg_attr]` are supported
error: most attributes are not supported in `where` clauses
--> $DIR/cfg_attribute.rs:155:5
--> $DIR/cfg_attribute.rs:154:5
|
LL | #[derive(Clone)] ():,
| ^^^^^^^^^^^^^^^^
@@ -181,7 +181,7 @@ LL | #[derive(Clone)] ():,
= help: only `#[cfg]` and `#[cfg_attr]` are supported
error: most attributes are not supported in `where` clauses
--> $DIR/cfg_attribute.rs:158:5
--> $DIR/cfg_attribute.rs:157:5
|
LL | #[rustfmt::skip] ():,
| ^^^^^^^^^^^^^^^^
@@ -189,7 +189,7 @@ LL | #[rustfmt::skip] ():,
= help: only `#[cfg]` and `#[cfg_attr]` are supported
error: most attributes are not supported in `where` clauses
--> $DIR/cfg_attribute.rs:178:5
--> $DIR/cfg_attribute.rs:177:5
|
LL | #[derive(Clone)] ():,
| ^^^^^^^^^^^^^^^^
@@ -197,7 +197,7 @@ LL | #[derive(Clone)] ():,
= help: only `#[cfg]` and `#[cfg_attr]` are supported
error: most attributes are not supported in `where` clauses
--> $DIR/cfg_attribute.rs:181:5
--> $DIR/cfg_attribute.rs:180:5
|
LL | #[rustfmt::skip] ():,
| ^^^^^^^^^^^^^^^^
@@ -205,7 +205,7 @@ LL | #[rustfmt::skip] ():,
= help: only `#[cfg]` and `#[cfg_attr]` are supported
error: most attributes are not supported in `where` clauses
--> $DIR/cfg_attribute.rs:43:9
--> $DIR/cfg_attribute.rs:42:9
|
LL | #[derive(Clone)] ():,
| ^^^^^^^^^^^^^^^^
@@ -213,7 +213,7 @@ LL | #[derive(Clone)] ():,
= help: only `#[cfg]` and `#[cfg_attr]` are supported
error: most attributes are not supported in `where` clauses
--> $DIR/cfg_attribute.rs:46:9
--> $DIR/cfg_attribute.rs:45:9
|
LL | #[rustfmt::skip] ():;
| ^^^^^^^^^^^^^^^^
@@ -221,7 +221,7 @@ LL | #[rustfmt::skip] ():;
= help: only `#[cfg]` and `#[cfg_attr]` are supported
error: most attributes are not supported in `where` clauses
--> $DIR/cfg_attribute.rs:54:9
--> $DIR/cfg_attribute.rs:53:9
|
LL | #[derive(Clone)] ():,
| ^^^^^^^^^^^^^^^^
@@ -229,7 +229,7 @@ LL | #[derive(Clone)] ():,
= help: only `#[cfg]` and `#[cfg_attr]` are supported
error: most attributes are not supported in `where` clauses
--> $DIR/cfg_attribute.rs:57:9
--> $DIR/cfg_attribute.rs:56:9
|
LL | #[rustfmt::skip] ():;
| ^^^^^^^^^^^^^^^^
@@ -237,7 +237,7 @@ LL | #[rustfmt::skip] ():;
= help: only `#[cfg]` and `#[cfg_attr]` are supported
error: most attributes are not supported in `where` clauses
--> $DIR/cfg_attribute.rs:76:9
--> $DIR/cfg_attribute.rs:75:9
|
LL | #[derive(Clone)] ():,
| ^^^^^^^^^^^^^^^^
@@ -245,7 +245,7 @@ LL | #[derive(Clone)] ():,
= help: only `#[cfg]` and `#[cfg_attr]` are supported
error: most attributes are not supported in `where` clauses
--> $DIR/cfg_attribute.rs:79:9
--> $DIR/cfg_attribute.rs:78:9
|
LL | #[rustfmt::skip] ():;
| ^^^^^^^^^^^^^^^^
@@ -253,7 +253,7 @@ LL | #[rustfmt::skip] ():;
= help: only `#[cfg]` and `#[cfg_attr]` are supported
error: most attributes are not supported in `where` clauses
--> $DIR/cfg_attribute.rs:87:9
--> $DIR/cfg_attribute.rs:86:9
|
LL | #[derive(Clone)] ():,
| ^^^^^^^^^^^^^^^^
@@ -261,7 +261,7 @@ LL | #[derive(Clone)] ():,
= help: only `#[cfg]` and `#[cfg_attr]` are supported
error: most attributes are not supported in `where` clauses
--> $DIR/cfg_attribute.rs:90:9
--> $DIR/cfg_attribute.rs:89:9
|
LL | #[rustfmt::skip] ():,
| ^^^^^^^^^^^^^^^^
@@ -269,7 +269,7 @@ LL | #[rustfmt::skip] ():,
= help: only `#[cfg]` and `#[cfg_attr]` are supported
error: most attributes are not supported in `where` clauses
--> $DIR/cfg_attribute.rs:165:9
--> $DIR/cfg_attribute.rs:164:9
|
LL | #[derive(Clone)] ():,
| ^^^^^^^^^^^^^^^^
@@ -277,7 +277,7 @@ LL | #[derive(Clone)] ():,
= help: only `#[cfg]` and `#[cfg_attr]` are supported
error: most attributes are not supported in `where` clauses
--> $DIR/cfg_attribute.rs:168:9
--> $DIR/cfg_attribute.rs:167:9
|
LL | #[rustfmt::skip] ():,
| ^^^^^^^^^^^^^^^^
+39 -39
View File
@@ -1,83 +1,83 @@
error: expected non-macro attribute, found attribute macro `derive`
--> $DIR/cfg_attribute.rs:32:7
--> $DIR/cfg_attribute.rs:31:7
|
LL | #[derive(Clone)] ():,
| ^^^^^^ not a non-macro attribute
error: expected non-macro attribute, found attribute macro `derive`
--> $DIR/cfg_attribute.rs:43:11
--> $DIR/cfg_attribute.rs:42:11
|
LL | #[derive(Clone)] ():,
| ^^^^^^ not a non-macro attribute
error: expected non-macro attribute, found attribute macro `derive`
--> $DIR/cfg_attribute.rs:54:11
--> $DIR/cfg_attribute.rs:53:11
|
LL | #[derive(Clone)] ():,
| ^^^^^^ not a non-macro attribute
error: expected non-macro attribute, found attribute macro `derive`
--> $DIR/cfg_attribute.rs:66:7
--> $DIR/cfg_attribute.rs:65:7
|
LL | #[derive(Clone)] ():,
| ^^^^^^ not a non-macro attribute
error: expected non-macro attribute, found attribute macro `derive`
--> $DIR/cfg_attribute.rs:76:11
--> $DIR/cfg_attribute.rs:75:11
|
LL | #[derive(Clone)] ():,
| ^^^^^^ not a non-macro attribute
error: expected non-macro attribute, found attribute macro `derive`
--> $DIR/cfg_attribute.rs:87:11
--> $DIR/cfg_attribute.rs:86:11
|
LL | #[derive(Clone)] ():,
| ^^^^^^ not a non-macro attribute
error: expected non-macro attribute, found attribute macro `derive`
--> $DIR/cfg_attribute.rs:100:7
--> $DIR/cfg_attribute.rs:99:7
|
LL | #[derive(Clone)] ():,
| ^^^^^^ not a non-macro attribute
error: expected non-macro attribute, found attribute macro `derive`
--> $DIR/cfg_attribute.rs:114:7
--> $DIR/cfg_attribute.rs:113:7
|
LL | #[derive(Clone)] ():,
| ^^^^^^ not a non-macro attribute
error: expected non-macro attribute, found attribute macro `derive`
--> $DIR/cfg_attribute.rs:129:7
--> $DIR/cfg_attribute.rs:128:7
|
LL | #[derive(Clone)] ():,
| ^^^^^^ not a non-macro attribute
error: expected non-macro attribute, found attribute macro `derive`
--> $DIR/cfg_attribute.rs:144:7
--> $DIR/cfg_attribute.rs:143:7
|
LL | #[derive(Clone)] ():,
| ^^^^^^ not a non-macro attribute
error: expected non-macro attribute, found attribute macro `derive`
--> $DIR/cfg_attribute.rs:155:7
--> $DIR/cfg_attribute.rs:154:7
|
LL | #[derive(Clone)] ():,
| ^^^^^^ not a non-macro attribute
error: expected non-macro attribute, found attribute macro `derive`
--> $DIR/cfg_attribute.rs:165:11
--> $DIR/cfg_attribute.rs:164:11
|
LL | #[derive(Clone)] ():,
| ^^^^^^ not a non-macro attribute
error: expected non-macro attribute, found attribute macro `derive`
--> $DIR/cfg_attribute.rs:178:7
--> $DIR/cfg_attribute.rs:177:7
|
LL | #[derive(Clone)] ():,
| ^^^^^^ not a non-macro attribute
error: most attributes are not supported in `where` clauses
--> $DIR/cfg_attribute.rs:32:5
--> $DIR/cfg_attribute.rs:31:5
|
LL | #[derive(Clone)] ():,
| ^^^^^^^^^^^^^^^^
@@ -85,7 +85,7 @@ LL | #[derive(Clone)] ():,
= help: only `#[cfg]` and `#[cfg_attr]` are supported
error: most attributes are not supported in `where` clauses
--> $DIR/cfg_attribute.rs:35:5
--> $DIR/cfg_attribute.rs:34:5
|
LL | #[rustfmt::skip] ():,
| ^^^^^^^^^^^^^^^^
@@ -93,7 +93,7 @@ LL | #[rustfmt::skip] ():,
= help: only `#[cfg]` and `#[cfg_attr]` are supported
error: most attributes are not supported in `where` clauses
--> $DIR/cfg_attribute.rs:66:5
--> $DIR/cfg_attribute.rs:65:5
|
LL | #[derive(Clone)] ():,
| ^^^^^^^^^^^^^^^^
@@ -101,7 +101,7 @@ LL | #[derive(Clone)] ():,
= help: only `#[cfg]` and `#[cfg_attr]` are supported
error: most attributes are not supported in `where` clauses
--> $DIR/cfg_attribute.rs:69:5
--> $DIR/cfg_attribute.rs:68:5
|
LL | #[rustfmt::skip] ():,
| ^^^^^^^^^^^^^^^^
@@ -109,7 +109,7 @@ LL | #[rustfmt::skip] ():,
= help: only `#[cfg]` and `#[cfg_attr]` are supported
error: most attributes are not supported in `where` clauses
--> $DIR/cfg_attribute.rs:100:5
--> $DIR/cfg_attribute.rs:99:5
|
LL | #[derive(Clone)] ():,
| ^^^^^^^^^^^^^^^^
@@ -117,7 +117,7 @@ LL | #[derive(Clone)] ():,
= help: only `#[cfg]` and `#[cfg_attr]` are supported
error: most attributes are not supported in `where` clauses
--> $DIR/cfg_attribute.rs:103:5
--> $DIR/cfg_attribute.rs:102:5
|
LL | #[rustfmt::skip] ():,
| ^^^^^^^^^^^^^^^^
@@ -125,7 +125,7 @@ LL | #[rustfmt::skip] ():,
= help: only `#[cfg]` and `#[cfg_attr]` are supported
error: most attributes are not supported in `where` clauses
--> $DIR/cfg_attribute.rs:114:5
--> $DIR/cfg_attribute.rs:113:5
|
LL | #[derive(Clone)] ():,
| ^^^^^^^^^^^^^^^^
@@ -133,7 +133,7 @@ LL | #[derive(Clone)] ():,
= help: only `#[cfg]` and `#[cfg_attr]` are supported
error: most attributes are not supported in `where` clauses
--> $DIR/cfg_attribute.rs:117:5
--> $DIR/cfg_attribute.rs:116:5
|
LL | #[rustfmt::skip] ():,
| ^^^^^^^^^^^^^^^^
@@ -141,7 +141,7 @@ LL | #[rustfmt::skip] ():,
= help: only `#[cfg]` and `#[cfg_attr]` are supported
error: most attributes are not supported in `where` clauses
--> $DIR/cfg_attribute.rs:129:5
--> $DIR/cfg_attribute.rs:128:5
|
LL | #[derive(Clone)] ():,
| ^^^^^^^^^^^^^^^^
@@ -149,7 +149,7 @@ LL | #[derive(Clone)] ():,
= help: only `#[cfg]` and `#[cfg_attr]` are supported
error: most attributes are not supported in `where` clauses
--> $DIR/cfg_attribute.rs:132:5
--> $DIR/cfg_attribute.rs:131:5
|
LL | #[rustfmt::skip] ():,
| ^^^^^^^^^^^^^^^^
@@ -157,7 +157,7 @@ LL | #[rustfmt::skip] ():,
= help: only `#[cfg]` and `#[cfg_attr]` are supported
error: most attributes are not supported in `where` clauses
--> $DIR/cfg_attribute.rs:144:5
--> $DIR/cfg_attribute.rs:143:5
|
LL | #[derive(Clone)] ():,
| ^^^^^^^^^^^^^^^^
@@ -165,7 +165,7 @@ LL | #[derive(Clone)] ():,
= help: only `#[cfg]` and `#[cfg_attr]` are supported
error: most attributes are not supported in `where` clauses
--> $DIR/cfg_attribute.rs:147:5
--> $DIR/cfg_attribute.rs:146:5
|
LL | #[rustfmt::skip] ():,
| ^^^^^^^^^^^^^^^^
@@ -173,7 +173,7 @@ LL | #[rustfmt::skip] ():,
= help: only `#[cfg]` and `#[cfg_attr]` are supported
error: most attributes are not supported in `where` clauses
--> $DIR/cfg_attribute.rs:155:5
--> $DIR/cfg_attribute.rs:154:5
|
LL | #[derive(Clone)] ():,
| ^^^^^^^^^^^^^^^^
@@ -181,7 +181,7 @@ LL | #[derive(Clone)] ():,
= help: only `#[cfg]` and `#[cfg_attr]` are supported
error: most attributes are not supported in `where` clauses
--> $DIR/cfg_attribute.rs:158:5
--> $DIR/cfg_attribute.rs:157:5
|
LL | #[rustfmt::skip] ():,
| ^^^^^^^^^^^^^^^^
@@ -189,7 +189,7 @@ LL | #[rustfmt::skip] ():,
= help: only `#[cfg]` and `#[cfg_attr]` are supported
error: most attributes are not supported in `where` clauses
--> $DIR/cfg_attribute.rs:178:5
--> $DIR/cfg_attribute.rs:177:5
|
LL | #[derive(Clone)] ():,
| ^^^^^^^^^^^^^^^^
@@ -197,7 +197,7 @@ LL | #[derive(Clone)] ():,
= help: only `#[cfg]` and `#[cfg_attr]` are supported
error: most attributes are not supported in `where` clauses
--> $DIR/cfg_attribute.rs:181:5
--> $DIR/cfg_attribute.rs:180:5
|
LL | #[rustfmt::skip] ():,
| ^^^^^^^^^^^^^^^^
@@ -205,7 +205,7 @@ LL | #[rustfmt::skip] ():,
= help: only `#[cfg]` and `#[cfg_attr]` are supported
error: most attributes are not supported in `where` clauses
--> $DIR/cfg_attribute.rs:43:9
--> $DIR/cfg_attribute.rs:42:9
|
LL | #[derive(Clone)] ():,
| ^^^^^^^^^^^^^^^^
@@ -213,7 +213,7 @@ LL | #[derive(Clone)] ():,
= help: only `#[cfg]` and `#[cfg_attr]` are supported
error: most attributes are not supported in `where` clauses
--> $DIR/cfg_attribute.rs:46:9
--> $DIR/cfg_attribute.rs:45:9
|
LL | #[rustfmt::skip] ():;
| ^^^^^^^^^^^^^^^^
@@ -221,7 +221,7 @@ LL | #[rustfmt::skip] ():;
= help: only `#[cfg]` and `#[cfg_attr]` are supported
error: most attributes are not supported in `where` clauses
--> $DIR/cfg_attribute.rs:54:9
--> $DIR/cfg_attribute.rs:53:9
|
LL | #[derive(Clone)] ():,
| ^^^^^^^^^^^^^^^^
@@ -229,7 +229,7 @@ LL | #[derive(Clone)] ():,
= help: only `#[cfg]` and `#[cfg_attr]` are supported
error: most attributes are not supported in `where` clauses
--> $DIR/cfg_attribute.rs:57:9
--> $DIR/cfg_attribute.rs:56:9
|
LL | #[rustfmt::skip] ():;
| ^^^^^^^^^^^^^^^^
@@ -237,7 +237,7 @@ LL | #[rustfmt::skip] ():;
= help: only `#[cfg]` and `#[cfg_attr]` are supported
error: most attributes are not supported in `where` clauses
--> $DIR/cfg_attribute.rs:76:9
--> $DIR/cfg_attribute.rs:75:9
|
LL | #[derive(Clone)] ():,
| ^^^^^^^^^^^^^^^^
@@ -245,7 +245,7 @@ LL | #[derive(Clone)] ():,
= help: only `#[cfg]` and `#[cfg_attr]` are supported
error: most attributes are not supported in `where` clauses
--> $DIR/cfg_attribute.rs:79:9
--> $DIR/cfg_attribute.rs:78:9
|
LL | #[rustfmt::skip] ():;
| ^^^^^^^^^^^^^^^^
@@ -253,7 +253,7 @@ LL | #[rustfmt::skip] ():;
= help: only `#[cfg]` and `#[cfg_attr]` are supported
error: most attributes are not supported in `where` clauses
--> $DIR/cfg_attribute.rs:87:9
--> $DIR/cfg_attribute.rs:86:9
|
LL | #[derive(Clone)] ():,
| ^^^^^^^^^^^^^^^^
@@ -261,7 +261,7 @@ LL | #[derive(Clone)] ():,
= help: only `#[cfg]` and `#[cfg_attr]` are supported
error: most attributes are not supported in `where` clauses
--> $DIR/cfg_attribute.rs:90:9
--> $DIR/cfg_attribute.rs:89:9
|
LL | #[rustfmt::skip] ():,
| ^^^^^^^^^^^^^^^^
@@ -269,7 +269,7 @@ LL | #[rustfmt::skip] ():,
= help: only `#[cfg]` and `#[cfg_attr]` are supported
error: most attributes are not supported in `where` clauses
--> $DIR/cfg_attribute.rs:165:9
--> $DIR/cfg_attribute.rs:164:9
|
LL | #[derive(Clone)] ():,
| ^^^^^^^^^^^^^^^^
@@ -277,7 +277,7 @@ LL | #[derive(Clone)] ():,
= help: only `#[cfg]` and `#[cfg_attr]` are supported
error: most attributes are not supported in `where` clauses
--> $DIR/cfg_attribute.rs:168:9
--> $DIR/cfg_attribute.rs:167:9
|
LL | #[rustfmt::skip] ():,
| ^^^^^^^^^^^^^^^^
-1
View File
@@ -7,7 +7,6 @@
#![feature(custom_test_frameworks)]
#![feature(derive_const)]
#![feature(where_clause_attrs)]
#![allow(soft_unstable)]
use std::marker::PhantomData;
@@ -5,7 +5,6 @@
#![feature(custom_test_frameworks)]
#![feature(derive_const)]
#![feature(where_clause_attrs)]
#![allow(soft_unstable)]
trait Trait {}
@@ -1,17 +1,17 @@
error: expected non-macro attribute, found attribute macro `derive`
--> $DIR/unsupported_attribute.rs:28:7
--> $DIR/unsupported_attribute.rs:27:7
|
LL | #[derive(Clone)] T: Trait,
| ^^^^^^ not a non-macro attribute
error: expected non-macro attribute, found attribute macro `derive`
--> $DIR/unsupported_attribute.rs:31:7
--> $DIR/unsupported_attribute.rs:30:7
|
LL | #[derive(Clone)] 'a: 'static,
| ^^^^^^ not a non-macro attribute
error: `#[ignore]` attribute cannot be used on where predicates
--> $DIR/unsupported_attribute.rs:16:5
--> $DIR/unsupported_attribute.rs:15:5
|
LL | #[ignore] T: Trait,
| ^^^^^^^^^
@@ -19,7 +19,7 @@ LL | #[ignore] T: Trait,
= help: `#[ignore]` can only be applied to functions
error: `#[ignore]` attribute cannot be used on where predicates
--> $DIR/unsupported_attribute.rs:17:5
--> $DIR/unsupported_attribute.rs:16:5
|
LL | #[ignore] 'a: 'static,
| ^^^^^^^^^
@@ -27,7 +27,7 @@ LL | #[ignore] 'a: 'static,
= help: `#[ignore]` can only be applied to functions
error: `#[should_panic]` attribute cannot be used on where predicates
--> $DIR/unsupported_attribute.rs:18:5
--> $DIR/unsupported_attribute.rs:17:5
|
LL | #[should_panic] T: Trait,
| ^^^^^^^^^^^^^^^
@@ -35,7 +35,7 @@ LL | #[should_panic] T: Trait,
= help: `#[should_panic]` can only be applied to functions
error: `#[should_panic]` attribute cannot be used on where predicates
--> $DIR/unsupported_attribute.rs:19:5
--> $DIR/unsupported_attribute.rs:18:5
|
LL | #[should_panic] 'a: 'static,
| ^^^^^^^^^^^^^^^
@@ -43,7 +43,7 @@ LL | #[should_panic] 'a: 'static,
= help: `#[should_panic]` can only be applied to functions
error: `#[macro_use]` attribute cannot be used on where predicates
--> $DIR/unsupported_attribute.rs:20:5
--> $DIR/unsupported_attribute.rs:19:5
|
LL | #[macro_use] T: Trait,
| ^^^^^^^^^^^^
@@ -51,7 +51,7 @@ LL | #[macro_use] T: Trait,
= help: `#[macro_use]` can be applied to crates, extern crates, and modules
error: `#[macro_use]` attribute cannot be used on where predicates
--> $DIR/unsupported_attribute.rs:21:5
--> $DIR/unsupported_attribute.rs:20:5
|
LL | #[macro_use] 'a: 'static,
| ^^^^^^^^^^^^
@@ -59,7 +59,7 @@ LL | #[macro_use] 'a: 'static,
= help: `#[macro_use]` can be applied to crates, extern crates, and modules
error: `#[deprecated]` attribute cannot be used on where predicates
--> $DIR/unsupported_attribute.rs:24:5
--> $DIR/unsupported_attribute.rs:23:5
|
LL | #[deprecated] T: Trait,
| ^^^^^^^^^^^^^
@@ -67,7 +67,7 @@ LL | #[deprecated] T: Trait,
= help: `#[deprecated]` can be applied to associated consts, associated types, constants, crates, data types, enum variants, foreign statics, functions, inherent impl blocks, macro defs, modules, statics, struct fields, traits, type aliases, and use statements
error: `#[deprecated]` attribute cannot be used on where predicates
--> $DIR/unsupported_attribute.rs:25:5
--> $DIR/unsupported_attribute.rs:24:5
|
LL | #[deprecated] 'a: 'static,
| ^^^^^^^^^^^^^
@@ -75,7 +75,7 @@ LL | #[deprecated] 'a: 'static,
= help: `#[deprecated]` can be applied to associated consts, associated types, constants, crates, data types, enum variants, foreign statics, functions, inherent impl blocks, macro defs, modules, statics, struct fields, traits, type aliases, and use statements
error: `#[automatically_derived]` attribute cannot be used on where predicates
--> $DIR/unsupported_attribute.rs:26:5
--> $DIR/unsupported_attribute.rs:25:5
|
LL | #[automatically_derived] T: Trait,
| ^^^^^^^^^^^^^^^^^^^^^^^^
@@ -83,7 +83,7 @@ LL | #[automatically_derived] T: Trait,
= help: `#[automatically_derived]` can only be applied to trait impl blocks
error: `#[automatically_derived]` attribute cannot be used on where predicates
--> $DIR/unsupported_attribute.rs:27:5
--> $DIR/unsupported_attribute.rs:26:5
|
LL | #[automatically_derived] 'a: 'static,
| ^^^^^^^^^^^^^^^^^^^^^^^^
@@ -91,7 +91,7 @@ LL | #[automatically_derived] 'a: 'static,
= help: `#[automatically_derived]` can only be applied to trait impl blocks
error: most attributes are not supported in `where` clauses
--> $DIR/unsupported_attribute.rs:14:5
--> $DIR/unsupported_attribute.rs:13:5
|
LL | #[doc = "doc"] T: Trait,
| ^^^^^^^^^^^^^^
@@ -99,7 +99,7 @@ LL | #[doc = "doc"] T: Trait,
= help: only `#[cfg]` and `#[cfg_attr]` are supported
error: most attributes are not supported in `where` clauses
--> $DIR/unsupported_attribute.rs:15:5
--> $DIR/unsupported_attribute.rs:14:5
|
LL | #[doc = "doc"] 'a: 'static,
| ^^^^^^^^^^^^^^
@@ -107,7 +107,7 @@ LL | #[doc = "doc"] 'a: 'static,
= help: only `#[cfg]` and `#[cfg_attr]` are supported
error: most attributes are not supported in `where` clauses
--> $DIR/unsupported_attribute.rs:22:5
--> $DIR/unsupported_attribute.rs:21:5
|
LL | #[allow(unused)] T: Trait,
| ^^^^^^^^^^^^^^^^
@@ -115,7 +115,7 @@ LL | #[allow(unused)] T: Trait,
= help: only `#[cfg]` and `#[cfg_attr]` are supported
error: most attributes are not supported in `where` clauses
--> $DIR/unsupported_attribute.rs:23:5
--> $DIR/unsupported_attribute.rs:22:5
|
LL | #[allow(unused)] 'a: 'static,
| ^^^^^^^^^^^^^^^^
@@ -123,7 +123,7 @@ LL | #[allow(unused)] 'a: 'static,
= help: only `#[cfg]` and `#[cfg_attr]` are supported
error: most attributes are not supported in `where` clauses
--> $DIR/unsupported_attribute.rs:28:5
--> $DIR/unsupported_attribute.rs:27:5
|
LL | #[derive(Clone)] T: Trait,
| ^^^^^^^^^^^^^^^^
@@ -131,7 +131,7 @@ LL | #[derive(Clone)] T: Trait,
= help: only `#[cfg]` and `#[cfg_attr]` are supported
error: most attributes are not supported in `where` clauses
--> $DIR/unsupported_attribute.rs:31:5
--> $DIR/unsupported_attribute.rs:30:5
|
LL | #[derive(Clone)] 'a: 'static,
| ^^^^^^^^^^^^^^^^
@@ -139,7 +139,7 @@ LL | #[derive(Clone)] 'a: 'static,
= help: only `#[cfg]` and `#[cfg_attr]` are supported
error: most attributes are not supported in `where` clauses
--> $DIR/unsupported_attribute.rs:34:5
--> $DIR/unsupported_attribute.rs:33:5
|
LL | #[rustfmt::skip] T: Trait,
| ^^^^^^^^^^^^^^^^
@@ -147,7 +147,7 @@ LL | #[rustfmt::skip] T: Trait,
= help: only `#[cfg]` and `#[cfg_attr]` are supported
error: most attributes are not supported in `where` clauses
--> $DIR/unsupported_attribute.rs:35:5
--> $DIR/unsupported_attribute.rs:34:5
|
LL | #[rustfmt::skip] 'a: 'static,
| ^^^^^^^^^^^^^^^^