1
Fork 0

Gate stability attrs with other attributes.

This commit is contained in:
Camille GILLOT 2022-01-18 20:37:14 +01:00
parent 969f8735dc
commit 3c7947ee43
14 changed files with 242 additions and 196 deletions

View file

@ -420,6 +420,31 @@ impl<'a> Visitor<'a> for PostExpansionVisitor<'a> {
} }
} }
} }
// Emit errors for non-staged-api crates.
if !self.features.staged_api {
if attr.has_name(sym::rustc_deprecated)
|| attr.has_name(sym::unstable)
|| attr.has_name(sym::stable)
|| attr.has_name(sym::rustc_const_unstable)
|| attr.has_name(sym::rustc_const_stable)
{
struct_span_err!(
self.sess,
attr.span,
E0734,
"stability attributes may not be used outside of the standard library",
)
.emit();
}
} else {
if attr.has_name(sym::deprecated) {
self.sess
.struct_span_err(attr.span, "`#[deprecated]` cannot be used in staged API")
.span_label(attr.span, "use `#[rustc_deprecated]` instead")
.emit();
}
}
} }
fn visit_item(&mut self, i: &'a ast::Item) { fn visit_item(&mut self, i: &'a ast::Item) {

View file

@ -1,7 +1,6 @@
//! A pass that annotates every item and method with its stability level, //! A pass that annotates every item and method with its stability level,
//! propagating default levels lexically from parent to children ast nodes. //! propagating default levels lexically from parent to children ast nodes.
use rustc_ast::Attribute;
use rustc_attr::{self as attr, ConstStability, Stability}; use rustc_attr::{self as attr, ConstStability, Stability};
use rustc_data_structures::fx::{FxHashMap, FxHashSet}; use rustc_data_structures::fx::{FxHashMap, FxHashSet};
use rustc_errors::struct_span_err; use rustc_errors::struct_span_err;
@ -113,12 +112,8 @@ impl<'a, 'tcx> Annotator<'a, 'tcx> {
{ {
let attrs = self.tcx.get_attrs(def_id.to_def_id()); let attrs = self.tcx.get_attrs(def_id.to_def_id());
debug!("annotate(id = {:?}, attrs = {:?})", def_id, attrs); debug!("annotate(id = {:?}, attrs = {:?})", def_id, attrs);
let mut did_error = false;
if !self.tcx.features().staged_api {
did_error = self.forbid_staged_api_attrs(def_id, attrs, inherit_deprecation.clone());
}
let depr = if did_error { None } else { attr::find_deprecation(&self.tcx.sess, attrs) }; let depr = attr::find_deprecation(&self.tcx.sess, attrs);
let mut is_deprecated = false; let mut is_deprecated = false;
if let Some((depr, span)) = &depr { if let Some((depr, span)) = &depr {
is_deprecated = true; is_deprecated = true;
@ -148,16 +143,15 @@ impl<'a, 'tcx> Annotator<'a, 'tcx> {
} }
} }
if self.tcx.features().staged_api { if !self.tcx.features().staged_api {
if let Some(a) = attrs.iter().find(|a| a.has_name(sym::deprecated)) { // Propagate unstability. This can happen even for non-staged-api crates in case
self.tcx // -Zforce-unstable-if-unmarked is set.
.sess if let Some(stab) = self.parent_stab {
.struct_span_err(a.span, "`#[deprecated]` cannot be used in staged API") if inherit_deprecation.yes() && stab.level.is_unstable() {
.span_label(a.span, "use `#[rustc_deprecated]` instead") self.index.stab_map.insert(def_id, stab);
.span_label(item_sp, "")
.emit();
} }
} else { }
self.recurse_with_stability_attrs( self.recurse_with_stability_attrs(
depr.map(|(d, _)| DeprecationEntry::local(d, def_id)), depr.map(|(d, _)| DeprecationEntry::local(d, def_id)),
None, None,
@ -329,47 +323,6 @@ impl<'a, 'tcx> Annotator<'a, 'tcx> {
self.parent_const_stab = orig_parent_const_stab; self.parent_const_stab = orig_parent_const_stab;
} }
} }
// returns true if an error occurred, used to suppress some spurious errors
fn forbid_staged_api_attrs(
&mut self,
def_id: LocalDefId,
attrs: &[Attribute],
inherit_deprecation: InheritDeprecation,
) -> bool {
// Emit errors for non-staged-api crates.
let unstable_attrs = [
sym::unstable,
sym::stable,
sym::rustc_deprecated,
sym::rustc_const_unstable,
sym::rustc_const_stable,
];
let mut has_error = false;
for attr in attrs {
let name = attr.name_or_empty();
if unstable_attrs.contains(&name) {
struct_span_err!(
self.tcx.sess,
attr.span,
E0734,
"stability attributes may not be used outside of the standard library",
)
.emit();
has_error = true;
}
}
// Propagate unstability. This can happen even for non-staged-api crates in case
// -Zforce-unstable-if-unmarked is set.
if let Some(stab) = self.parent_stab {
if inherit_deprecation.yes() && stab.level.is_unstable() {
self.index.stab_map.insert(def_id, stab);
}
}
has_error
}
} }
impl<'a, 'tcx> Visitor<'tcx> for Annotator<'a, 'tcx> { impl<'a, 'tcx> Visitor<'tcx> for Annotator<'a, 'tcx> {

View file

@ -3,8 +3,6 @@ error: `#[deprecated]` cannot be used in staged API
| |
LL | #[deprecated] LL | #[deprecated]
| ^^^^^^^^^^^^^ use `#[rustc_deprecated]` instead | ^^^^^^^^^^^^^ use `#[rustc_deprecated]` instead
LL | fn main() {}
| ------------
error: aborting due to previous error error: aborting due to previous error

View file

@ -1,15 +1,15 @@
error[E0734]: stability attributes may not be used outside of the standard library
--> $DIR/feature-gate-staged_api.rs:1:1
|
LL | #![stable(feature = "a", since = "b")]
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
error[E0734]: stability attributes may not be used outside of the standard library error[E0734]: stability attributes may not be used outside of the standard library
--> $DIR/feature-gate-staged_api.rs:8:1 --> $DIR/feature-gate-staged_api.rs:8:1
| |
LL | #[stable(feature = "a", since = "b")] LL | #[stable(feature = "a", since = "b")]
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
error[E0734]: stability attributes may not be used outside of the standard library
--> $DIR/feature-gate-staged_api.rs:1:1
|
LL | #![stable(feature = "a", since = "b")]
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
error: aborting due to 2 previous errors error: aborting due to 2 previous errors
For more information about this error, try `rustc --explain E0734`. For more information about this error, try `rustc --explain E0734`.

View file

@ -6,25 +6,38 @@
#![rustc_deprecated()] #![rustc_deprecated()]
//~^ ERROR stability attributes may not be used outside of the standard library //~^ ERROR stability attributes may not be used outside of the standard library
//~| ERROR missing 'since' [E0542]
#[rustc_deprecated()] #[rustc_deprecated()]
//~^ ERROR stability attributes may not be used outside of the standard library //~^ ERROR stability attributes may not be used outside of the standard library
//~| ERROR missing 'since' [E0542]
mod rustc_deprecated { mod rustc_deprecated {
mod inner { #![rustc_deprecated()] } mod inner {
#![rustc_deprecated()]
//~^ ERROR stability attributes may not be used outside of the standard library //~^ ERROR stability attributes may not be used outside of the standard library
//~| ERROR missing 'since' [E0542]
}
#[rustc_deprecated()] fn f() { } #[rustc_deprecated()]
//~^ ERROR stability attributes may not be used outside of the standard library //~^ ERROR stability attributes may not be used outside of the standard library
//~| ERROR missing 'since' [E0542]
fn f() {}
#[rustc_deprecated()] struct S; #[rustc_deprecated()]
//~^ ERROR stability attributes may not be used outside of the standard library //~^ ERROR stability attributes may not be used outside of the standard library
//~| ERROR stability attributes may not be used outside of the standard library //~| ERROR missing 'since' [E0542]
//~| ERROR missing 'since' [E0542]
struct S;
#[rustc_deprecated()] type T = S; #[rustc_deprecated()]
//~^ ERROR stability attributes may not be used outside of the standard library //~^ ERROR stability attributes may not be used outside of the standard library
//~| ERROR missing 'since' [E0542]
type T = S;
#[rustc_deprecated()] impl S { } #[rustc_deprecated()]
//~^ ERROR stability attributes may not be used outside of the standard library //~^ ERROR stability attributes may not be used outside of the standard library
//~| ERROR missing 'since' [E0542]
impl S {}
} }
fn main() {} fn main() {}

View file

@ -1,51 +1,94 @@
error[E0734]: stability attributes may not be used outside of the standard library
--> $DIR/issue-43106-gating-of-rustc_deprecated.rs:16:9
|
LL | #![rustc_deprecated()]
| ^^^^^^^^^^^^^^^^^^^^^^
error[E0734]: stability attributes may not be used outside of the standard library
--> $DIR/issue-43106-gating-of-rustc_deprecated.rs:21:5
|
LL | #[rustc_deprecated()]
| ^^^^^^^^^^^^^^^^^^^^^
error[E0734]: stability attributes may not be used outside of the standard library
--> $DIR/issue-43106-gating-of-rustc_deprecated.rs:26:5
|
LL | #[rustc_deprecated()]
| ^^^^^^^^^^^^^^^^^^^^^
error[E0734]: stability attributes may not be used outside of the standard library
--> $DIR/issue-43106-gating-of-rustc_deprecated.rs:32:5
|
LL | #[rustc_deprecated()]
| ^^^^^^^^^^^^^^^^^^^^^
error[E0734]: stability attributes may not be used outside of the standard library
--> $DIR/issue-43106-gating-of-rustc_deprecated.rs:37:5
|
LL | #[rustc_deprecated()]
| ^^^^^^^^^^^^^^^^^^^^^
error[E0734]: stability attributes may not be used outside of the standard library
--> $DIR/issue-43106-gating-of-rustc_deprecated.rs:11:1
|
LL | #[rustc_deprecated()]
| ^^^^^^^^^^^^^^^^^^^^^
error[E0734]: stability attributes may not be used outside of the standard library error[E0734]: stability attributes may not be used outside of the standard library
--> $DIR/issue-43106-gating-of-rustc_deprecated.rs:7:1 --> $DIR/issue-43106-gating-of-rustc_deprecated.rs:7:1
| |
LL | #![rustc_deprecated()] LL | #![rustc_deprecated()]
| ^^^^^^^^^^^^^^^^^^^^^^ | ^^^^^^^^^^^^^^^^^^^^^^
error[E0734]: stability attributes may not be used outside of the standard library error[E0542]: missing 'since'
--> $DIR/issue-43106-gating-of-rustc_deprecated.rs:10:1 --> $DIR/issue-43106-gating-of-rustc_deprecated.rs:7:1
|
LL | #![rustc_deprecated()]
| ^^^^^^^^^^^^^^^^^^^^^^
error[E0542]: missing 'since'
--> $DIR/issue-43106-gating-of-rustc_deprecated.rs:11:1
| |
LL | #[rustc_deprecated()] LL | #[rustc_deprecated()]
| ^^^^^^^^^^^^^^^^^^^^^ | ^^^^^^^^^^^^^^^^^^^^^
error[E0734]: stability attributes may not be used outside of the standard library error[E0542]: missing 'since'
--> $DIR/issue-43106-gating-of-rustc_deprecated.rs:13:17 --> $DIR/issue-43106-gating-of-rustc_deprecated.rs:16:9
| |
LL | mod inner { #![rustc_deprecated()] } LL | #![rustc_deprecated()]
| ^^^^^^^^^^^^^^^^^^^^^^ | ^^^^^^^^^^^^^^^^^^^^^^
error[E0734]: stability attributes may not be used outside of the standard library error[E0542]: missing 'since'
--> $DIR/issue-43106-gating-of-rustc_deprecated.rs:16:5 --> $DIR/issue-43106-gating-of-rustc_deprecated.rs:21:5
| |
LL | #[rustc_deprecated()] fn f() { } LL | #[rustc_deprecated()]
| ^^^^^^^^^^^^^^^^^^^^^ | ^^^^^^^^^^^^^^^^^^^^^
error[E0734]: stability attributes may not be used outside of the standard library error[E0542]: missing 'since'
--> $DIR/issue-43106-gating-of-rustc_deprecated.rs:19:5
|
LL | #[rustc_deprecated()] struct S;
| ^^^^^^^^^^^^^^^^^^^^^
error[E0734]: stability attributes may not be used outside of the standard library
--> $DIR/issue-43106-gating-of-rustc_deprecated.rs:19:5
|
LL | #[rustc_deprecated()] struct S;
| ^^^^^^^^^^^^^^^^^^^^^
error[E0734]: stability attributes may not be used outside of the standard library
--> $DIR/issue-43106-gating-of-rustc_deprecated.rs:23:5
|
LL | #[rustc_deprecated()] type T = S;
| ^^^^^^^^^^^^^^^^^^^^^
error[E0734]: stability attributes may not be used outside of the standard library
--> $DIR/issue-43106-gating-of-rustc_deprecated.rs:26:5 --> $DIR/issue-43106-gating-of-rustc_deprecated.rs:26:5
| |
LL | #[rustc_deprecated()] impl S { } LL | #[rustc_deprecated()]
| ^^^^^^^^^^^^^^^^^^^^^ | ^^^^^^^^^^^^^^^^^^^^^
error: aborting due to 8 previous errors error[E0542]: missing 'since'
--> $DIR/issue-43106-gating-of-rustc_deprecated.rs:26:5
|
LL | #[rustc_deprecated()]
| ^^^^^^^^^^^^^^^^^^^^^
For more information about this error, try `rustc --explain E0734`. error[E0542]: missing 'since'
--> $DIR/issue-43106-gating-of-rustc_deprecated.rs:32:5
|
LL | #[rustc_deprecated()]
| ^^^^^^^^^^^^^^^^^^^^^
error[E0542]: missing 'since'
--> $DIR/issue-43106-gating-of-rustc_deprecated.rs:37:5
|
LL | #[rustc_deprecated()]
| ^^^^^^^^^^^^^^^^^^^^^
error: aborting due to 15 previous errors
Some errors have detailed explanations: E0542, E0734.
For more information about an error, try `rustc --explain E0542`.

View file

@ -10,21 +10,26 @@
#[stable()] #[stable()]
//~^ ERROR stability attributes may not be used outside of the standard library //~^ ERROR stability attributes may not be used outside of the standard library
mod stable { mod stable {
mod inner { #![stable()] } mod inner {
//~^ ERROR stability attributes may not be used outside of the standard library #![stable()]
#[stable()] fn f() { }
//~^ ERROR stability attributes may not be used outside of the standard library
#[stable()] struct S;
//~^ ERROR stability attributes may not be used outside of the standard library
//~| ERROR stability attributes may not be used outside of the standard library
#[stable()] type T = S;
//~^ ERROR stability attributes may not be used outside of the standard library
#[stable()] impl S { }
//~^ ERROR stability attributes may not be used outside of the standard library //~^ ERROR stability attributes may not be used outside of the standard library
} }
#[stable()]
//~^ ERROR stability attributes may not be used outside of the standard library
fn f() {}
#[stable()]
//~^ ERROR stability attributes may not be used outside of the standard library
struct S;
#[stable()]
//~^ ERROR stability attributes may not be used outside of the standard library
type T = S;
#[stable()]
//~^ ERROR stability attributes may not be used outside of the standard library
impl S {}
}
fn main() {} fn main() {}

View file

@ -1,9 +1,33 @@
error[E0734]: stability attributes may not be used outside of the standard library error[E0734]: stability attributes may not be used outside of the standard library
--> $DIR/issue-43106-gating-of-stable.rs:7:1 --> $DIR/issue-43106-gating-of-stable.rs:14:9
| |
LL | #![stable()] LL | #![stable()]
| ^^^^^^^^^^^^ | ^^^^^^^^^^^^
error[E0734]: stability attributes may not be used outside of the standard library
--> $DIR/issue-43106-gating-of-stable.rs:18:5
|
LL | #[stable()]
| ^^^^^^^^^^^
error[E0734]: stability attributes may not be used outside of the standard library
--> $DIR/issue-43106-gating-of-stable.rs:22:5
|
LL | #[stable()]
| ^^^^^^^^^^^
error[E0734]: stability attributes may not be used outside of the standard library
--> $DIR/issue-43106-gating-of-stable.rs:26:5
|
LL | #[stable()]
| ^^^^^^^^^^^
error[E0734]: stability attributes may not be used outside of the standard library
--> $DIR/issue-43106-gating-of-stable.rs:30:5
|
LL | #[stable()]
| ^^^^^^^^^^^
error[E0734]: stability attributes may not be used outside of the standard library error[E0734]: stability attributes may not be used outside of the standard library
--> $DIR/issue-43106-gating-of-stable.rs:10:1 --> $DIR/issue-43106-gating-of-stable.rs:10:1
| |
@ -11,41 +35,11 @@ LL | #[stable()]
| ^^^^^^^^^^^ | ^^^^^^^^^^^
error[E0734]: stability attributes may not be used outside of the standard library error[E0734]: stability attributes may not be used outside of the standard library
--> $DIR/issue-43106-gating-of-stable.rs:13:17 --> $DIR/issue-43106-gating-of-stable.rs:7:1
| |
LL | mod inner { #![stable()] } LL | #![stable()]
| ^^^^^^^^^^^^ | ^^^^^^^^^^^^
error[E0734]: stability attributes may not be used outside of the standard library error: aborting due to 7 previous errors
--> $DIR/issue-43106-gating-of-stable.rs:16:5
|
LL | #[stable()] fn f() { }
| ^^^^^^^^^^^
error[E0734]: stability attributes may not be used outside of the standard library
--> $DIR/issue-43106-gating-of-stable.rs:19:5
|
LL | #[stable()] struct S;
| ^^^^^^^^^^^
error[E0734]: stability attributes may not be used outside of the standard library
--> $DIR/issue-43106-gating-of-stable.rs:19:5
|
LL | #[stable()] struct S;
| ^^^^^^^^^^^
error[E0734]: stability attributes may not be used outside of the standard library
--> $DIR/issue-43106-gating-of-stable.rs:23:5
|
LL | #[stable()] type T = S;
| ^^^^^^^^^^^
error[E0734]: stability attributes may not be used outside of the standard library
--> $DIR/issue-43106-gating-of-stable.rs:26:5
|
LL | #[stable()] impl S { }
| ^^^^^^^^^^^
error: aborting due to 8 previous errors
For more information about this error, try `rustc --explain E0734`. For more information about this error, try `rustc --explain E0734`.

View file

@ -10,21 +10,26 @@
#[unstable()] #[unstable()]
//~^ ERROR stability attributes may not be used outside of the standard library //~^ ERROR stability attributes may not be used outside of the standard library
mod unstable { mod unstable {
mod inner { #![unstable()] } mod inner {
//~^ ERROR stability attributes may not be used outside of the standard library #![unstable()]
#[unstable()] fn f() { }
//~^ ERROR stability attributes may not be used outside of the standard library
#[unstable()] struct S;
//~^ ERROR stability attributes may not be used outside of the standard library
//~| ERROR stability attributes may not be used outside of the standard library
#[unstable()] type T = S;
//~^ ERROR stability attributes may not be used outside of the standard library
#[unstable()] impl S { }
//~^ ERROR stability attributes may not be used outside of the standard library //~^ ERROR stability attributes may not be used outside of the standard library
} }
#[unstable()]
//~^ ERROR stability attributes may not be used outside of the standard library
fn f() {}
#[unstable()]
//~^ ERROR stability attributes may not be used outside of the standard library
struct S;
#[unstable()]
//~^ ERROR stability attributes may not be used outside of the standard library
type T = S;
#[unstable()]
//~^ ERROR stability attributes may not be used outside of the standard library
impl S {}
}
fn main() {} fn main() {}

View file

@ -1,9 +1,33 @@
error[E0734]: stability attributes may not be used outside of the standard library error[E0734]: stability attributes may not be used outside of the standard library
--> $DIR/issue-43106-gating-of-unstable.rs:7:1 --> $DIR/issue-43106-gating-of-unstable.rs:14:9
| |
LL | #![unstable()] LL | #![unstable()]
| ^^^^^^^^^^^^^^ | ^^^^^^^^^^^^^^
error[E0734]: stability attributes may not be used outside of the standard library
--> $DIR/issue-43106-gating-of-unstable.rs:18:5
|
LL | #[unstable()]
| ^^^^^^^^^^^^^
error[E0734]: stability attributes may not be used outside of the standard library
--> $DIR/issue-43106-gating-of-unstable.rs:22:5
|
LL | #[unstable()]
| ^^^^^^^^^^^^^
error[E0734]: stability attributes may not be used outside of the standard library
--> $DIR/issue-43106-gating-of-unstable.rs:26:5
|
LL | #[unstable()]
| ^^^^^^^^^^^^^
error[E0734]: stability attributes may not be used outside of the standard library
--> $DIR/issue-43106-gating-of-unstable.rs:30:5
|
LL | #[unstable()]
| ^^^^^^^^^^^^^
error[E0734]: stability attributes may not be used outside of the standard library error[E0734]: stability attributes may not be used outside of the standard library
--> $DIR/issue-43106-gating-of-unstable.rs:10:1 --> $DIR/issue-43106-gating-of-unstable.rs:10:1
| |
@ -11,41 +35,11 @@ LL | #[unstable()]
| ^^^^^^^^^^^^^ | ^^^^^^^^^^^^^
error[E0734]: stability attributes may not be used outside of the standard library error[E0734]: stability attributes may not be used outside of the standard library
--> $DIR/issue-43106-gating-of-unstable.rs:13:17 --> $DIR/issue-43106-gating-of-unstable.rs:7:1
| |
LL | mod inner { #![unstable()] } LL | #![unstable()]
| ^^^^^^^^^^^^^^ | ^^^^^^^^^^^^^^
error[E0734]: stability attributes may not be used outside of the standard library error: aborting due to 7 previous errors
--> $DIR/issue-43106-gating-of-unstable.rs:16:5
|
LL | #[unstable()] fn f() { }
| ^^^^^^^^^^^^^
error[E0734]: stability attributes may not be used outside of the standard library
--> $DIR/issue-43106-gating-of-unstable.rs:19:5
|
LL | #[unstable()] struct S;
| ^^^^^^^^^^^^^
error[E0734]: stability attributes may not be used outside of the standard library
--> $DIR/issue-43106-gating-of-unstable.rs:19:5
|
LL | #[unstable()] struct S;
| ^^^^^^^^^^^^^
error[E0734]: stability attributes may not be used outside of the standard library
--> $DIR/issue-43106-gating-of-unstable.rs:23:5
|
LL | #[unstable()] type T = S;
| ^^^^^^^^^^^^^
error[E0734]: stability attributes may not be used outside of the standard library
--> $DIR/issue-43106-gating-of-unstable.rs:26:5
|
LL | #[unstable()] impl S { }
| ^^^^^^^^^^^^^
error: aborting due to 8 previous errors
For more information about this error, try `rustc --explain E0734`. For more information about this error, try `rustc --explain E0734`.

View file

@ -3,4 +3,5 @@
#[unstable()] //~ ERROR: stability attributes may not be used #[unstable()] //~ ERROR: stability attributes may not be used
#[stable()] //~ ERROR: stability attributes may not be used #[stable()] //~ ERROR: stability attributes may not be used
#[rustc_deprecated()] //~ ERROR: stability attributes may not be used #[rustc_deprecated()] //~ ERROR: stability attributes may not be used
//~^ ERROR missing 'since'
fn main() {} fn main() {}

View file

@ -16,6 +16,13 @@ error[E0734]: stability attributes may not be used outside of the standard libra
LL | #[rustc_deprecated()] LL | #[rustc_deprecated()]
| ^^^^^^^^^^^^^^^^^^^^^ | ^^^^^^^^^^^^^^^^^^^^^
error: aborting due to 3 previous errors error[E0542]: missing 'since'
--> $DIR/stability-attribute-non-staged-force-unstable.rs:5:1
|
LL | #[rustc_deprecated()]
| ^^^^^^^^^^^^^^^^^^^^^
For more information about this error, try `rustc --explain E0734`. error: aborting due to 4 previous errors
Some errors have detailed explanations: E0542, E0734.
For more information about an error, try `rustc --explain E0542`.

View file

@ -1,4 +1,5 @@
#[unstable()] //~ ERROR: stability attributes may not be used #[unstable()] //~ ERROR: stability attributes may not be used
#[stable()] //~ ERROR: stability attributes may not be used #[stable()] //~ ERROR: stability attributes may not be used
#[rustc_deprecated()] //~ ERROR: stability attributes may not be used #[rustc_deprecated()] //~ ERROR: stability attributes may not be used
//~^ ERROR missing 'since'
fn main() {} fn main() {}

View file

@ -16,6 +16,13 @@ error[E0734]: stability attributes may not be used outside of the standard libra
LL | #[rustc_deprecated()] LL | #[rustc_deprecated()]
| ^^^^^^^^^^^^^^^^^^^^^ | ^^^^^^^^^^^^^^^^^^^^^
error: aborting due to 3 previous errors error[E0542]: missing 'since'
--> $DIR/stability-attribute-non-staged.rs:3:1
|
LL | #[rustc_deprecated()]
| ^^^^^^^^^^^^^^^^^^^^^
For more information about this error, try `rustc --explain E0734`. error: aborting due to 4 previous errors
Some errors have detailed explanations: E0542, E0734.
For more information about an error, try `rustc --explain E0542`.