mirror of
https://github.com/rust-lang/rust.git
synced 2026-04-27 18:57:42 +03:00
Rollup merge of #145792 - scrabsha:push-umpytyxunpxq, r=jdonszelmann
Use attribute name in message for "outer attr used as inner attr" errors
This commit is contained in:
@@ -86,6 +86,12 @@ attr_parsing_invalid_repr_hint_no_value =
|
||||
attr_parsing_invalid_since =
|
||||
'since' must be a Rust version number, such as "1.31.0"
|
||||
|
||||
attr_parsing_invalid_style = {$is_used_as_inner ->
|
||||
[false] crate-level attribute should be an inner attribute: add an exclamation mark: `#![{$name}]`
|
||||
*[other] the `#![{$name}]` attribute can only be used at the crate root
|
||||
}
|
||||
.note = This attribute does not have an `!`, which means it is applied to this {$target}
|
||||
|
||||
attr_parsing_link_ordinal_out_of_range = ordinal value in `link_ordinal` is too large: `{$ordinal}`
|
||||
.note = the value may not exceed `u16::MAX`
|
||||
|
||||
|
||||
@@ -1,3 +1,5 @@
|
||||
use rustc_feature::AttributeType;
|
||||
|
||||
use super::prelude::*;
|
||||
|
||||
pub(crate) struct CrateNameParser;
|
||||
@@ -7,6 +9,7 @@ impl<S: Stage> SingleAttributeParser<S> for CrateNameParser {
|
||||
const ATTRIBUTE_ORDER: AttributeOrder = AttributeOrder::KeepOutermost;
|
||||
const ON_DUPLICATE: OnDuplicate<S> = OnDuplicate::WarnButFutureError;
|
||||
const TEMPLATE: AttributeTemplate = template!(NameValueStr: "name");
|
||||
const TYPE: AttributeType = AttributeType::CrateLevel;
|
||||
|
||||
// FIXME: crate name is allowed on all targets and ignored,
|
||||
// even though it should only be valid on crates of course
|
||||
|
||||
@@ -12,11 +12,15 @@
|
||||
//! - [`CombineAttributeParser`](crate::attributes::CombineAttributeParser): makes it easy to implement an attribute which should combine the
|
||||
//! contents of attributes, if an attribute appear multiple times in a list
|
||||
//!
|
||||
//! By default, attributes are allowed anywhere. When adding an attribute that should only be used
|
||||
//! at the crate root, consider setting the `TYPE` in the parser trait to
|
||||
//! [`AttributeType::CrateLevel`](rustc_feature::AttributeType::CrateLevel).
|
||||
//!
|
||||
//! Attributes should be added to `crate::context::ATTRIBUTE_PARSERS` to be parsed.
|
||||
|
||||
use std::marker::PhantomData;
|
||||
|
||||
use rustc_feature::{AttributeTemplate, template};
|
||||
use rustc_feature::{AttributeTemplate, AttributeType, template};
|
||||
use rustc_hir::attrs::AttributeKind;
|
||||
use rustc_span::{Span, Symbol};
|
||||
use thin_vec::ThinVec;
|
||||
@@ -88,6 +92,8 @@ pub(crate) trait AttributeParser<S: Stage>: Default + 'static {
|
||||
|
||||
const ALLOWED_TARGETS: AllowedTargets;
|
||||
|
||||
const TYPE: AttributeType = AttributeType::Normal;
|
||||
|
||||
/// The parser has gotten a chance to accept the attributes on an item,
|
||||
/// here it can produce an attribute.
|
||||
///
|
||||
@@ -129,6 +135,8 @@ pub(crate) trait SingleAttributeParser<S: Stage>: 'static {
|
||||
/// The template this attribute parser should implement. Used for diagnostics.
|
||||
const TEMPLATE: AttributeTemplate;
|
||||
|
||||
const TYPE: AttributeType = AttributeType::Normal;
|
||||
|
||||
/// Converts a single syntactical attribute to a single semantic attribute, or [`AttributeKind`]
|
||||
fn convert(cx: &mut AcceptContext<'_, '_, S>, args: &ArgParser<'_>) -> Option<AttributeKind>;
|
||||
}
|
||||
@@ -175,6 +183,8 @@ impl<T: SingleAttributeParser<S>, S: Stage> AttributeParser<S> for Single<T, S>
|
||||
)];
|
||||
const ALLOWED_TARGETS: AllowedTargets = T::ALLOWED_TARGETS;
|
||||
|
||||
const TYPE: AttributeType = T::TYPE;
|
||||
|
||||
fn finalize(self, _cx: &FinalizeContext<'_, '_, S>) -> Option<AttributeKind> {
|
||||
Some(self.1?.0)
|
||||
}
|
||||
@@ -259,6 +269,7 @@ pub(crate) trait NoArgsAttributeParser<S: Stage>: 'static {
|
||||
const PATH: &[Symbol];
|
||||
const ON_DUPLICATE: OnDuplicate<S>;
|
||||
const ALLOWED_TARGETS: AllowedTargets;
|
||||
const TYPE: AttributeType = AttributeType::Normal;
|
||||
|
||||
/// Create the [`AttributeKind`] given attribute's [`Span`].
|
||||
const CREATE: fn(Span) -> AttributeKind;
|
||||
@@ -278,6 +289,7 @@ impl<T: NoArgsAttributeParser<S>, S: Stage> SingleAttributeParser<S> for Without
|
||||
const ON_DUPLICATE: OnDuplicate<S> = T::ON_DUPLICATE;
|
||||
const ALLOWED_TARGETS: AllowedTargets = T::ALLOWED_TARGETS;
|
||||
const TEMPLATE: AttributeTemplate = template!(Word);
|
||||
const TYPE: AttributeType = T::TYPE;
|
||||
|
||||
fn convert(cx: &mut AcceptContext<'_, '_, S>, args: &ArgParser<'_>) -> Option<AttributeKind> {
|
||||
if let Err(span) = args.no_args() {
|
||||
@@ -311,6 +323,8 @@ pub(crate) trait CombineAttributeParser<S: Stage>: 'static {
|
||||
/// The template this attribute parser should implement. Used for diagnostics.
|
||||
const TEMPLATE: AttributeTemplate;
|
||||
|
||||
const TYPE: AttributeType = AttributeType::Normal;
|
||||
|
||||
/// Converts a single syntactical attribute to a number of elements of the semantic attribute, or [`AttributeKind`]
|
||||
fn extend<'c>(
|
||||
cx: &'c mut AcceptContext<'_, '_, S>,
|
||||
@@ -346,6 +360,7 @@ impl<T: CombineAttributeParser<S>, S: Stage> AttributeParser<S> for Combine<T, S
|
||||
group.items.extend(T::extend(cx, args))
|
||||
})];
|
||||
const ALLOWED_TARGETS: AllowedTargets = T::ALLOWED_TARGETS;
|
||||
const TYPE: AttributeType = T::TYPE;
|
||||
|
||||
fn finalize(self, _cx: &FinalizeContext<'_, '_, S>) -> Option<AttributeKind> {
|
||||
if let Some(first_span) = self.first_span {
|
||||
|
||||
@@ -1,5 +1,7 @@
|
||||
use std::mem;
|
||||
|
||||
use rustc_feature::AttributeType;
|
||||
|
||||
use super::prelude::*;
|
||||
use crate::attributes::{
|
||||
AttributeOrder, NoArgsAttributeParser, OnDuplicate, SingleAttributeParser,
|
||||
@@ -154,6 +156,7 @@ impl<S: Stage> NoArgsAttributeParser<S> for CoherenceIsCoreParser {
|
||||
const PATH: &[Symbol] = &[sym::rustc_coherence_is_core];
|
||||
const ON_DUPLICATE: OnDuplicate<S> = OnDuplicate::Error;
|
||||
const ALLOWED_TARGETS: AllowedTargets = AllowedTargets::AllowList(&[Allow(Target::Crate)]);
|
||||
const TYPE: AttributeType = AttributeType::CrateLevel;
|
||||
const CREATE: fn(Span) -> AttributeKind = |_| AttributeKind::CoherenceIsCore;
|
||||
}
|
||||
|
||||
|
||||
@@ -4,12 +4,12 @@
|
||||
use std::sync::LazyLock;
|
||||
|
||||
use private::Sealed;
|
||||
use rustc_ast::{AttrStyle, MetaItemLit, NodeId};
|
||||
use rustc_ast::{AttrStyle, CRATE_NODE_ID, MetaItemLit, NodeId};
|
||||
use rustc_errors::{Diag, Diagnostic, Level};
|
||||
use rustc_feature::AttributeTemplate;
|
||||
use rustc_feature::{AttributeTemplate, AttributeType};
|
||||
use rustc_hir::attrs::AttributeKind;
|
||||
use rustc_hir::lints::{AttributeLint, AttributeLintKind};
|
||||
use rustc_hir::{AttrPath, HirId};
|
||||
use rustc_hir::{AttrPath, CRATE_HIR_ID, HirId};
|
||||
use rustc_session::Session;
|
||||
use rustc_span::{ErrorGuaranteed, Span, Symbol};
|
||||
|
||||
@@ -80,6 +80,7 @@ pub(super) struct GroupTypeInnerAccept<S: Stage> {
|
||||
pub(super) template: AttributeTemplate,
|
||||
pub(super) accept_fn: AcceptFn<S>,
|
||||
pub(super) allowed_targets: AllowedTargets,
|
||||
pub(super) attribute_type: AttributeType,
|
||||
}
|
||||
|
||||
type AcceptFn<S> =
|
||||
@@ -129,6 +130,7 @@ mod late {
|
||||
})
|
||||
}),
|
||||
allowed_targets: <$names as crate::attributes::AttributeParser<$stage>>::ALLOWED_TARGETS,
|
||||
attribute_type: <$names as crate::attributes::AttributeParser<$stage>>::TYPE,
|
||||
});
|
||||
}
|
||||
|
||||
@@ -250,6 +252,8 @@ fn emit_err<'sess>(
|
||||
) -> ErrorGuaranteed;
|
||||
|
||||
fn should_emit(&self) -> ShouldEmit;
|
||||
|
||||
fn id_is_crate_root(id: Self::Id) -> bool;
|
||||
}
|
||||
|
||||
// allow because it's a sealed trait
|
||||
@@ -271,6 +275,10 @@ fn emit_err<'sess>(
|
||||
fn should_emit(&self) -> ShouldEmit {
|
||||
self.emit_errors
|
||||
}
|
||||
|
||||
fn id_is_crate_root(id: Self::Id) -> bool {
|
||||
id == CRATE_NODE_ID
|
||||
}
|
||||
}
|
||||
|
||||
// allow because it's a sealed trait
|
||||
@@ -292,6 +300,10 @@ fn emit_err<'sess>(
|
||||
fn should_emit(&self) -> ShouldEmit {
|
||||
ShouldEmit::ErrorsAndLints
|
||||
}
|
||||
|
||||
fn id_is_crate_root(id: Self::Id) -> bool {
|
||||
id == CRATE_HIR_ID
|
||||
}
|
||||
}
|
||||
|
||||
/// used when parsing attributes for miscellaneous things *before* ast lowering
|
||||
|
||||
@@ -271,8 +271,8 @@ pub fn parse_attribute_list(
|
||||
};
|
||||
|
||||
(accept.accept_fn)(&mut cx, args);
|
||||
|
||||
if !matches!(self.stage.should_emit(), ShouldEmit::Nothing) {
|
||||
if !matches!(cx.stage.should_emit(), ShouldEmit::Nothing) {
|
||||
Self::check_type(accept.attribute_type, target, &mut cx);
|
||||
self.check_target(
|
||||
path.get_attribute_path(),
|
||||
attr.span,
|
||||
|
||||
@@ -66,5 +66,19 @@ pub fn emit_attribute_lint<L: LintEmitter>(lint: &AttributeLint<L::Id>, lint_emi
|
||||
attr_span: *span,
|
||||
},
|
||||
),
|
||||
|
||||
&AttributeLintKind::InvalidStyle { ref name, is_used_as_inner, target, target_span } => {
|
||||
lint_emitter.emit_node_span_lint(
|
||||
rustc_session::lint::builtin::UNUSED_ATTRIBUTES,
|
||||
*id,
|
||||
*span,
|
||||
session_diagnostics::InvalidAttrStyle {
|
||||
name: name.clone(),
|
||||
is_used_as_inner,
|
||||
target_span: (!is_used_as_inner).then_some(target_span),
|
||||
target,
|
||||
},
|
||||
)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -6,7 +6,7 @@
|
||||
Applicability, Diag, DiagArgValue, DiagCtxtHandle, Diagnostic, EmissionGuarantee, Level,
|
||||
};
|
||||
use rustc_feature::AttributeTemplate;
|
||||
use rustc_hir::AttrPath;
|
||||
use rustc_hir::{AttrPath, Target};
|
||||
use rustc_macros::{Diagnostic, LintDiagnostic, Subdiagnostic};
|
||||
use rustc_span::{Span, Symbol};
|
||||
|
||||
@@ -826,3 +826,13 @@ pub(crate) struct SuffixedLiteralInAttribute {
|
||||
#[primary_span]
|
||||
pub span: Span,
|
||||
}
|
||||
|
||||
#[derive(LintDiagnostic)]
|
||||
#[diag(attr_parsing_invalid_style)]
|
||||
pub(crate) struct InvalidAttrStyle {
|
||||
pub name: AttrPath,
|
||||
pub is_used_as_inner: bool,
|
||||
#[note]
|
||||
pub target_span: Option<Span>,
|
||||
pub target: Target,
|
||||
}
|
||||
|
||||
@@ -1,13 +1,14 @@
|
||||
use std::borrow::Cow;
|
||||
|
||||
use rustc_ast::AttrStyle;
|
||||
use rustc_errors::DiagArgValue;
|
||||
use rustc_feature::Features;
|
||||
use rustc_feature::{AttributeType, Features};
|
||||
use rustc_hir::lints::{AttributeLint, AttributeLintKind};
|
||||
use rustc_hir::{AttrPath, MethodKind, Target};
|
||||
use rustc_span::Span;
|
||||
|
||||
use crate::AttributeParser;
|
||||
use crate::context::Stage;
|
||||
use crate::context::{AcceptContext, Stage};
|
||||
use crate::session_diagnostics::InvalidTarget;
|
||||
|
||||
#[derive(Debug)]
|
||||
@@ -68,7 +69,7 @@ pub(crate) enum Policy {
|
||||
Error(Target),
|
||||
}
|
||||
|
||||
impl<S: Stage> AttributeParser<'_, S> {
|
||||
impl<'sess, S: Stage> AttributeParser<'sess, S> {
|
||||
pub(crate) fn check_target(
|
||||
&self,
|
||||
attr_name: AttrPath,
|
||||
@@ -111,6 +112,32 @@ pub(crate) fn check_target(
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
pub(crate) fn check_type(
|
||||
attribute_type: AttributeType,
|
||||
target: Target,
|
||||
cx: &mut AcceptContext<'_, 'sess, S>,
|
||||
) {
|
||||
let is_crate_root = S::id_is_crate_root(cx.target_id);
|
||||
|
||||
if is_crate_root {
|
||||
return;
|
||||
}
|
||||
|
||||
if attribute_type != AttributeType::CrateLevel {
|
||||
return;
|
||||
}
|
||||
|
||||
let lint = AttributeLintKind::InvalidStyle {
|
||||
name: cx.attr_path.clone(),
|
||||
is_used_as_inner: cx.attr_style == AttrStyle::Inner,
|
||||
target,
|
||||
target_span: cx.target_span,
|
||||
};
|
||||
let attr_span = cx.attr_span;
|
||||
|
||||
cx.emit_lint(lint, attr_span);
|
||||
}
|
||||
}
|
||||
|
||||
/// Takes a list of `allowed_targets` for an attribute, and the `target` the attribute was applied to.
|
||||
|
||||
@@ -35,4 +35,5 @@ pub enum AttributeLintKind {
|
||||
IllFormedAttributeInput { suggestions: Vec<String> },
|
||||
EmptyAttribute { first_span: Span },
|
||||
InvalidTarget { name: AttrPath, target: Target, applied: Vec<String>, only: &'static str },
|
||||
InvalidStyle { name: AttrPath, is_used_as_inner: bool, target: Target, target_span: Span },
|
||||
}
|
||||
|
||||
@@ -462,8 +462,10 @@ passes_object_lifetime_err =
|
||||
{$repr}
|
||||
|
||||
passes_outer_crate_level_attr =
|
||||
crate-level attribute should be an inner attribute: add an exclamation mark: `#![foo]`
|
||||
crate-level attribute should be an inner attribute
|
||||
|
||||
passes_outer_crate_level_attr_suggestion =
|
||||
add a `!`
|
||||
|
||||
passes_panic_unwind_without_std =
|
||||
unwinding panics are not supported without std
|
||||
|
||||
@@ -369,24 +369,7 @@ fn check_attributes(
|
||||
|
||||
if hir_id != CRATE_HIR_ID {
|
||||
match attr {
|
||||
// FIXME(jdonszelmann) move to attribute parsing when validation gets better there
|
||||
&Attribute::Parsed(AttributeKind::CrateName {
|
||||
attr_span: span, style, ..
|
||||
}) => match style {
|
||||
ast::AttrStyle::Outer => self.tcx.emit_node_span_lint(
|
||||
UNUSED_ATTRIBUTES,
|
||||
hir_id,
|
||||
span,
|
||||
errors::OuterCrateLevelAttr,
|
||||
),
|
||||
ast::AttrStyle::Inner => self.tcx.emit_node_span_lint(
|
||||
UNUSED_ATTRIBUTES,
|
||||
hir_id,
|
||||
span,
|
||||
errors::InnerCrateLevelAttr,
|
||||
),
|
||||
},
|
||||
Attribute::Parsed(_) => { /* not crate-level */ }
|
||||
Attribute::Parsed(_) => { /* Already validated. */ }
|
||||
Attribute::Unparsed(attr) => {
|
||||
// FIXME(jdonszelmann): remove once all crate-level attrs are parsed and caught by
|
||||
// the above
|
||||
@@ -397,12 +380,26 @@ fn check_attributes(
|
||||
.and_then(|ident| BUILTIN_ATTRIBUTE_MAP.get(&ident.name))
|
||||
{
|
||||
match attr.style {
|
||||
ast::AttrStyle::Outer => self.tcx.emit_node_span_lint(
|
||||
UNUSED_ATTRIBUTES,
|
||||
hir_id,
|
||||
attr.span,
|
||||
errors::OuterCrateLevelAttr,
|
||||
),
|
||||
ast::AttrStyle::Outer => {
|
||||
let attr_span = attr.span;
|
||||
let bang_position = self
|
||||
.tcx
|
||||
.sess
|
||||
.source_map()
|
||||
.span_until_char(attr_span, '[')
|
||||
.shrink_to_hi();
|
||||
|
||||
self.tcx.emit_node_span_lint(
|
||||
UNUSED_ATTRIBUTES,
|
||||
hir_id,
|
||||
attr.span,
|
||||
errors::OuterCrateLevelAttr {
|
||||
suggestion: errors::OuterCrateLevelAttrSuggestion {
|
||||
bang_position,
|
||||
},
|
||||
},
|
||||
)
|
||||
}
|
||||
ast::AttrStyle::Inner => self.tcx.emit_node_span_lint(
|
||||
UNUSED_ATTRIBUTES,
|
||||
hir_id,
|
||||
@@ -1851,12 +1848,24 @@ fn check_unused_attribute(&self, hir_id: HirId, attr: &Attribute, style: Option<
|
||||
{
|
||||
if hir_id != CRATE_HIR_ID {
|
||||
match style {
|
||||
Some(ast::AttrStyle::Outer) => self.tcx.emit_node_span_lint(
|
||||
UNUSED_ATTRIBUTES,
|
||||
hir_id,
|
||||
attr.span(),
|
||||
errors::OuterCrateLevelAttr,
|
||||
),
|
||||
Some(ast::AttrStyle::Outer) => {
|
||||
let attr_span = attr.span();
|
||||
let bang_position = self
|
||||
.tcx
|
||||
.sess
|
||||
.source_map()
|
||||
.span_until_char(attr_span, '[')
|
||||
.shrink_to_hi();
|
||||
|
||||
self.tcx.emit_node_span_lint(
|
||||
UNUSED_ATTRIBUTES,
|
||||
hir_id,
|
||||
attr_span,
|
||||
errors::OuterCrateLevelAttr {
|
||||
suggestion: errors::OuterCrateLevelAttrSuggestion { bang_position },
|
||||
},
|
||||
)
|
||||
}
|
||||
Some(ast::AttrStyle::Inner) | None => self.tcx.emit_node_span_lint(
|
||||
UNUSED_ATTRIBUTES,
|
||||
hir_id,
|
||||
|
||||
@@ -64,7 +64,17 @@ pub(crate) struct MixedExportNameAndNoMangle {
|
||||
|
||||
#[derive(LintDiagnostic)]
|
||||
#[diag(passes_outer_crate_level_attr)]
|
||||
pub(crate) struct OuterCrateLevelAttr;
|
||||
pub(crate) struct OuterCrateLevelAttr {
|
||||
#[subdiagnostic]
|
||||
pub suggestion: OuterCrateLevelAttrSuggestion,
|
||||
}
|
||||
|
||||
#[derive(Subdiagnostic)]
|
||||
#[multipart_suggestion(passes_outer_crate_level_attr_suggestion, style = "verbose")]
|
||||
pub(crate) struct OuterCrateLevelAttrSuggestion {
|
||||
#[suggestion_part(code = "!")]
|
||||
pub bang_position: Span,
|
||||
}
|
||||
|
||||
#[derive(LintDiagnostic)]
|
||||
#[diag(passes_inner_crate_level_attr)]
|
||||
|
||||
@@ -0,0 +1,10 @@
|
||||
#![deny(unused)]
|
||||
#[crate_name = "owo"]
|
||||
//~^ ERROR: crate-level attribute should be an inner attribute: add an exclamation mark: `#![crate_name]`
|
||||
|
||||
fn main() {}
|
||||
|
||||
mod inner {
|
||||
#![crate_name = "iwi"]
|
||||
//~^ ERROR: the `#![crate_name]` attribute can only be used at the crate root
|
||||
}
|
||||
@@ -0,0 +1,26 @@
|
||||
error: crate-level attribute should be an inner attribute: add an exclamation mark: `#![crate_name]`
|
||||
--> $DIR/crate-only-as-outer.rs:2:1
|
||||
|
|
||||
LL | #[crate_name = "owo"]
|
||||
| ^^^^^^^^^^^^^^^^^^^^^
|
||||
|
|
||||
note: This attribute does not have an `!`, which means it is applied to this function
|
||||
--> $DIR/crate-only-as-outer.rs:5:1
|
||||
|
|
||||
LL | fn main() {}
|
||||
| ^^^^^^^^^^^^
|
||||
note: the lint level is defined here
|
||||
--> $DIR/crate-only-as-outer.rs:1:9
|
||||
|
|
||||
LL | #![deny(unused)]
|
||||
| ^^^^^^
|
||||
= note: `#[deny(unused_attributes)]` implied by `#[deny(unused)]`
|
||||
|
||||
error: the `#![crate_name]` attribute can only be used at the crate root
|
||||
--> $DIR/crate-only-as-outer.rs:8:5
|
||||
|
|
||||
LL | #![crate_name = "iwi"]
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^
|
||||
|
||||
error: aborting due to 2 previous errors
|
||||
|
||||
@@ -482,21 +482,26 @@ mod inner { #![no_implicit_prelude] }
|
||||
|
||||
#[reexport_test_harness_main = "2900"]
|
||||
//~^ WARN crate-level attribute should be
|
||||
//~| HELP add a `!`
|
||||
mod reexport_test_harness_main {
|
||||
mod inner { #![reexport_test_harness_main="2900"] }
|
||||
//~^ WARN crate-level attribute should be
|
||||
|
||||
#[reexport_test_harness_main = "2900"] fn f() { }
|
||||
//~^ WARN crate-level attribute should be
|
||||
//~| HELP add a `!`
|
||||
|
||||
#[reexport_test_harness_main = "2900"] struct S;
|
||||
//~^ WARN crate-level attribute should be
|
||||
//~| HELP add a `!`
|
||||
|
||||
#[reexport_test_harness_main = "2900"] type T = S;
|
||||
//~^ WARN crate-level attribute should be
|
||||
//~| HELP add a `!`
|
||||
|
||||
#[reexport_test_harness_main = "2900"] impl S { }
|
||||
//~^ WARN crate-level attribute should be
|
||||
//~| HELP add a `!`
|
||||
}
|
||||
|
||||
// Cannot feed "2700" to `#[macro_escape]` without signaling an error.
|
||||
@@ -534,21 +539,26 @@ mod inner { #![macro_escape] }
|
||||
|
||||
#[no_std]
|
||||
//~^ WARN crate-level attribute should be an inner attribute
|
||||
//~| HELP add a `!`
|
||||
mod no_std {
|
||||
mod inner { #![no_std] }
|
||||
//~^ WARN crate-level attribute should be in the root module
|
||||
|
||||
#[no_std] fn f() { }
|
||||
//~^ WARN crate-level attribute should be an inner attribute
|
||||
//~| HELP add a `!`
|
||||
|
||||
#[no_std] struct S;
|
||||
//~^ WARN crate-level attribute should be an inner attribute
|
||||
//~| HELP add a `!`
|
||||
|
||||
#[no_std] type T = S;
|
||||
//~^ WARN crate-level attribute should be an inner attribute
|
||||
//~| HELP add a `!`
|
||||
|
||||
#[no_std] impl S { }
|
||||
//~^ WARN crate-level attribute should be an inner attribute
|
||||
//~| HELP add a `!`
|
||||
}
|
||||
|
||||
// At time of authorship, #[proc_macro_derive = "2500"] signals error
|
||||
@@ -760,21 +770,26 @@ mod inner { #![must_use] } //~ WARN attribute cannot be used on
|
||||
|
||||
#[windows_subsystem = "windows"]
|
||||
//~^ WARN crate-level attribute should be an inner attribute
|
||||
//~| HELP add a `!`
|
||||
mod windows_subsystem {
|
||||
mod inner { #![windows_subsystem="windows"] }
|
||||
//~^ WARN crate-level attribute should be in the root module
|
||||
|
||||
#[windows_subsystem = "windows"] fn f() { }
|
||||
//~^ WARN crate-level attribute should be an inner attribute
|
||||
//~| HELP add a `!`
|
||||
|
||||
#[windows_subsystem = "windows"] struct S;
|
||||
//~^ WARN crate-level attribute should be an inner attribute
|
||||
//~| HELP add a `!`
|
||||
|
||||
#[windows_subsystem = "windows"] type T = S;
|
||||
//~^ WARN crate-level attribute should be an inner attribute
|
||||
//~| HELP add a `!`
|
||||
|
||||
#[windows_subsystem = "windows"] impl S { }
|
||||
//~^ WARN crate-level attribute should be an inner attribute
|
||||
//~| HELP add a `!`
|
||||
}
|
||||
|
||||
// BROKEN USES OF CRATE-LEVEL BUILT-IN ATTRIBUTES
|
||||
@@ -782,135 +797,170 @@ mod inner { #![windows_subsystem="windows"] }
|
||||
#[crate_name = "0900"]
|
||||
//~^ WARN crate-level attribute should be an inner attribute
|
||||
mod crate_name {
|
||||
//~^ NOTE This attribute does not have an `!`, which means it is applied to this module
|
||||
mod inner { #![crate_name="0900"] }
|
||||
//~^ WARN crate-level attribute should be in the root module
|
||||
//~^ WARN the `#![crate_name]` attribute can only be used at the crate root
|
||||
|
||||
#[crate_name = "0900"] fn f() { }
|
||||
//~^ WARN crate-level attribute should be an inner attribute
|
||||
//~| NOTE This attribute does not have an `!`, which means it is applied to this function
|
||||
|
||||
#[crate_name = "0900"] struct S;
|
||||
//~^ WARN crate-level attribute should be an inner attribute
|
||||
//~| NOTE This attribute does not have an `!`, which means it is applied to this struct
|
||||
|
||||
#[crate_name = "0900"] type T = S;
|
||||
//~^ WARN crate-level attribute should be an inner attribute
|
||||
//~| NOTE This attribute does not have an `!`, which means it is applied to this type alias
|
||||
|
||||
#[crate_name = "0900"] impl S { }
|
||||
//~^ WARN crate-level attribute should be an inner attribute
|
||||
//~| NOTE This attribute does not have an `!`, which means it is applied to this implementation block
|
||||
}
|
||||
|
||||
#[crate_type = "0800"]
|
||||
//~^ WARN crate-level attribute should be an inner attribute
|
||||
//~| HELP add a `!`
|
||||
mod crate_type {
|
||||
mod inner { #![crate_type="0800"] }
|
||||
//~^ WARN crate-level attribute should be in the root module
|
||||
|
||||
#[crate_type = "0800"] fn f() { }
|
||||
//~^ WARN crate-level attribute should be an inner attribute
|
||||
//~| HELP add a `!`
|
||||
|
||||
#[crate_type = "0800"] struct S;
|
||||
//~^ WARN crate-level attribute should be an inner attribute
|
||||
//~| HELP add a `!`
|
||||
|
||||
#[crate_type = "0800"] type T = S;
|
||||
//~^ WARN crate-level attribute should be an inner attribute
|
||||
//~| HELP add a `!`
|
||||
|
||||
#[crate_type = "0800"] impl S { }
|
||||
//~^ WARN crate-level attribute should be an inner attribute
|
||||
//~| HELP add a `!`
|
||||
}
|
||||
|
||||
#[feature(x0600)]
|
||||
//~^ WARN crate-level attribute should be an inner attribute
|
||||
//~| HELP add a `!`
|
||||
mod feature {
|
||||
mod inner { #![feature(x0600)] }
|
||||
//~^ WARN crate-level attribute should be in the root module
|
||||
|
||||
#[feature(x0600)] fn f() { }
|
||||
//~^ WARN crate-level attribute should be an inner attribute
|
||||
//~| HELP add a `!`
|
||||
|
||||
#[feature(x0600)] struct S;
|
||||
//~^ WARN crate-level attribute should be an inner attribute
|
||||
//~| HELP add a `!`
|
||||
|
||||
#[feature(x0600)] type T = S;
|
||||
//~^ WARN crate-level attribute should be an inner attribute
|
||||
//~| HELP add a `!`
|
||||
|
||||
#[feature(x0600)] impl S { }
|
||||
//~^ WARN crate-level attribute should be an inner attribute
|
||||
//~| HELP add a `!`
|
||||
}
|
||||
|
||||
|
||||
#[no_main]
|
||||
//~^ WARN crate-level attribute should be an inner attribute
|
||||
//~| HELP add a `!`
|
||||
mod no_main_1 {
|
||||
mod inner { #![no_main] }
|
||||
//~^ WARN crate-level attribute should be in the root module
|
||||
|
||||
#[no_main] fn f() { }
|
||||
//~^ WARN crate-level attribute should be an inner attribute
|
||||
//~| HELP add a `!`
|
||||
|
||||
#[no_main] struct S;
|
||||
//~^ WARN crate-level attribute should be an inner attribute
|
||||
//~| HELP add a `!`
|
||||
|
||||
#[no_main] type T = S;
|
||||
//~^ WARN crate-level attribute should be an inner attribute
|
||||
//~| HELP add a `!`
|
||||
|
||||
#[no_main] impl S { }
|
||||
//~^ WARN crate-level attribute should be an inner attribute
|
||||
//~| HELP add a `!`
|
||||
}
|
||||
|
||||
#[no_builtins]
|
||||
//~^ WARN crate-level attribute should be an inner attribute
|
||||
//~| HELP add a `!`
|
||||
mod no_builtins {
|
||||
mod inner { #![no_builtins] }
|
||||
//~^ WARN crate-level attribute should be in the root module
|
||||
|
||||
#[no_builtins] fn f() { }
|
||||
//~^ WARN crate-level attribute should be an inner attribute
|
||||
//~| HELP add a `!`
|
||||
|
||||
#[no_builtins] struct S;
|
||||
//~^ WARN crate-level attribute should be an inner attribute
|
||||
//~| HELP add a `!`
|
||||
|
||||
#[no_builtins] type T = S;
|
||||
//~^ WARN crate-level attribute should be an inner attribute
|
||||
//~| HELP add a `!`
|
||||
|
||||
#[no_builtins] impl S { }
|
||||
//~^ WARN crate-level attribute should be an inner attribute
|
||||
//~| HELP add a `!`
|
||||
}
|
||||
|
||||
#[recursion_limit="0200"]
|
||||
//~^ WARN crate-level attribute should be an inner attribute
|
||||
//~| HELP add a `!`
|
||||
mod recursion_limit {
|
||||
mod inner { #![recursion_limit="0200"] }
|
||||
//~^ WARN crate-level attribute should be in the root module
|
||||
|
||||
#[recursion_limit="0200"] fn f() { }
|
||||
//~^ WARN crate-level attribute should be an inner attribute
|
||||
//~| HELP add a `!`
|
||||
|
||||
#[recursion_limit="0200"] struct S;
|
||||
//~^ WARN crate-level attribute should be an inner attribute
|
||||
//~| HELP add a `!`
|
||||
|
||||
#[recursion_limit="0200"] type T = S;
|
||||
//~^ WARN crate-level attribute should be an inner attribute
|
||||
//~| HELP add a `!`
|
||||
|
||||
#[recursion_limit="0200"] impl S { }
|
||||
//~^ WARN crate-level attribute should be an inner attribute
|
||||
//~| HELP add a `!`
|
||||
}
|
||||
|
||||
#[type_length_limit="0100"]
|
||||
//~^ WARN crate-level attribute should be an inner attribute
|
||||
//~| HELP add a `!`
|
||||
mod type_length_limit {
|
||||
mod inner { #![type_length_limit="0100"] }
|
||||
//~^ WARN crate-level attribute should be in the root module
|
||||
|
||||
#[type_length_limit="0100"] fn f() { }
|
||||
//~^ WARN crate-level attribute should be an inner attribute
|
||||
//~| HELP add a `!`
|
||||
|
||||
#[type_length_limit="0100"] struct S;
|
||||
//~^ WARN crate-level attribute should be an inner attribute
|
||||
//~| HELP add a `!`
|
||||
|
||||
#[type_length_limit="0100"] type T = S;
|
||||
//~^ WARN crate-level attribute should be an inner attribute
|
||||
//~| HELP add a `!`
|
||||
|
||||
#[type_length_limit="0100"] impl S { }
|
||||
//~^ WARN crate-level attribute should be an inner attribute
|
||||
//~| HELP add a `!`
|
||||
}
|
||||
|
||||
fn main() {}
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
warning: `#[macro_escape]` is a deprecated synonym for `#[macro_use]`
|
||||
--> $DIR/issue-43106-gating-of-builtin-attrs.rs:506:17
|
||||
--> $DIR/issue-43106-gating-of-builtin-attrs.rs:511:17
|
||||
|
|
||||
LL | mod inner { #![macro_escape] }
|
||||
| ^^^^^^^^^^^^^^^^
|
||||
@@ -7,7 +7,7 @@ LL | mod inner { #![macro_escape] }
|
||||
= help: try an outer attribute: `#[macro_use]`
|
||||
|
||||
warning: `#[macro_escape]` is a deprecated synonym for `#[macro_use]`
|
||||
--> $DIR/issue-43106-gating-of-builtin-attrs.rs:503:1
|
||||
--> $DIR/issue-43106-gating-of-builtin-attrs.rs:508:1
|
||||
|
|
||||
LL | #[macro_escape]
|
||||
| ^^^^^^^^^^^^^^^
|
||||
@@ -198,20 +198,30 @@ note: the lint level is defined here
|
||||
LL | #![warn(unused_attributes, unknown_lints)]
|
||||
| ^^^^^^^^^^^^^^^^^
|
||||
|
||||
warning: crate-level attribute should be an inner attribute: add an exclamation mark: `#![foo]`
|
||||
warning: crate-level attribute should be an inner attribute
|
||||
--> $DIR/issue-43106-gating-of-builtin-attrs.rs:483:1
|
||||
|
|
||||
LL | #[reexport_test_harness_main = "2900"]
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
|
|
||||
help: add a `!`
|
||||
|
|
||||
LL | #![reexport_test_harness_main = "2900"]
|
||||
| +
|
||||
|
||||
warning: crate-level attribute should be an inner attribute: add an exclamation mark: `#![foo]`
|
||||
--> $DIR/issue-43106-gating-of-builtin-attrs.rs:535:1
|
||||
warning: crate-level attribute should be an inner attribute
|
||||
--> $DIR/issue-43106-gating-of-builtin-attrs.rs:540:1
|
||||
|
|
||||
LL | #[no_std]
|
||||
| ^^^^^^^^^
|
||||
|
|
||||
help: add a `!`
|
||||
|
|
||||
LL | #![no_std]
|
||||
| +
|
||||
|
||||
warning: attribute should be applied to an `extern` block with non-Rust ABI
|
||||
--> $DIR/issue-43106-gating-of-builtin-attrs.rs:685:1
|
||||
--> $DIR/issue-43106-gating-of-builtin-attrs.rs:695:1
|
||||
|
|
||||
LL | #[link()]
|
||||
| ^^^^^^^^^
|
||||
@@ -226,53 +236,82 @@ LL | | }
|
||||
|
|
||||
= warning: this was previously accepted by the compiler but is being phased out; it will become a hard error in a future release!
|
||||
|
||||
warning: crate-level attribute should be an inner attribute: add an exclamation mark: `#![foo]`
|
||||
--> $DIR/issue-43106-gating-of-builtin-attrs.rs:761:1
|
||||
warning: crate-level attribute should be an inner attribute
|
||||
--> $DIR/issue-43106-gating-of-builtin-attrs.rs:771:1
|
||||
|
|
||||
LL | #[windows_subsystem = "windows"]
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
|
||||
warning: crate-level attribute should be an inner attribute: add an exclamation mark: `#![foo]`
|
||||
--> $DIR/issue-43106-gating-of-builtin-attrs.rs:782:1
|
||||
|
|
||||
LL | #[crate_name = "0900"]
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^
|
||||
help: add a `!`
|
||||
|
|
||||
LL | #![windows_subsystem = "windows"]
|
||||
| +
|
||||
|
||||
warning: crate-level attribute should be an inner attribute: add an exclamation mark: `#![foo]`
|
||||
--> $DIR/issue-43106-gating-of-builtin-attrs.rs:801:1
|
||||
warning: crate-level attribute should be an inner attribute
|
||||
--> $DIR/issue-43106-gating-of-builtin-attrs.rs:821:1
|
||||
|
|
||||
LL | #[crate_type = "0800"]
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^
|
||||
|
|
||||
help: add a `!`
|
||||
|
|
||||
LL | #![crate_type = "0800"]
|
||||
| +
|
||||
|
||||
warning: crate-level attribute should be an inner attribute: add an exclamation mark: `#![foo]`
|
||||
--> $DIR/issue-43106-gating-of-builtin-attrs.rs:820:1
|
||||
warning: crate-level attribute should be an inner attribute
|
||||
--> $DIR/issue-43106-gating-of-builtin-attrs.rs:845:1
|
||||
|
|
||||
LL | #[feature(x0600)]
|
||||
| ^^^^^^^^^^^^^^^^^
|
||||
|
|
||||
help: add a `!`
|
||||
|
|
||||
LL | #![feature(x0600)]
|
||||
| +
|
||||
|
||||
warning: crate-level attribute should be an inner attribute: add an exclamation mark: `#![foo]`
|
||||
--> $DIR/issue-43106-gating-of-builtin-attrs.rs:840:1
|
||||
warning: crate-level attribute should be an inner attribute
|
||||
--> $DIR/issue-43106-gating-of-builtin-attrs.rs:870:1
|
||||
|
|
||||
LL | #[no_main]
|
||||
| ^^^^^^^^^^
|
||||
|
|
||||
help: add a `!`
|
||||
|
|
||||
LL | #![no_main]
|
||||
| +
|
||||
|
||||
warning: crate-level attribute should be an inner attribute: add an exclamation mark: `#![foo]`
|
||||
--> $DIR/issue-43106-gating-of-builtin-attrs.rs:859:1
|
||||
warning: crate-level attribute should be an inner attribute
|
||||
--> $DIR/issue-43106-gating-of-builtin-attrs.rs:894:1
|
||||
|
|
||||
LL | #[no_builtins]
|
||||
| ^^^^^^^^^^^^^^
|
||||
|
|
||||
help: add a `!`
|
||||
|
|
||||
LL | #![no_builtins]
|
||||
| +
|
||||
|
||||
warning: crate-level attribute should be an inner attribute: add an exclamation mark: `#![foo]`
|
||||
--> $DIR/issue-43106-gating-of-builtin-attrs.rs:878:1
|
||||
warning: crate-level attribute should be an inner attribute
|
||||
--> $DIR/issue-43106-gating-of-builtin-attrs.rs:918:1
|
||||
|
|
||||
LL | #[recursion_limit="0200"]
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
|
|
||||
help: add a `!`
|
||||
|
|
||||
LL | #![recursion_limit="0200"]
|
||||
| +
|
||||
|
||||
warning: crate-level attribute should be an inner attribute: add an exclamation mark: `#![foo]`
|
||||
--> $DIR/issue-43106-gating-of-builtin-attrs.rs:897:1
|
||||
warning: crate-level attribute should be an inner attribute
|
||||
--> $DIR/issue-43106-gating-of-builtin-attrs.rs:942:1
|
||||
|
|
||||
LL | #[type_length_limit="0100"]
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
|
|
||||
help: add a `!`
|
||||
|
|
||||
LL | #![type_length_limit="0100"]
|
||||
| +
|
||||
|
||||
warning: attribute should be applied to an `extern` block with non-Rust ABI
|
||||
--> $DIR/issue-43106-gating-of-builtin-attrs.rs:72:1
|
||||
@@ -321,67 +360,107 @@ LL | #[macro_export] impl S { }
|
||||
| ^^^^^^^^^^^^^^^
|
||||
|
||||
warning: crate-level attribute should be in the root module
|
||||
--> $DIR/issue-43106-gating-of-builtin-attrs.rs:486:17
|
||||
--> $DIR/issue-43106-gating-of-builtin-attrs.rs:487:17
|
||||
|
|
||||
LL | mod inner { #![reexport_test_harness_main="2900"] }
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
|
||||
warning: crate-level attribute should be an inner attribute: add an exclamation mark: `#![foo]`
|
||||
--> $DIR/issue-43106-gating-of-builtin-attrs.rs:489:5
|
||||
warning: crate-level attribute should be an inner attribute
|
||||
--> $DIR/issue-43106-gating-of-builtin-attrs.rs:490:5
|
||||
|
|
||||
LL | #[reexport_test_harness_main = "2900"] fn f() { }
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
|
|
||||
help: add a `!`
|
||||
|
|
||||
LL | #![reexport_test_harness_main = "2900"] fn f() { }
|
||||
| +
|
||||
|
||||
warning: crate-level attribute should be an inner attribute: add an exclamation mark: `#![foo]`
|
||||
--> $DIR/issue-43106-gating-of-builtin-attrs.rs:492:5
|
||||
warning: crate-level attribute should be an inner attribute
|
||||
--> $DIR/issue-43106-gating-of-builtin-attrs.rs:494:5
|
||||
|
|
||||
LL | #[reexport_test_harness_main = "2900"] struct S;
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
|
|
||||
help: add a `!`
|
||||
|
|
||||
LL | #![reexport_test_harness_main = "2900"] struct S;
|
||||
| +
|
||||
|
||||
warning: crate-level attribute should be an inner attribute: add an exclamation mark: `#![foo]`
|
||||
--> $DIR/issue-43106-gating-of-builtin-attrs.rs:495:5
|
||||
warning: crate-level attribute should be an inner attribute
|
||||
--> $DIR/issue-43106-gating-of-builtin-attrs.rs:498:5
|
||||
|
|
||||
LL | #[reexport_test_harness_main = "2900"] type T = S;
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
|
|
||||
help: add a `!`
|
||||
|
|
||||
LL | #![reexport_test_harness_main = "2900"] type T = S;
|
||||
| +
|
||||
|
||||
warning: crate-level attribute should be an inner attribute: add an exclamation mark: `#![foo]`
|
||||
--> $DIR/issue-43106-gating-of-builtin-attrs.rs:498:5
|
||||
warning: crate-level attribute should be an inner attribute
|
||||
--> $DIR/issue-43106-gating-of-builtin-attrs.rs:502:5
|
||||
|
|
||||
LL | #[reexport_test_harness_main = "2900"] impl S { }
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
|
|
||||
help: add a `!`
|
||||
|
|
||||
LL | #![reexport_test_harness_main = "2900"] impl S { }
|
||||
| +
|
||||
|
||||
warning: crate-level attribute should be in the root module
|
||||
--> $DIR/issue-43106-gating-of-builtin-attrs.rs:538:17
|
||||
--> $DIR/issue-43106-gating-of-builtin-attrs.rs:544:17
|
||||
|
|
||||
LL | mod inner { #![no_std] }
|
||||
| ^^^^^^^^^^
|
||||
|
||||
warning: crate-level attribute should be an inner attribute: add an exclamation mark: `#![foo]`
|
||||
--> $DIR/issue-43106-gating-of-builtin-attrs.rs:541:5
|
||||
warning: crate-level attribute should be an inner attribute
|
||||
--> $DIR/issue-43106-gating-of-builtin-attrs.rs:547:5
|
||||
|
|
||||
LL | #[no_std] fn f() { }
|
||||
| ^^^^^^^^^
|
||||
|
|
||||
help: add a `!`
|
||||
|
|
||||
LL | #![no_std] fn f() { }
|
||||
| +
|
||||
|
||||
warning: crate-level attribute should be an inner attribute: add an exclamation mark: `#![foo]`
|
||||
--> $DIR/issue-43106-gating-of-builtin-attrs.rs:544:5
|
||||
warning: crate-level attribute should be an inner attribute
|
||||
--> $DIR/issue-43106-gating-of-builtin-attrs.rs:551:5
|
||||
|
|
||||
LL | #[no_std] struct S;
|
||||
| ^^^^^^^^^
|
||||
|
|
||||
help: add a `!`
|
||||
|
|
||||
LL | #![no_std] struct S;
|
||||
| +
|
||||
|
||||
warning: crate-level attribute should be an inner attribute: add an exclamation mark: `#![foo]`
|
||||
--> $DIR/issue-43106-gating-of-builtin-attrs.rs:547:5
|
||||
warning: crate-level attribute should be an inner attribute
|
||||
--> $DIR/issue-43106-gating-of-builtin-attrs.rs:555:5
|
||||
|
|
||||
LL | #[no_std] type T = S;
|
||||
| ^^^^^^^^^
|
||||
|
|
||||
help: add a `!`
|
||||
|
|
||||
LL | #![no_std] type T = S;
|
||||
| +
|
||||
|
||||
warning: crate-level attribute should be an inner attribute: add an exclamation mark: `#![foo]`
|
||||
--> $DIR/issue-43106-gating-of-builtin-attrs.rs:550:5
|
||||
warning: crate-level attribute should be an inner attribute
|
||||
--> $DIR/issue-43106-gating-of-builtin-attrs.rs:559:5
|
||||
|
|
||||
LL | #[no_std] impl S { }
|
||||
| ^^^^^^^^^
|
||||
|
|
||||
help: add a `!`
|
||||
|
|
||||
LL | #![no_std] impl S { }
|
||||
| +
|
||||
|
||||
warning: attribute should be applied to an `extern` block with non-Rust ABI
|
||||
--> $DIR/issue-43106-gating-of-builtin-attrs.rs:691:17
|
||||
--> $DIR/issue-43106-gating-of-builtin-attrs.rs:701:17
|
||||
|
|
||||
LL | mod inner { #![link()] }
|
||||
| ------------^^^^^^^^^^-- not an `extern` block
|
||||
@@ -389,7 +468,7 @@ LL | mod inner { #![link()] }
|
||||
= warning: this was previously accepted by the compiler but is being phased out; it will become a hard error in a future release!
|
||||
|
||||
warning: attribute should be applied to an `extern` block with non-Rust ABI
|
||||
--> $DIR/issue-43106-gating-of-builtin-attrs.rs:696:5
|
||||
--> $DIR/issue-43106-gating-of-builtin-attrs.rs:706:5
|
||||
|
|
||||
LL | #[link()] fn f() { }
|
||||
| ^^^^^^^^^ ---------- not an `extern` block
|
||||
@@ -397,7 +476,7 @@ LL | #[link()] fn f() { }
|
||||
= warning: this was previously accepted by the compiler but is being phased out; it will become a hard error in a future release!
|
||||
|
||||
warning: attribute should be applied to an `extern` block with non-Rust ABI
|
||||
--> $DIR/issue-43106-gating-of-builtin-attrs.rs:701:5
|
||||
--> $DIR/issue-43106-gating-of-builtin-attrs.rs:711:5
|
||||
|
|
||||
LL | #[link()] struct S;
|
||||
| ^^^^^^^^^ --------- not an `extern` block
|
||||
@@ -405,7 +484,7 @@ LL | #[link()] struct S;
|
||||
= warning: this was previously accepted by the compiler but is being phased out; it will become a hard error in a future release!
|
||||
|
||||
warning: attribute should be applied to an `extern` block with non-Rust ABI
|
||||
--> $DIR/issue-43106-gating-of-builtin-attrs.rs:706:5
|
||||
--> $DIR/issue-43106-gating-of-builtin-attrs.rs:716:5
|
||||
|
|
||||
LL | #[link()] type T = S;
|
||||
| ^^^^^^^^^ ----------- not an `extern` block
|
||||
@@ -413,7 +492,7 @@ LL | #[link()] type T = S;
|
||||
= warning: this was previously accepted by the compiler but is being phased out; it will become a hard error in a future release!
|
||||
|
||||
warning: attribute should be applied to an `extern` block with non-Rust ABI
|
||||
--> $DIR/issue-43106-gating-of-builtin-attrs.rs:711:5
|
||||
--> $DIR/issue-43106-gating-of-builtin-attrs.rs:721:5
|
||||
|
|
||||
LL | #[link()] impl S { }
|
||||
| ^^^^^^^^^ ---------- not an `extern` block
|
||||
@@ -421,7 +500,7 @@ LL | #[link()] impl S { }
|
||||
= warning: this was previously accepted by the compiler but is being phased out; it will become a hard error in a future release!
|
||||
|
||||
warning: attribute should be applied to an `extern` block with non-Rust ABI
|
||||
--> $DIR/issue-43106-gating-of-builtin-attrs.rs:716:5
|
||||
--> $DIR/issue-43106-gating-of-builtin-attrs.rs:726:5
|
||||
|
|
||||
LL | #[link()] extern "Rust" {}
|
||||
| ^^^^^^^^^
|
||||
@@ -429,244 +508,354 @@ LL | #[link()] extern "Rust" {}
|
||||
= warning: this was previously accepted by the compiler but is being phased out; it will become a hard error in a future release!
|
||||
|
||||
warning: crate-level attribute should be in the root module
|
||||
--> $DIR/issue-43106-gating-of-builtin-attrs.rs:764:17
|
||||
--> $DIR/issue-43106-gating-of-builtin-attrs.rs:775:17
|
||||
|
|
||||
LL | mod inner { #![windows_subsystem="windows"] }
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
|
||||
warning: crate-level attribute should be an inner attribute: add an exclamation mark: `#![foo]`
|
||||
--> $DIR/issue-43106-gating-of-builtin-attrs.rs:767:5
|
||||
warning: crate-level attribute should be an inner attribute
|
||||
--> $DIR/issue-43106-gating-of-builtin-attrs.rs:778:5
|
||||
|
|
||||
LL | #[windows_subsystem = "windows"] fn f() { }
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
|
|
||||
help: add a `!`
|
||||
|
|
||||
LL | #![windows_subsystem = "windows"] fn f() { }
|
||||
| +
|
||||
|
||||
warning: crate-level attribute should be an inner attribute: add an exclamation mark: `#![foo]`
|
||||
--> $DIR/issue-43106-gating-of-builtin-attrs.rs:770:5
|
||||
warning: crate-level attribute should be an inner attribute
|
||||
--> $DIR/issue-43106-gating-of-builtin-attrs.rs:782:5
|
||||
|
|
||||
LL | #[windows_subsystem = "windows"] struct S;
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
|
|
||||
help: add a `!`
|
||||
|
|
||||
LL | #![windows_subsystem = "windows"] struct S;
|
||||
| +
|
||||
|
||||
warning: crate-level attribute should be an inner attribute: add an exclamation mark: `#![foo]`
|
||||
--> $DIR/issue-43106-gating-of-builtin-attrs.rs:773:5
|
||||
warning: crate-level attribute should be an inner attribute
|
||||
--> $DIR/issue-43106-gating-of-builtin-attrs.rs:786:5
|
||||
|
|
||||
LL | #[windows_subsystem = "windows"] type T = S;
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
|
|
||||
help: add a `!`
|
||||
|
|
||||
LL | #![windows_subsystem = "windows"] type T = S;
|
||||
| +
|
||||
|
||||
warning: crate-level attribute should be an inner attribute: add an exclamation mark: `#![foo]`
|
||||
--> $DIR/issue-43106-gating-of-builtin-attrs.rs:776:5
|
||||
warning: crate-level attribute should be an inner attribute
|
||||
--> $DIR/issue-43106-gating-of-builtin-attrs.rs:790:5
|
||||
|
|
||||
LL | #[windows_subsystem = "windows"] impl S { }
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
|
|
||||
help: add a `!`
|
||||
|
|
||||
LL | #![windows_subsystem = "windows"] impl S { }
|
||||
| +
|
||||
|
||||
warning: crate-level attribute should be in the root module
|
||||
--> $DIR/issue-43106-gating-of-builtin-attrs.rs:785:17
|
||||
|
|
||||
LL | mod inner { #![crate_name="0900"] }
|
||||
| ^^^^^^^^^^^^^^^^^^^^^
|
||||
|
||||
warning: crate-level attribute should be an inner attribute: add an exclamation mark: `#![foo]`
|
||||
--> $DIR/issue-43106-gating-of-builtin-attrs.rs:788:5
|
||||
|
|
||||
LL | #[crate_name = "0900"] fn f() { }
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^
|
||||
|
||||
warning: crate-level attribute should be an inner attribute: add an exclamation mark: `#![foo]`
|
||||
--> $DIR/issue-43106-gating-of-builtin-attrs.rs:791:5
|
||||
|
|
||||
LL | #[crate_name = "0900"] struct S;
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^
|
||||
|
||||
warning: crate-level attribute should be an inner attribute: add an exclamation mark: `#![foo]`
|
||||
--> $DIR/issue-43106-gating-of-builtin-attrs.rs:794:5
|
||||
|
|
||||
LL | #[crate_name = "0900"] type T = S;
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^
|
||||
|
||||
warning: crate-level attribute should be an inner attribute: add an exclamation mark: `#![foo]`
|
||||
--> $DIR/issue-43106-gating-of-builtin-attrs.rs:797:5
|
||||
|
|
||||
LL | #[crate_name = "0900"] impl S { }
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^
|
||||
|
||||
warning: crate-level attribute should be in the root module
|
||||
--> $DIR/issue-43106-gating-of-builtin-attrs.rs:804:17
|
||||
--> $DIR/issue-43106-gating-of-builtin-attrs.rs:825:17
|
||||
|
|
||||
LL | mod inner { #![crate_type="0800"] }
|
||||
| ^^^^^^^^^^^^^^^^^^^^^
|
||||
|
||||
warning: crate-level attribute should be an inner attribute: add an exclamation mark: `#![foo]`
|
||||
--> $DIR/issue-43106-gating-of-builtin-attrs.rs:807:5
|
||||
warning: crate-level attribute should be an inner attribute
|
||||
--> $DIR/issue-43106-gating-of-builtin-attrs.rs:828:5
|
||||
|
|
||||
LL | #[crate_type = "0800"] fn f() { }
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^
|
||||
|
|
||||
help: add a `!`
|
||||
|
|
||||
LL | #![crate_type = "0800"] fn f() { }
|
||||
| +
|
||||
|
||||
warning: crate-level attribute should be an inner attribute: add an exclamation mark: `#![foo]`
|
||||
--> $DIR/issue-43106-gating-of-builtin-attrs.rs:810:5
|
||||
warning: crate-level attribute should be an inner attribute
|
||||
--> $DIR/issue-43106-gating-of-builtin-attrs.rs:832:5
|
||||
|
|
||||
LL | #[crate_type = "0800"] struct S;
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^
|
||||
|
|
||||
help: add a `!`
|
||||
|
|
||||
LL | #![crate_type = "0800"] struct S;
|
||||
| +
|
||||
|
||||
warning: crate-level attribute should be an inner attribute: add an exclamation mark: `#![foo]`
|
||||
--> $DIR/issue-43106-gating-of-builtin-attrs.rs:813:5
|
||||
warning: crate-level attribute should be an inner attribute
|
||||
--> $DIR/issue-43106-gating-of-builtin-attrs.rs:836:5
|
||||
|
|
||||
LL | #[crate_type = "0800"] type T = S;
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^
|
||||
|
|
||||
help: add a `!`
|
||||
|
|
||||
LL | #![crate_type = "0800"] type T = S;
|
||||
| +
|
||||
|
||||
warning: crate-level attribute should be an inner attribute: add an exclamation mark: `#![foo]`
|
||||
--> $DIR/issue-43106-gating-of-builtin-attrs.rs:816:5
|
||||
warning: crate-level attribute should be an inner attribute
|
||||
--> $DIR/issue-43106-gating-of-builtin-attrs.rs:840:5
|
||||
|
|
||||
LL | #[crate_type = "0800"] impl S { }
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^
|
||||
|
|
||||
help: add a `!`
|
||||
|
|
||||
LL | #![crate_type = "0800"] impl S { }
|
||||
| +
|
||||
|
||||
warning: crate-level attribute should be in the root module
|
||||
--> $DIR/issue-43106-gating-of-builtin-attrs.rs:823:17
|
||||
--> $DIR/issue-43106-gating-of-builtin-attrs.rs:849:17
|
||||
|
|
||||
LL | mod inner { #![feature(x0600)] }
|
||||
| ^^^^^^^^^^^^^^^^^^
|
||||
|
||||
warning: crate-level attribute should be an inner attribute: add an exclamation mark: `#![foo]`
|
||||
--> $DIR/issue-43106-gating-of-builtin-attrs.rs:826:5
|
||||
warning: crate-level attribute should be an inner attribute
|
||||
--> $DIR/issue-43106-gating-of-builtin-attrs.rs:852:5
|
||||
|
|
||||
LL | #[feature(x0600)] fn f() { }
|
||||
| ^^^^^^^^^^^^^^^^^
|
||||
|
|
||||
help: add a `!`
|
||||
|
|
||||
LL | #![feature(x0600)] fn f() { }
|
||||
| +
|
||||
|
||||
warning: crate-level attribute should be an inner attribute: add an exclamation mark: `#![foo]`
|
||||
--> $DIR/issue-43106-gating-of-builtin-attrs.rs:829:5
|
||||
warning: crate-level attribute should be an inner attribute
|
||||
--> $DIR/issue-43106-gating-of-builtin-attrs.rs:856:5
|
||||
|
|
||||
LL | #[feature(x0600)] struct S;
|
||||
| ^^^^^^^^^^^^^^^^^
|
||||
|
|
||||
help: add a `!`
|
||||
|
|
||||
LL | #![feature(x0600)] struct S;
|
||||
| +
|
||||
|
||||
warning: crate-level attribute should be an inner attribute: add an exclamation mark: `#![foo]`
|
||||
--> $DIR/issue-43106-gating-of-builtin-attrs.rs:832:5
|
||||
warning: crate-level attribute should be an inner attribute
|
||||
--> $DIR/issue-43106-gating-of-builtin-attrs.rs:860:5
|
||||
|
|
||||
LL | #[feature(x0600)] type T = S;
|
||||
| ^^^^^^^^^^^^^^^^^
|
||||
|
|
||||
help: add a `!`
|
||||
|
|
||||
LL | #![feature(x0600)] type T = S;
|
||||
| +
|
||||
|
||||
warning: crate-level attribute should be an inner attribute: add an exclamation mark: `#![foo]`
|
||||
--> $DIR/issue-43106-gating-of-builtin-attrs.rs:835:5
|
||||
warning: crate-level attribute should be an inner attribute
|
||||
--> $DIR/issue-43106-gating-of-builtin-attrs.rs:864:5
|
||||
|
|
||||
LL | #[feature(x0600)] impl S { }
|
||||
| ^^^^^^^^^^^^^^^^^
|
||||
|
|
||||
help: add a `!`
|
||||
|
|
||||
LL | #![feature(x0600)] impl S { }
|
||||
| +
|
||||
|
||||
warning: crate-level attribute should be in the root module
|
||||
--> $DIR/issue-43106-gating-of-builtin-attrs.rs:843:17
|
||||
--> $DIR/issue-43106-gating-of-builtin-attrs.rs:874:17
|
||||
|
|
||||
LL | mod inner { #![no_main] }
|
||||
| ^^^^^^^^^^^
|
||||
|
||||
warning: crate-level attribute should be an inner attribute: add an exclamation mark: `#![foo]`
|
||||
--> $DIR/issue-43106-gating-of-builtin-attrs.rs:846:5
|
||||
warning: crate-level attribute should be an inner attribute
|
||||
--> $DIR/issue-43106-gating-of-builtin-attrs.rs:877:5
|
||||
|
|
||||
LL | #[no_main] fn f() { }
|
||||
| ^^^^^^^^^^
|
||||
|
|
||||
help: add a `!`
|
||||
|
|
||||
LL | #![no_main] fn f() { }
|
||||
| +
|
||||
|
||||
warning: crate-level attribute should be an inner attribute: add an exclamation mark: `#![foo]`
|
||||
--> $DIR/issue-43106-gating-of-builtin-attrs.rs:849:5
|
||||
warning: crate-level attribute should be an inner attribute
|
||||
--> $DIR/issue-43106-gating-of-builtin-attrs.rs:881:5
|
||||
|
|
||||
LL | #[no_main] struct S;
|
||||
| ^^^^^^^^^^
|
||||
|
|
||||
help: add a `!`
|
||||
|
|
||||
LL | #![no_main] struct S;
|
||||
| +
|
||||
|
||||
warning: crate-level attribute should be an inner attribute: add an exclamation mark: `#![foo]`
|
||||
--> $DIR/issue-43106-gating-of-builtin-attrs.rs:852:5
|
||||
warning: crate-level attribute should be an inner attribute
|
||||
--> $DIR/issue-43106-gating-of-builtin-attrs.rs:885:5
|
||||
|
|
||||
LL | #[no_main] type T = S;
|
||||
| ^^^^^^^^^^
|
||||
|
|
||||
help: add a `!`
|
||||
|
|
||||
LL | #![no_main] type T = S;
|
||||
| +
|
||||
|
||||
warning: crate-level attribute should be an inner attribute: add an exclamation mark: `#![foo]`
|
||||
--> $DIR/issue-43106-gating-of-builtin-attrs.rs:855:5
|
||||
warning: crate-level attribute should be an inner attribute
|
||||
--> $DIR/issue-43106-gating-of-builtin-attrs.rs:889:5
|
||||
|
|
||||
LL | #[no_main] impl S { }
|
||||
| ^^^^^^^^^^
|
||||
|
|
||||
help: add a `!`
|
||||
|
|
||||
LL | #![no_main] impl S { }
|
||||
| +
|
||||
|
||||
warning: crate-level attribute should be in the root module
|
||||
--> $DIR/issue-43106-gating-of-builtin-attrs.rs:862:17
|
||||
--> $DIR/issue-43106-gating-of-builtin-attrs.rs:898:17
|
||||
|
|
||||
LL | mod inner { #![no_builtins] }
|
||||
| ^^^^^^^^^^^^^^^
|
||||
|
||||
warning: crate-level attribute should be an inner attribute: add an exclamation mark: `#![foo]`
|
||||
--> $DIR/issue-43106-gating-of-builtin-attrs.rs:865:5
|
||||
warning: crate-level attribute should be an inner attribute
|
||||
--> $DIR/issue-43106-gating-of-builtin-attrs.rs:901:5
|
||||
|
|
||||
LL | #[no_builtins] fn f() { }
|
||||
| ^^^^^^^^^^^^^^
|
||||
|
|
||||
help: add a `!`
|
||||
|
|
||||
LL | #![no_builtins] fn f() { }
|
||||
| +
|
||||
|
||||
warning: crate-level attribute should be an inner attribute: add an exclamation mark: `#![foo]`
|
||||
--> $DIR/issue-43106-gating-of-builtin-attrs.rs:868:5
|
||||
warning: crate-level attribute should be an inner attribute
|
||||
--> $DIR/issue-43106-gating-of-builtin-attrs.rs:905:5
|
||||
|
|
||||
LL | #[no_builtins] struct S;
|
||||
| ^^^^^^^^^^^^^^
|
||||
|
|
||||
help: add a `!`
|
||||
|
|
||||
LL | #![no_builtins] struct S;
|
||||
| +
|
||||
|
||||
warning: crate-level attribute should be an inner attribute: add an exclamation mark: `#![foo]`
|
||||
--> $DIR/issue-43106-gating-of-builtin-attrs.rs:871:5
|
||||
warning: crate-level attribute should be an inner attribute
|
||||
--> $DIR/issue-43106-gating-of-builtin-attrs.rs:909:5
|
||||
|
|
||||
LL | #[no_builtins] type T = S;
|
||||
| ^^^^^^^^^^^^^^
|
||||
|
|
||||
help: add a `!`
|
||||
|
|
||||
LL | #![no_builtins] type T = S;
|
||||
| +
|
||||
|
||||
warning: crate-level attribute should be an inner attribute: add an exclamation mark: `#![foo]`
|
||||
--> $DIR/issue-43106-gating-of-builtin-attrs.rs:874:5
|
||||
warning: crate-level attribute should be an inner attribute
|
||||
--> $DIR/issue-43106-gating-of-builtin-attrs.rs:913:5
|
||||
|
|
||||
LL | #[no_builtins] impl S { }
|
||||
| ^^^^^^^^^^^^^^
|
||||
|
|
||||
help: add a `!`
|
||||
|
|
||||
LL | #![no_builtins] impl S { }
|
||||
| +
|
||||
|
||||
warning: crate-level attribute should be in the root module
|
||||
--> $DIR/issue-43106-gating-of-builtin-attrs.rs:881:17
|
||||
--> $DIR/issue-43106-gating-of-builtin-attrs.rs:922:17
|
||||
|
|
||||
LL | mod inner { #![recursion_limit="0200"] }
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
|
||||
warning: crate-level attribute should be an inner attribute: add an exclamation mark: `#![foo]`
|
||||
--> $DIR/issue-43106-gating-of-builtin-attrs.rs:884:5
|
||||
warning: crate-level attribute should be an inner attribute
|
||||
--> $DIR/issue-43106-gating-of-builtin-attrs.rs:925:5
|
||||
|
|
||||
LL | #[recursion_limit="0200"] fn f() { }
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
|
|
||||
help: add a `!`
|
||||
|
|
||||
LL | #![recursion_limit="0200"] fn f() { }
|
||||
| +
|
||||
|
||||
warning: crate-level attribute should be an inner attribute: add an exclamation mark: `#![foo]`
|
||||
--> $DIR/issue-43106-gating-of-builtin-attrs.rs:887:5
|
||||
warning: crate-level attribute should be an inner attribute
|
||||
--> $DIR/issue-43106-gating-of-builtin-attrs.rs:929:5
|
||||
|
|
||||
LL | #[recursion_limit="0200"] struct S;
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
|
|
||||
help: add a `!`
|
||||
|
|
||||
LL | #![recursion_limit="0200"] struct S;
|
||||
| +
|
||||
|
||||
warning: crate-level attribute should be an inner attribute: add an exclamation mark: `#![foo]`
|
||||
--> $DIR/issue-43106-gating-of-builtin-attrs.rs:890:5
|
||||
warning: crate-level attribute should be an inner attribute
|
||||
--> $DIR/issue-43106-gating-of-builtin-attrs.rs:933:5
|
||||
|
|
||||
LL | #[recursion_limit="0200"] type T = S;
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
|
|
||||
help: add a `!`
|
||||
|
|
||||
LL | #![recursion_limit="0200"] type T = S;
|
||||
| +
|
||||
|
||||
warning: crate-level attribute should be an inner attribute: add an exclamation mark: `#![foo]`
|
||||
--> $DIR/issue-43106-gating-of-builtin-attrs.rs:893:5
|
||||
warning: crate-level attribute should be an inner attribute
|
||||
--> $DIR/issue-43106-gating-of-builtin-attrs.rs:937:5
|
||||
|
|
||||
LL | #[recursion_limit="0200"] impl S { }
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
|
|
||||
help: add a `!`
|
||||
|
|
||||
LL | #![recursion_limit="0200"] impl S { }
|
||||
| +
|
||||
|
||||
warning: crate-level attribute should be in the root module
|
||||
--> $DIR/issue-43106-gating-of-builtin-attrs.rs:900:17
|
||||
--> $DIR/issue-43106-gating-of-builtin-attrs.rs:946:17
|
||||
|
|
||||
LL | mod inner { #![type_length_limit="0100"] }
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
|
||||
warning: crate-level attribute should be an inner attribute: add an exclamation mark: `#![foo]`
|
||||
--> $DIR/issue-43106-gating-of-builtin-attrs.rs:903:5
|
||||
warning: crate-level attribute should be an inner attribute
|
||||
--> $DIR/issue-43106-gating-of-builtin-attrs.rs:949:5
|
||||
|
|
||||
LL | #[type_length_limit="0100"] fn f() { }
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
|
|
||||
help: add a `!`
|
||||
|
|
||||
LL | #![type_length_limit="0100"] fn f() { }
|
||||
| +
|
||||
|
||||
warning: crate-level attribute should be an inner attribute: add an exclamation mark: `#![foo]`
|
||||
--> $DIR/issue-43106-gating-of-builtin-attrs.rs:906:5
|
||||
warning: crate-level attribute should be an inner attribute
|
||||
--> $DIR/issue-43106-gating-of-builtin-attrs.rs:953:5
|
||||
|
|
||||
LL | #[type_length_limit="0100"] struct S;
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
|
|
||||
help: add a `!`
|
||||
|
|
||||
LL | #![type_length_limit="0100"] struct S;
|
||||
| +
|
||||
|
||||
warning: crate-level attribute should be an inner attribute: add an exclamation mark: `#![foo]`
|
||||
--> $DIR/issue-43106-gating-of-builtin-attrs.rs:909:5
|
||||
warning: crate-level attribute should be an inner attribute
|
||||
--> $DIR/issue-43106-gating-of-builtin-attrs.rs:957:5
|
||||
|
|
||||
LL | #[type_length_limit="0100"] type T = S;
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
|
|
||||
help: add a `!`
|
||||
|
|
||||
LL | #![type_length_limit="0100"] type T = S;
|
||||
| +
|
||||
|
||||
warning: crate-level attribute should be an inner attribute: add an exclamation mark: `#![foo]`
|
||||
--> $DIR/issue-43106-gating-of-builtin-attrs.rs:912:5
|
||||
warning: crate-level attribute should be an inner attribute
|
||||
--> $DIR/issue-43106-gating-of-builtin-attrs.rs:961:5
|
||||
|
|
||||
LL | #[type_length_limit="0100"] impl S { }
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
|
|
||||
help: add a `!`
|
||||
|
|
||||
LL | #![type_length_limit="0100"] impl S { }
|
||||
| +
|
||||
|
||||
warning: `#[macro_use]` attribute cannot be used on functions
|
||||
--> $DIR/issue-43106-gating-of-builtin-attrs.rs:191:5
|
||||
@@ -993,7 +1182,7 @@ LL | #[no_implicit_prelude] impl S { }
|
||||
= help: `#[no_implicit_prelude]` can be applied to modules and crates
|
||||
|
||||
warning: `#[macro_escape]` attribute cannot be used on functions
|
||||
--> $DIR/issue-43106-gating-of-builtin-attrs.rs:510:5
|
||||
--> $DIR/issue-43106-gating-of-builtin-attrs.rs:515:5
|
||||
|
|
||||
LL | #[macro_escape] fn f() { }
|
||||
| ^^^^^^^^^^^^^^^
|
||||
@@ -1002,7 +1191,7 @@ LL | #[macro_escape] fn f() { }
|
||||
= help: `#[macro_escape]` can be applied to modules, extern crates, and crates
|
||||
|
||||
warning: `#[macro_escape]` attribute cannot be used on structs
|
||||
--> $DIR/issue-43106-gating-of-builtin-attrs.rs:516:5
|
||||
--> $DIR/issue-43106-gating-of-builtin-attrs.rs:521:5
|
||||
|
|
||||
LL | #[macro_escape] struct S;
|
||||
| ^^^^^^^^^^^^^^^
|
||||
@@ -1011,7 +1200,7 @@ LL | #[macro_escape] struct S;
|
||||
= help: `#[macro_escape]` can be applied to modules, extern crates, and crates
|
||||
|
||||
warning: `#[macro_escape]` attribute cannot be used on type aliases
|
||||
--> $DIR/issue-43106-gating-of-builtin-attrs.rs:522:5
|
||||
--> $DIR/issue-43106-gating-of-builtin-attrs.rs:527:5
|
||||
|
|
||||
LL | #[macro_escape] type T = S;
|
||||
| ^^^^^^^^^^^^^^^
|
||||
@@ -1020,7 +1209,7 @@ LL | #[macro_escape] type T = S;
|
||||
= help: `#[macro_escape]` can be applied to modules, extern crates, and crates
|
||||
|
||||
warning: `#[macro_escape]` attribute cannot be used on inherent impl blocks
|
||||
--> $DIR/issue-43106-gating-of-builtin-attrs.rs:528:5
|
||||
--> $DIR/issue-43106-gating-of-builtin-attrs.rs:533:5
|
||||
|
|
||||
LL | #[macro_escape] impl S { }
|
||||
| ^^^^^^^^^^^^^^^
|
||||
@@ -1029,7 +1218,7 @@ LL | #[macro_escape] impl S { }
|
||||
= help: `#[macro_escape]` can be applied to modules, extern crates, and crates
|
||||
|
||||
warning: `#[cold]` attribute cannot be used on modules
|
||||
--> $DIR/issue-43106-gating-of-builtin-attrs.rs:571:1
|
||||
--> $DIR/issue-43106-gating-of-builtin-attrs.rs:581:1
|
||||
|
|
||||
LL | #[cold]
|
||||
| ^^^^^^^
|
||||
@@ -1038,7 +1227,7 @@ LL | #[cold]
|
||||
= help: `#[cold]` can only be applied to functions
|
||||
|
||||
warning: `#[cold]` attribute cannot be used on modules
|
||||
--> $DIR/issue-43106-gating-of-builtin-attrs.rs:578:17
|
||||
--> $DIR/issue-43106-gating-of-builtin-attrs.rs:588:17
|
||||
|
|
||||
LL | mod inner { #![cold] }
|
||||
| ^^^^^^^^
|
||||
@@ -1047,7 +1236,7 @@ LL | mod inner { #![cold] }
|
||||
= help: `#[cold]` can only be applied to functions
|
||||
|
||||
warning: `#[cold]` attribute cannot be used on structs
|
||||
--> $DIR/issue-43106-gating-of-builtin-attrs.rs:586:5
|
||||
--> $DIR/issue-43106-gating-of-builtin-attrs.rs:596:5
|
||||
|
|
||||
LL | #[cold] struct S;
|
||||
| ^^^^^^^
|
||||
@@ -1056,7 +1245,7 @@ LL | #[cold] struct S;
|
||||
= help: `#[cold]` can only be applied to functions
|
||||
|
||||
warning: `#[cold]` attribute cannot be used on type aliases
|
||||
--> $DIR/issue-43106-gating-of-builtin-attrs.rs:592:5
|
||||
--> $DIR/issue-43106-gating-of-builtin-attrs.rs:602:5
|
||||
|
|
||||
LL | #[cold] type T = S;
|
||||
| ^^^^^^^
|
||||
@@ -1065,7 +1254,7 @@ LL | #[cold] type T = S;
|
||||
= help: `#[cold]` can only be applied to functions
|
||||
|
||||
warning: `#[cold]` attribute cannot be used on inherent impl blocks
|
||||
--> $DIR/issue-43106-gating-of-builtin-attrs.rs:598:5
|
||||
--> $DIR/issue-43106-gating-of-builtin-attrs.rs:608:5
|
||||
|
|
||||
LL | #[cold] impl S { }
|
||||
| ^^^^^^^
|
||||
@@ -1074,7 +1263,7 @@ LL | #[cold] impl S { }
|
||||
= help: `#[cold]` can only be applied to functions
|
||||
|
||||
warning: `#[link_name]` attribute cannot be used on modules
|
||||
--> $DIR/issue-43106-gating-of-builtin-attrs.rs:605:1
|
||||
--> $DIR/issue-43106-gating-of-builtin-attrs.rs:615:1
|
||||
|
|
||||
LL | #[link_name = "1900"]
|
||||
| ^^^^^^^^^^^^^^^^^^^^^
|
||||
@@ -1083,7 +1272,7 @@ LL | #[link_name = "1900"]
|
||||
= help: `#[link_name]` can be applied to foreign functions and foreign statics
|
||||
|
||||
warning: `#[link_name]` attribute cannot be used on foreign modules
|
||||
--> $DIR/issue-43106-gating-of-builtin-attrs.rs:611:5
|
||||
--> $DIR/issue-43106-gating-of-builtin-attrs.rs:621:5
|
||||
|
|
||||
LL | #[link_name = "1900"]
|
||||
| ^^^^^^^^^^^^^^^^^^^^^
|
||||
@@ -1092,7 +1281,7 @@ LL | #[link_name = "1900"]
|
||||
= help: `#[link_name]` can be applied to foreign functions and foreign statics
|
||||
|
||||
warning: `#[link_name]` attribute cannot be used on modules
|
||||
--> $DIR/issue-43106-gating-of-builtin-attrs.rs:618:17
|
||||
--> $DIR/issue-43106-gating-of-builtin-attrs.rs:628:17
|
||||
|
|
||||
LL | mod inner { #![link_name="1900"] }
|
||||
| ^^^^^^^^^^^^^^^^^^^^
|
||||
@@ -1101,7 +1290,7 @@ LL | mod inner { #![link_name="1900"] }
|
||||
= help: `#[link_name]` can be applied to foreign functions and foreign statics
|
||||
|
||||
warning: `#[link_name]` attribute cannot be used on functions
|
||||
--> $DIR/issue-43106-gating-of-builtin-attrs.rs:624:5
|
||||
--> $DIR/issue-43106-gating-of-builtin-attrs.rs:634:5
|
||||
|
|
||||
LL | #[link_name = "1900"] fn f() { }
|
||||
| ^^^^^^^^^^^^^^^^^^^^^
|
||||
@@ -1110,7 +1299,7 @@ LL | #[link_name = "1900"] fn f() { }
|
||||
= help: `#[link_name]` can be applied to foreign functions and foreign statics
|
||||
|
||||
warning: `#[link_name]` attribute cannot be used on structs
|
||||
--> $DIR/issue-43106-gating-of-builtin-attrs.rs:630:5
|
||||
--> $DIR/issue-43106-gating-of-builtin-attrs.rs:640:5
|
||||
|
|
||||
LL | #[link_name = "1900"] struct S;
|
||||
| ^^^^^^^^^^^^^^^^^^^^^
|
||||
@@ -1119,7 +1308,7 @@ LL | #[link_name = "1900"] struct S;
|
||||
= help: `#[link_name]` can be applied to foreign functions and foreign statics
|
||||
|
||||
warning: `#[link_name]` attribute cannot be used on type aliases
|
||||
--> $DIR/issue-43106-gating-of-builtin-attrs.rs:636:5
|
||||
--> $DIR/issue-43106-gating-of-builtin-attrs.rs:646:5
|
||||
|
|
||||
LL | #[link_name = "1900"] type T = S;
|
||||
| ^^^^^^^^^^^^^^^^^^^^^
|
||||
@@ -1128,7 +1317,7 @@ LL | #[link_name = "1900"] type T = S;
|
||||
= help: `#[link_name]` can be applied to foreign functions and foreign statics
|
||||
|
||||
warning: `#[link_name]` attribute cannot be used on inherent impl blocks
|
||||
--> $DIR/issue-43106-gating-of-builtin-attrs.rs:642:5
|
||||
--> $DIR/issue-43106-gating-of-builtin-attrs.rs:652:5
|
||||
|
|
||||
LL | #[link_name = "1900"] impl S { }
|
||||
| ^^^^^^^^^^^^^^^^^^^^^
|
||||
@@ -1137,7 +1326,7 @@ LL | #[link_name = "1900"] impl S { }
|
||||
= help: `#[link_name]` can be applied to foreign functions and foreign statics
|
||||
|
||||
warning: `#[link_section]` attribute cannot be used on modules
|
||||
--> $DIR/issue-43106-gating-of-builtin-attrs.rs:649:1
|
||||
--> $DIR/issue-43106-gating-of-builtin-attrs.rs:659:1
|
||||
|
|
||||
LL | #[link_section = "1800"]
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
@@ -1146,7 +1335,7 @@ LL | #[link_section = "1800"]
|
||||
= help: `#[link_section]` can be applied to statics and functions
|
||||
|
||||
warning: `#[link_section]` attribute cannot be used on modules
|
||||
--> $DIR/issue-43106-gating-of-builtin-attrs.rs:655:17
|
||||
--> $DIR/issue-43106-gating-of-builtin-attrs.rs:665:17
|
||||
|
|
||||
LL | mod inner { #![link_section="1800"] }
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^^
|
||||
@@ -1155,7 +1344,7 @@ LL | mod inner { #![link_section="1800"] }
|
||||
= help: `#[link_section]` can be applied to statics and functions
|
||||
|
||||
warning: `#[link_section]` attribute cannot be used on structs
|
||||
--> $DIR/issue-43106-gating-of-builtin-attrs.rs:663:5
|
||||
--> $DIR/issue-43106-gating-of-builtin-attrs.rs:673:5
|
||||
|
|
||||
LL | #[link_section = "1800"] struct S;
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
@@ -1164,7 +1353,7 @@ LL | #[link_section = "1800"] struct S;
|
||||
= help: `#[link_section]` can be applied to statics and functions
|
||||
|
||||
warning: `#[link_section]` attribute cannot be used on type aliases
|
||||
--> $DIR/issue-43106-gating-of-builtin-attrs.rs:669:5
|
||||
--> $DIR/issue-43106-gating-of-builtin-attrs.rs:679:5
|
||||
|
|
||||
LL | #[link_section = "1800"] type T = S;
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
@@ -1173,7 +1362,7 @@ LL | #[link_section = "1800"] type T = S;
|
||||
= help: `#[link_section]` can be applied to statics and functions
|
||||
|
||||
warning: `#[link_section]` attribute cannot be used on inherent impl blocks
|
||||
--> $DIR/issue-43106-gating-of-builtin-attrs.rs:675:5
|
||||
--> $DIR/issue-43106-gating-of-builtin-attrs.rs:685:5
|
||||
|
|
||||
LL | #[link_section = "1800"] impl S { }
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
@@ -1182,7 +1371,7 @@ LL | #[link_section = "1800"] impl S { }
|
||||
= help: `#[link_section]` can be applied to statics and functions
|
||||
|
||||
warning: `#[must_use]` attribute cannot be used on modules
|
||||
--> $DIR/issue-43106-gating-of-builtin-attrs.rs:736:1
|
||||
--> $DIR/issue-43106-gating-of-builtin-attrs.rs:746:1
|
||||
|
|
||||
LL | #[must_use]
|
||||
| ^^^^^^^^^^^
|
||||
@@ -1191,7 +1380,7 @@ LL | #[must_use]
|
||||
= help: `#[must_use]` can be applied to functions, data types, unions, and traits
|
||||
|
||||
warning: `#[must_use]` attribute cannot be used on modules
|
||||
--> $DIR/issue-43106-gating-of-builtin-attrs.rs:741:17
|
||||
--> $DIR/issue-43106-gating-of-builtin-attrs.rs:751:17
|
||||
|
|
||||
LL | mod inner { #![must_use] }
|
||||
| ^^^^^^^^^^^^
|
||||
@@ -1200,7 +1389,7 @@ LL | mod inner { #![must_use] }
|
||||
= help: `#[must_use]` can be applied to functions, data types, unions, and traits
|
||||
|
||||
warning: `#[must_use]` attribute cannot be used on type aliases
|
||||
--> $DIR/issue-43106-gating-of-builtin-attrs.rs:750:5
|
||||
--> $DIR/issue-43106-gating-of-builtin-attrs.rs:760:5
|
||||
|
|
||||
LL | #[must_use] type T = S;
|
||||
| ^^^^^^^^^^^
|
||||
@@ -1209,7 +1398,7 @@ LL | #[must_use] type T = S;
|
||||
= help: `#[must_use]` can be applied to functions, data types, unions, and traits
|
||||
|
||||
warning: `#[must_use]` attribute cannot be used on inherent impl blocks
|
||||
--> $DIR/issue-43106-gating-of-builtin-attrs.rs:755:5
|
||||
--> $DIR/issue-43106-gating-of-builtin-attrs.rs:765:5
|
||||
|
|
||||
LL | #[must_use] impl S { }
|
||||
| ^^^^^^^^^^^
|
||||
@@ -1217,6 +1406,76 @@ LL | #[must_use] impl S { }
|
||||
= warning: this was previously accepted by the compiler but is being phased out; it will become a hard error in a future release!
|
||||
= help: `#[must_use]` can be applied to functions, data types, unions, and traits
|
||||
|
||||
warning: crate-level attribute should be an inner attribute: add an exclamation mark: `#![crate_name]`
|
||||
--> $DIR/issue-43106-gating-of-builtin-attrs.rs:797:1
|
||||
|
|
||||
LL | #[crate_name = "0900"]
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^
|
||||
|
|
||||
note: This attribute does not have an `!`, which means it is applied to this module
|
||||
--> $DIR/issue-43106-gating-of-builtin-attrs.rs:799:1
|
||||
|
|
||||
LL | / mod crate_name {
|
||||
LL | |
|
||||
LL | | mod inner { #![crate_name="0900"] }
|
||||
... |
|
||||
LL | | }
|
||||
| |_^
|
||||
|
||||
warning: the `#![crate_name]` attribute can only be used at the crate root
|
||||
--> $DIR/issue-43106-gating-of-builtin-attrs.rs:801:17
|
||||
|
|
||||
LL | mod inner { #![crate_name="0900"] }
|
||||
| ^^^^^^^^^^^^^^^^^^^^^
|
||||
|
||||
warning: crate-level attribute should be an inner attribute: add an exclamation mark: `#![crate_name]`
|
||||
--> $DIR/issue-43106-gating-of-builtin-attrs.rs:804:5
|
||||
|
|
||||
LL | #[crate_name = "0900"] fn f() { }
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^
|
||||
|
|
||||
note: This attribute does not have an `!`, which means it is applied to this function
|
||||
--> $DIR/issue-43106-gating-of-builtin-attrs.rs:804:28
|
||||
|
|
||||
LL | #[crate_name = "0900"] fn f() { }
|
||||
| ^^^^^^^^^^
|
||||
|
||||
warning: crate-level attribute should be an inner attribute: add an exclamation mark: `#![crate_name]`
|
||||
--> $DIR/issue-43106-gating-of-builtin-attrs.rs:808:5
|
||||
|
|
||||
LL | #[crate_name = "0900"] struct S;
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^
|
||||
|
|
||||
note: This attribute does not have an `!`, which means it is applied to this struct
|
||||
--> $DIR/issue-43106-gating-of-builtin-attrs.rs:808:28
|
||||
|
|
||||
LL | #[crate_name = "0900"] struct S;
|
||||
| ^^^^^^^^^
|
||||
|
||||
warning: crate-level attribute should be an inner attribute: add an exclamation mark: `#![crate_name]`
|
||||
--> $DIR/issue-43106-gating-of-builtin-attrs.rs:812:5
|
||||
|
|
||||
LL | #[crate_name = "0900"] type T = S;
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^
|
||||
|
|
||||
note: This attribute does not have an `!`, which means it is applied to this type alias
|
||||
--> $DIR/issue-43106-gating-of-builtin-attrs.rs:812:28
|
||||
|
|
||||
LL | #[crate_name = "0900"] type T = S;
|
||||
| ^^^^^^^^^^^
|
||||
|
||||
warning: crate-level attribute should be an inner attribute: add an exclamation mark: `#![crate_name]`
|
||||
--> $DIR/issue-43106-gating-of-builtin-attrs.rs:816:5
|
||||
|
|
||||
LL | #[crate_name = "0900"] impl S { }
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^
|
||||
|
|
||||
note: This attribute does not have an `!`, which means it is applied to this implementation block
|
||||
--> $DIR/issue-43106-gating-of-builtin-attrs.rs:816:28
|
||||
|
|
||||
LL | #[crate_name = "0900"] impl S { }
|
||||
| ^^^^^^^^^^
|
||||
|
||||
warning: `#[should_panic]` attribute cannot be used on crates
|
||||
--> $DIR/issue-43106-gating-of-builtin-attrs.rs:50:1
|
||||
|
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
warning: crate-level attribute should be an inner attribute: add an exclamation mark: `#![foo]`
|
||||
warning: crate-level attribute should be an inner attribute
|
||||
--> $DIR/linker-warning.rs:7:1
|
||||
|
|
||||
LL | #[allow(linker_messages)]
|
||||
@@ -9,6 +9,10 @@ note: the lint level is defined here
|
||||
|
|
||||
LL | #![warn(unused_attributes)]
|
||||
| ^^^^^^^^^^^^^^^^^
|
||||
help: add a `!`
|
||||
|
|
||||
LL | #![allow(linker_messages)]
|
||||
| +
|
||||
|
||||
warning: unused attribute
|
||||
--> $DIR/linker-warning.rs:4:1
|
||||
|
||||
@@ -10,11 +10,16 @@ note: the lint level is defined here
|
||||
LL | #![deny(unused_attributes)]
|
||||
| ^^^^^^^^^^^^^^^^^
|
||||
|
||||
error: crate-level attribute should be an inner attribute: add an exclamation mark: `#![foo]`
|
||||
error: crate-level attribute should be an inner attribute
|
||||
--> $DIR/lint-misplaced-attr.rs:10:1
|
||||
|
|
||||
LL | #[crate_type = "bin"] fn main() {}
|
||||
| ^^^^^^^^^^^^^^^^^^^^^
|
||||
|
|
||||
help: add a `!`
|
||||
|
|
||||
LL | #![crate_type = "bin"] fn main() {}
|
||||
| +
|
||||
|
||||
error: aborting due to 2 previous errors
|
||||
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
#![deny(unused)]
|
||||
|
||||
#[crate_name = concat !()]
|
||||
//~^ ERROR crate-level attribute should be an inner attribute: add an exclamation mark: `#![foo]
|
||||
//~^ ERROR crate-level attribute should be an inner attribute
|
||||
macro_rules! a {
|
||||
//~^ ERROR unused macro definition
|
||||
() => {};
|
||||
|
||||
@@ -11,12 +11,20 @@ LL | #![deny(unused)]
|
||||
| ^^^^^^
|
||||
= note: `#[deny(unused_macros)]` implied by `#[deny(unused)]`
|
||||
|
||||
error: crate-level attribute should be an inner attribute: add an exclamation mark: `#![foo]`
|
||||
error: crate-level attribute should be an inner attribute: add an exclamation mark: `#![crate_name]`
|
||||
--> $DIR/concat-in-crate-name-issue-137687.rs:3:1
|
||||
|
|
||||
LL | #[crate_name = concat !()]
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
|
|
||||
note: This attribute does not have an `!`, which means it is applied to this macro def
|
||||
--> $DIR/concat-in-crate-name-issue-137687.rs:5:1
|
||||
|
|
||||
LL | / macro_rules! a {
|
||||
LL | |
|
||||
LL | | () => {};
|
||||
LL | | }
|
||||
| |_^
|
||||
= note: `#[deny(unused_attributes)]` implied by `#[deny(unused)]`
|
||||
|
||||
error: aborting due to 2 previous errors
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
error: crate-level attribute should be an inner attribute: add an exclamation mark: `#![foo]`
|
||||
error: crate-level attribute should be an inner attribute
|
||||
--> $DIR/unused-attr-macro-rules.rs:11:1
|
||||
|
|
||||
LL | #[recursion_limit="1"]
|
||||
@@ -9,6 +9,10 @@ note: the lint level is defined here
|
||||
|
|
||||
LL | #![deny(unused_attributes)]
|
||||
| ^^^^^^^^^^^^^^^^^
|
||||
help: add a `!`
|
||||
|
|
||||
LL | #![recursion_limit="1"]
|
||||
| +
|
||||
|
||||
error: `#[macro_use]` attribute cannot be used on macro defs
|
||||
--> $DIR/unused-attr-macro-rules.rs:7:1
|
||||
|
||||
Reference in New Issue
Block a user