Rollup merge of #152431 - oli-obk:limited_stability_attr, r=jdonszelmann
Restrict the set of things that const stability can be applied to r? @jdonszelmann
This commit is contained in:
commit
88eda646f2
6 changed files with 26 additions and 35 deletions
|
|
@ -244,7 +244,20 @@ impl<S: Stage> AttributeParser<S> for ConstStabilityParser {
|
|||
this.promotable = true;
|
||||
}),
|
||||
];
|
||||
const ALLOWED_TARGETS: AllowedTargets = ALLOWED_TARGETS;
|
||||
const ALLOWED_TARGETS: AllowedTargets = AllowedTargets::AllowList(&[
|
||||
Allow(Target::Fn),
|
||||
Allow(Target::Method(MethodKind::Inherent)),
|
||||
Allow(Target::Method(MethodKind::TraitImpl)),
|
||||
Allow(Target::Method(MethodKind::Trait { body: true })),
|
||||
Allow(Target::Impl { of_trait: false }),
|
||||
Allow(Target::Impl { of_trait: true }),
|
||||
Allow(Target::Use), // FIXME I don't think this does anything?
|
||||
Allow(Target::Const),
|
||||
Allow(Target::AssocConst),
|
||||
Allow(Target::Trait),
|
||||
Allow(Target::Static),
|
||||
Allow(Target::Crate),
|
||||
]);
|
||||
|
||||
fn finalize(mut self, cx: &FinalizeContext<'_, '_, S>) -> Option<AttributeKind> {
|
||||
if self.promotable {
|
||||
|
|
|
|||
|
|
@ -962,15 +962,6 @@ impl SyntaxExtension {
|
|||
|
||||
let stability = find_attr!(attrs, AttributeKind::Stability { stability, .. } => *stability);
|
||||
|
||||
// FIXME(jdonszelmann): make it impossible to miss the or_else in the typesystem
|
||||
if let Some(sp) =
|
||||
find_attr!(attrs, AttributeKind::RustcConstStability { span, .. } => *span)
|
||||
{
|
||||
sess.dcx().emit_err(errors::MacroConstStability {
|
||||
span: sp,
|
||||
head_span: sess.source_map().guess_head_span(span),
|
||||
});
|
||||
}
|
||||
if let Some(sp) = find_attr!(attrs, AttributeKind::RustcBodyStability{ span, .. } => *span)
|
||||
{
|
||||
sess.dcx().emit_err(errors::MacroBodyStability {
|
||||
|
|
|
|||
|
|
@ -80,16 +80,6 @@ pub(crate) struct ResolveRelativePath {
|
|||
pub path: String,
|
||||
}
|
||||
|
||||
#[derive(Diagnostic)]
|
||||
#[diag("macros cannot have const stability attributes")]
|
||||
pub(crate) struct MacroConstStability {
|
||||
#[primary_span]
|
||||
#[label("invalid const stability attribute")]
|
||||
pub span: Span,
|
||||
#[label("const stability attribute affects this macro")]
|
||||
pub head_span: Span,
|
||||
}
|
||||
|
||||
#[derive(Diagnostic)]
|
||||
#[diag("macros cannot have body stability attributes")]
|
||||
pub(crate) struct MacroBodyStability {
|
||||
|
|
|
|||
|
|
@ -31,7 +31,6 @@ impl<'l, 'f, T, U, const N: usize, F: FnMut(T) -> U> Drain<'l, 'f, T, N, F> {
|
|||
}
|
||||
|
||||
/// See [`Drain::new`]; this is our fake iterator.
|
||||
#[rustc_const_unstable(feature = "array_try_map", issue = "79711")]
|
||||
#[unstable(feature = "array_try_map", issue = "79711")]
|
||||
pub(super) struct Drain<'l, 'f, T, const N: usize, F> {
|
||||
// FIXME(const-hack): This is essentially a slice::IterMut<'static>, replace when possible.
|
||||
|
|
|
|||
|
|
@ -2,13 +2,13 @@
|
|||
#![stable(feature = "rust1", since = "1.0.0")]
|
||||
|
||||
#[rustc_const_stable(feature = "foo", since = "3.3.3")]
|
||||
//~^ ERROR macros cannot have const stability attributes
|
||||
//~^ ERROR attribute cannot be used on macro defs
|
||||
macro_rules! foo {
|
||||
() => {};
|
||||
}
|
||||
|
||||
#[rustc_const_unstable(feature = "bar", issue="none")]
|
||||
//~^ ERROR macros cannot have const stability attributes
|
||||
#[rustc_const_unstable(feature = "bar", issue = "none")]
|
||||
//~^ ERROR attribute cannot be used on macro defs
|
||||
macro_rules! bar {
|
||||
() => {};
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,20 +1,18 @@
|
|||
error: macros cannot have const stability attributes
|
||||
error: `#[rustc_const_stable]` attribute cannot be used on macro defs
|
||||
--> $DIR/const-stability-on-macro.rs:4:1
|
||||
|
|
||||
LL | #[rustc_const_stable(feature = "foo", since = "3.3.3")]
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ invalid const stability attribute
|
||||
LL |
|
||||
LL | macro_rules! foo {
|
||||
| ---------------- const stability attribute affects this macro
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
|
|
||||
= help: `#[rustc_const_stable]` can be applied to associated consts, constants, crates, functions, impl blocks, statics, traits, and use statements
|
||||
|
||||
error: macros cannot have const stability attributes
|
||||
error: `#[rustc_const_unstable]` attribute cannot be used on macro defs
|
||||
--> $DIR/const-stability-on-macro.rs:10:1
|
||||
|
|
||||
LL | #[rustc_const_unstable(feature = "bar", issue="none")]
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ invalid const stability attribute
|
||||
LL |
|
||||
LL | macro_rules! bar {
|
||||
| ---------------- const stability attribute affects this macro
|
||||
LL | #[rustc_const_unstable(feature = "bar", issue = "none")]
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
|
|
||||
= help: `#[rustc_const_unstable]` can be applied to associated consts, constants, crates, functions, impl blocks, statics, traits, and use statements
|
||||
|
||||
error: aborting due to 2 previous errors
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue