1
Fork 0

Check placement of more attributes

This commit is contained in:
Caleb Zulawski 2020-06-14 00:47:42 -04:00
parent de921ab3c3
commit 4efe97a3d9
18 changed files with 816 additions and 354 deletions

View file

@ -71,6 +71,16 @@ impl CheckAttrVisitor<'tcx> {
self.check_track_caller(&attr.span, attrs, span, target) self.check_track_caller(&attr.span, attrs, span, target)
} else if self.tcx.sess.check_name(attr, sym::doc) { } else if self.tcx.sess.check_name(attr, sym::doc) {
self.check_doc_alias(attr, hir_id, target) self.check_doc_alias(attr, hir_id, target)
} else if self.tcx.sess.check_name(attr, sym::cold) {
self.check_cold(&attr, span, target)
} else if self.tcx.sess.check_name(attr, sym::link_name) {
self.check_link_name(&attr, span, target)
} else if self.tcx.sess.check_name(attr, sym::no_link) {
self.check_no_link(&attr, span, target)
} else if self.tcx.sess.check_name(attr, sym::export_name) {
self.check_export_name(&attr, span, target)
} else if self.tcx.sess.check_name(attr, sym::link_section) {
self.check_link_section(&attr, span, target)
} else { } else {
true true
}; };
@ -277,6 +287,99 @@ impl CheckAttrVisitor<'tcx> {
true true
} }
/// Checks if `#[cold]` is applied to a non-function. Returns `true` if valid.
fn check_cold(&self, attr: &Attribute, span: &Span, target: Target) -> bool {
match target {
Target::Fn | Target::Method(..) | Target::ForeignFn => true,
_ => {
self.tcx
.sess
.struct_span_err(attr.span, "attribute should be applied to a function")
.span_label(*span, "not a function")
.emit();
false
}
}
}
/// Checks if `#[link_name]` is applied to an item other than a foreign function or static. Returns `true` if valid.
fn check_link_name(&self, attr: &Attribute, span: &Span, target: Target) -> bool {
if target == Target::ForeignFn || target == Target::ForeignStatic {
true
} else {
let mut err = self.tcx.sess.struct_span_err(
attr.span,
"attribute should be applied to a foreign function or static",
);
err.span_label(*span, "not a foreign function or static");
// See issue #47725
if target == Target::ForeignMod {
if let Some(value) = attr.value_str() {
err.span_help(
attr.span,
&format!(r#"try `#[link(name = "{}")]` instead"#, value),
);
} else {
err.span_help(attr.span, r#"try `#[link(name = "...")]` instead"#);
}
}
err.emit();
false
}
}
/// Checks if `#[no_link]` is applied to an `extern crate`. Returns `true` if valid.
fn check_no_link(&self, attr: &Attribute, span: &Span, target: Target) -> bool {
if target == Target::ExternCrate {
true
} else {
self.tcx
.sess
.struct_span_err(attr.span, "attribute should be applied to an `extern crate` item")
.span_label(*span, "not an `extern crate` item")
.emit();
false
}
}
/// Checks if `#[export_name]` is applied to a function or static. Returns `true` if valid.
fn check_export_name(&self, attr: &Attribute, span: &Span, target: Target) -> bool {
match target {
Target::Static | Target::Fn | Target::Method(..) => true,
_ => {
self.tcx
.sess
.struct_span_err(
attr.span,
"attribute should be applied to a function or static",
)
.span_label(*span, "not a function or static")
.emit();
false
}
}
}
/// Checks if `#[link_section]` is applied to a function or static. Returns `true` if valid.
fn check_link_section(&self, attr: &Attribute, span: &Span, target: Target) -> bool {
match target {
Target::Static | Target::Fn | Target::Method(..) => true,
_ => {
self.tcx
.sess
.struct_span_err(
attr.span,
"attribute should be applied to a function or static",
)
.span_label(*span, "not a function or static")
.emit();
false
}
}
}
/// Checks if the `#[repr]` attributes on `item` are valid. /// Checks if the `#[repr]` attributes on `item` are valid.
fn check_repr( fn check_repr(
&self, &self,
@ -421,10 +524,8 @@ impl CheckAttrVisitor<'tcx> {
fn check_stmt_attributes(&self, stmt: &hir::Stmt<'_>) { fn check_stmt_attributes(&self, stmt: &hir::Stmt<'_>) {
// When checking statements ignore expressions, they will be checked later // When checking statements ignore expressions, they will be checked later
if let hir::StmtKind::Local(ref l) = stmt.kind { if let hir::StmtKind::Local(ref l) = stmt.kind {
self.check_attributes(l.hir_id, &l.attrs, &stmt.span, Target::Statement, None);
for attr in l.attrs.iter() { for attr in l.attrs.iter() {
if self.tcx.sess.check_name(attr, sym::inline) {
self.check_inline(l.hir_id, attr, &stmt.span, Target::Statement);
}
if self.tcx.sess.check_name(attr, sym::repr) { if self.tcx.sess.check_name(attr, sym::repr) {
self.emit_repr_error( self.emit_repr_error(
attr.span, attr.span,
@ -442,10 +543,8 @@ impl CheckAttrVisitor<'tcx> {
hir::ExprKind::Closure(..) => Target::Closure, hir::ExprKind::Closure(..) => Target::Closure,
_ => Target::Expression, _ => Target::Expression,
}; };
self.check_attributes(expr.hir_id, &expr.attrs, &expr.span, target, None);
for attr in expr.attrs.iter() { for attr in expr.attrs.iter() {
if self.tcx.sess.check_name(attr, sym::inline) {
self.check_inline(expr.hir_id, attr, &expr.span, target);
}
if self.tcx.sess.check_name(attr, sym::repr) { if self.tcx.sess.check_name(attr, sym::repr) {
self.emit_repr_error( self.emit_repr_error(
attr.span, attr.span,

View file

@ -2490,10 +2490,17 @@ fn codegen_fn_attrs(tcx: TyCtxt<'_>, id: DefId) -> CodegenFnAttrs {
codegen_fn_attrs.export_name = Some(s); codegen_fn_attrs.export_name = Some(s);
} }
} else if tcx.sess.check_name(attr, sym::target_feature) { } else if tcx.sess.check_name(attr, sym::target_feature) {
if !tcx.is_closure(id) && tcx.fn_sig(id).unsafety() == hir::Unsafety::Normal {
if !tcx.features().target_feature_11 { if !tcx.features().target_feature_11 {
check_target_feature_safe_fn(tcx, id, attr.span); let mut err = feature_err(
&tcx.sess.parse_sess,
sym::target_feature_11,
attr.span,
"`#[target_feature(..)]` can only be applied to `unsafe` functions",
);
err.span_label(tcx.def_span(id), "not an `unsafe` function");
err.emit();
} else if let Some(local_id) = id.as_local() { } else if let Some(local_id) = id.as_local() {
if tcx.fn_sig(id).unsafety() == hir::Unsafety::Normal {
check_target_feature_trait_unsafe(tcx, local_id, attr.span); check_target_feature_trait_unsafe(tcx, local_id, attr.span);
} }
} }
@ -2750,21 +2757,6 @@ fn check_link_name_xor_ordinal(
} }
} }
/// Checks the function annotated with `#[target_feature]` is unsafe,
/// reporting an error if it isn't.
fn check_target_feature_safe_fn(tcx: TyCtxt<'_>, id: DefId, attr_span: Span) {
if tcx.is_closure(id) || tcx.fn_sig(id).unsafety() == hir::Unsafety::Normal {
let mut err = feature_err(
&tcx.sess.parse_sess,
sym::target_feature_11,
attr_span,
"`#[target_feature(..)]` can only be applied to `unsafe` functions",
);
err.span_label(tcx.def_span(id), "not an `unsafe` function");
err.emit();
}
}
/// Checks the function annotated with `#[target_feature]` is not a safe /// Checks the function annotated with `#[target_feature]` is not a safe
/// trait method implementation, reporting an error if it is. /// trait method implementation, reporting an error if it is.
fn check_target_feature_trait_unsafe(tcx: TyCtxt<'_>, id: LocalDefId, attr_span: Span) { fn check_target_feature_trait_unsafe(tcx: TyCtxt<'_>, id: LocalDefId, attr_span: Span) {

View file

@ -15,7 +15,7 @@ extern crate libc;
use libc::c_int; use libc::c_int;
#[link_name = "check_static_recursion_foreign_helper"] #[link(name = "check_static_recursion_foreign_helper")]
extern "C" { extern "C" {
#[allow(dead_code)] #[allow(dead_code)]
static test_static: c_int; static test_static: c_int;

View file

@ -0,0 +1,171 @@
// This is testing whether various builtin attributes signals an
// error or warning when put in "weird" places.
//
// (This file sits on its own because it actually signals an error,
// which would mess up the treatment of other cases in
// issue-43106-gating-of-builtin-attrs.rs)
// ignore-tidy-linelength
// Crate-level is accepted, though it is almost certainly unused?
#![inline]
#[inline]
//~^ ERROR attribute should be applied to function or closure
mod inline {
//~^ NOTE not a function or closure
mod inner { #![inline] }
//~^ ERROR attribute should be applied to function or closure
//~| NOTE not a function or closure
#[inline = "2100"] fn f() { }
//~^ ERROR attribute must be of the form
//~| WARN this was previously accepted
//~| NOTE #[deny(ill_formed_attribute_input)]` on by default
//~| NOTE for more information, see issue #57571 <https://github.com/rust-lang/rust/issues/57571>
#[inline] struct S;
//~^ ERROR attribute should be applied to function or closure
//~| NOTE not a function or closure
#[inline] type T = S;
//~^ ERROR attribute should be applied to function or closure
//~| NOTE not a function or closure
#[inline] impl S { }
//~^ ERROR attribute should be applied to function or closure
//~| NOTE not a function or closure
}
#[no_link]
//~^ ERROR attribute should be applied to an `extern crate` item
mod no_link {
//~^ NOTE not an `extern crate` item
mod inner { #![no_link] }
//~^ ERROR attribute should be applied to an `extern crate` item
//~| NOTE not an `extern crate` item
#[no_link] fn f() { }
//~^ ERROR attribute should be applied to an `extern crate` item
//~| NOTE not an `extern crate` item
#[no_link] struct S;
//~^ ERROR attribute should be applied to an `extern crate` item
//~| NOTE not an `extern crate` item
#[no_link]type T = S;
//~^ ERROR attribute should be applied to an `extern crate` item
//~| NOTE not an `extern crate` item
#[no_link] impl S { }
//~^ ERROR attribute should be applied to an `extern crate` item
//~| NOTE not an `extern crate` item
}
#[cold]
//~^ ERROR attribute should be applied to a function
mod cold {
//~^ NOTE not a function
mod inner { #![cold] }
//~^ ERROR attribute should be applied to a function
//~| NOTE not a function
#[cold] fn f() { }
#[cold] struct S;
//~^ ERROR attribute should be applied to a function
//~| NOTE not a function
#[cold] type T = S;
//~^ ERROR attribute should be applied to a function
//~| NOTE not a function
#[cold] impl S { }
//~^ ERROR attribute should be applied to a function
//~| NOTE not a function
}
#[export_name = "2200"]
//~^ ERROR attribute should be applied to a function or static
mod export_name {
//~^ NOTE not a function or static
mod inner { #![export_name="2200"] }
//~^ ERROR attribute should be applied to a function or static
//~| NOTE not a function or static
#[export_name = "2200"] fn f() { }
#[export_name = "2200"] struct S;
//~^ ERROR attribute should be applied to a function or static
//~| NOTE not a function or static
#[export_name = "2200"] type T = S;
//~^ ERROR attribute should be applied to a function or static
//~| NOTE not a function or static
#[export_name = "2200"] impl S { }
//~^ ERROR attribute should be applied to a function or static
//~| NOTE not a function or static
}
#[link_name = "1900"]
//~^ ERROR attribute should be applied to a foreign function or static
mod link_name {
//~^ NOTE not a foreign function or static
#[link_name = "1900"]
//~^ ERROR attribute should be applied to a foreign function or static
//~| HELP try `#[link(name = "1900")]` instead
extern { }
//~^ NOTE not a foreign function or static
mod inner { #![link_name="1900"] }
//~^ ERROR attribute should be applied to a foreign function or static
//~| NOTE not a foreign function or static
#[link_name = "1900"] fn f() { }
//~^ ERROR attribute should be applied to a foreign function or static
//~| NOTE not a foreign function or static
#[link_name = "1900"] struct S;
//~^ ERROR attribute should be applied to a foreign function or static
//~| NOTE not a foreign function or static
#[link_name = "1900"] type T = S;
//~^ ERROR attribute should be applied to a foreign function or static
//~| NOTE not a foreign function or static
#[link_name = "1900"] impl S { }
//~^ ERROR attribute should be applied to a foreign function or static
//~| NOTE not a foreign function or static
}
#[link_section = "1800"]
//~^ ERROR attribute should be applied to a function or static
mod link_section {
//~^ NOTE not a function or static
mod inner { #![link_section="1800"] }
//~^ ERROR attribute should be applied to a function or static
//~| NOTE not a function or static
#[link_section = "1800"] fn f() { }
#[link_section = "1800"] struct S;
//~^ ERROR attribute should be applied to a function or static
//~| NOTE not a function or static
#[link_section = "1800"] type T = S;
//~^ ERROR attribute should be applied to a function or static
//~| NOTE not a function or static
#[link_section = "1800"] impl S { }
//~^ ERROR attribute should be applied to a function or static
//~| NOTE not a function or static
}
fn main() {}

View file

@ -0,0 +1,274 @@
error: attribute must be of the form `#[inline]` or `#[inline(always|never)]`
--> $DIR/issue-43106-gating-of-builtin-attrs-error.rs:22:5
|
LL | #[inline = "2100"] fn f() { }
| ^^^^^^^^^^^^^^^^^^
|
= note: `#[deny(ill_formed_attribute_input)]` on by default
= warning: this was previously accepted by the compiler but is being phased out; it will become a hard error in a future release!
= note: for more information, see issue #57571 <https://github.com/rust-lang/rust/issues/57571>
error[E0518]: attribute should be applied to function or closure
--> $DIR/issue-43106-gating-of-builtin-attrs-error.rs:13:1
|
LL | #[inline]
| ^^^^^^^^^
LL |
LL | / mod inline {
LL | |
LL | |
LL | | mod inner { #![inline] }
... |
LL | |
LL | | }
| |_- not a function or closure
error: attribute should be applied to an `extern crate` item
--> $DIR/issue-43106-gating-of-builtin-attrs-error.rs:41:1
|
LL | #[no_link]
| ^^^^^^^^^^
LL |
LL | / mod no_link {
LL | |
LL | |
LL | | mod inner { #![no_link] }
... |
LL | |
LL | | }
| |_- not an `extern crate` item
error: attribute should be applied to a function
--> $DIR/issue-43106-gating-of-builtin-attrs-error.rs:67:1
|
LL | #[cold]
| ^^^^^^^
LL |
LL | / mod cold {
LL | |
LL | |
LL | | mod inner { #![cold] }
... |
LL | |
LL | | }
| |_- not a function
error: attribute should be applied to a function or static
--> $DIR/issue-43106-gating-of-builtin-attrs-error.rs:91:1
|
LL | #[export_name = "2200"]
| ^^^^^^^^^^^^^^^^^^^^^^^
LL |
LL | / mod export_name {
LL | |
LL | |
LL | | mod inner { #![export_name="2200"] }
... |
LL | |
LL | | }
| |_- not a function or static
error: attribute should be applied to a foreign function or static
--> $DIR/issue-43106-gating-of-builtin-attrs-error.rs:115:1
|
LL | #[link_name = "1900"]
| ^^^^^^^^^^^^^^^^^^^^^
LL |
LL | / mod link_name {
LL | |
LL | |
LL | | #[link_name = "1900"]
... |
LL | |
LL | | }
| |_- not a foreign function or static
error: attribute should be applied to a function or static
--> $DIR/issue-43106-gating-of-builtin-attrs-error.rs:147:1
|
LL | #[link_section = "1800"]
| ^^^^^^^^^^^^^^^^^^^^^^^^
LL |
LL | / mod link_section {
LL | |
LL | |
LL | | mod inner { #![link_section="1800"] }
... |
LL | |
LL | | }
| |_- not a function or static
error[E0518]: attribute should be applied to function or closure
--> $DIR/issue-43106-gating-of-builtin-attrs-error.rs:18:17
|
LL | mod inner { #![inline] }
| ------------^^^^^^^^^^-- not a function or closure
error[E0518]: attribute should be applied to function or closure
--> $DIR/issue-43106-gating-of-builtin-attrs-error.rs:28:5
|
LL | #[inline] struct S;
| ^^^^^^^^^ --------- not a function or closure
error[E0518]: attribute should be applied to function or closure
--> $DIR/issue-43106-gating-of-builtin-attrs-error.rs:32:5
|
LL | #[inline] type T = S;
| ^^^^^^^^^ ----------- not a function or closure
error[E0518]: attribute should be applied to function or closure
--> $DIR/issue-43106-gating-of-builtin-attrs-error.rs:36:5
|
LL | #[inline] impl S { }
| ^^^^^^^^^ ---------- not a function or closure
error: attribute should be applied to an `extern crate` item
--> $DIR/issue-43106-gating-of-builtin-attrs-error.rs:46:17
|
LL | mod inner { #![no_link] }
| ------------^^^^^^^^^^^-- not an `extern crate` item
error: attribute should be applied to an `extern crate` item
--> $DIR/issue-43106-gating-of-builtin-attrs-error.rs:50:5
|
LL | #[no_link] fn f() { }
| ^^^^^^^^^^ ---------- not an `extern crate` item
error: attribute should be applied to an `extern crate` item
--> $DIR/issue-43106-gating-of-builtin-attrs-error.rs:54:5
|
LL | #[no_link] struct S;
| ^^^^^^^^^^ --------- not an `extern crate` item
error: attribute should be applied to an `extern crate` item
--> $DIR/issue-43106-gating-of-builtin-attrs-error.rs:58:5
|
LL | #[no_link]type T = S;
| ^^^^^^^^^^----------- not an `extern crate` item
error: attribute should be applied to an `extern crate` item
--> $DIR/issue-43106-gating-of-builtin-attrs-error.rs:62:5
|
LL | #[no_link] impl S { }
| ^^^^^^^^^^ ---------- not an `extern crate` item
error: attribute should be applied to a function
--> $DIR/issue-43106-gating-of-builtin-attrs-error.rs:72:17
|
LL | mod inner { #![cold] }
| ------------^^^^^^^^-- not a function
error: attribute should be applied to a function
--> $DIR/issue-43106-gating-of-builtin-attrs-error.rs:78:5
|
LL | #[cold] struct S;
| ^^^^^^^ --------- not a function
error: attribute should be applied to a function
--> $DIR/issue-43106-gating-of-builtin-attrs-error.rs:82:5
|
LL | #[cold] type T = S;
| ^^^^^^^ ----------- not a function
error: attribute should be applied to a function
--> $DIR/issue-43106-gating-of-builtin-attrs-error.rs:86:5
|
LL | #[cold] impl S { }
| ^^^^^^^ ---------- not a function
error: attribute should be applied to a function or static
--> $DIR/issue-43106-gating-of-builtin-attrs-error.rs:96:17
|
LL | mod inner { #![export_name="2200"] }
| ------------^^^^^^^^^^^^^^^^^^^^^^-- not a function or static
error: attribute should be applied to a function or static
--> $DIR/issue-43106-gating-of-builtin-attrs-error.rs:102:5
|
LL | #[export_name = "2200"] struct S;
| ^^^^^^^^^^^^^^^^^^^^^^^ --------- not a function or static
error: attribute should be applied to a function or static
--> $DIR/issue-43106-gating-of-builtin-attrs-error.rs:106:5
|
LL | #[export_name = "2200"] type T = S;
| ^^^^^^^^^^^^^^^^^^^^^^^ ----------- not a function or static
error: attribute should be applied to a function or static
--> $DIR/issue-43106-gating-of-builtin-attrs-error.rs:110:5
|
LL | #[export_name = "2200"] impl S { }
| ^^^^^^^^^^^^^^^^^^^^^^^ ---------- not a function or static
error: attribute should be applied to a foreign function or static
--> $DIR/issue-43106-gating-of-builtin-attrs-error.rs:120:5
|
LL | #[link_name = "1900"]
| ^^^^^^^^^^^^^^^^^^^^^
...
LL | extern { }
| ---------- not a foreign function or static
|
help: try `#[link(name = "1900")]` instead
--> $DIR/issue-43106-gating-of-builtin-attrs-error.rs:120:5
|
LL | #[link_name = "1900"]
| ^^^^^^^^^^^^^^^^^^^^^
error: attribute should be applied to a foreign function or static
--> $DIR/issue-43106-gating-of-builtin-attrs-error.rs:126:17
|
LL | mod inner { #![link_name="1900"] }
| ------------^^^^^^^^^^^^^^^^^^^^-- not a foreign function or static
error: attribute should be applied to a foreign function or static
--> $DIR/issue-43106-gating-of-builtin-attrs-error.rs:130:5
|
LL | #[link_name = "1900"] fn f() { }
| ^^^^^^^^^^^^^^^^^^^^^ ---------- not a foreign function or static
error: attribute should be applied to a foreign function or static
--> $DIR/issue-43106-gating-of-builtin-attrs-error.rs:134:5
|
LL | #[link_name = "1900"] struct S;
| ^^^^^^^^^^^^^^^^^^^^^ --------- not a foreign function or static
error: attribute should be applied to a foreign function or static
--> $DIR/issue-43106-gating-of-builtin-attrs-error.rs:138:5
|
LL | #[link_name = "1900"] type T = S;
| ^^^^^^^^^^^^^^^^^^^^^ ----------- not a foreign function or static
error: attribute should be applied to a foreign function or static
--> $DIR/issue-43106-gating-of-builtin-attrs-error.rs:142:5
|
LL | #[link_name = "1900"] impl S { }
| ^^^^^^^^^^^^^^^^^^^^^ ---------- not a foreign function or static
error: attribute should be applied to a function or static
--> $DIR/issue-43106-gating-of-builtin-attrs-error.rs:152:17
|
LL | mod inner { #![link_section="1800"] }
| ------------^^^^^^^^^^^^^^^^^^^^^^^-- not a function or static
error: attribute should be applied to a function or static
--> $DIR/issue-43106-gating-of-builtin-attrs-error.rs:158:5
|
LL | #[link_section = "1800"] struct S;
| ^^^^^^^^^^^^^^^^^^^^^^^^ --------- not a function or static
error: attribute should be applied to a function or static
--> $DIR/issue-43106-gating-of-builtin-attrs-error.rs:162:5
|
LL | #[link_section = "1800"] type T = S;
| ^^^^^^^^^^^^^^^^^^^^^^^^ ----------- not a function or static
error: attribute should be applied to a function or static
--> $DIR/issue-43106-gating-of-builtin-attrs-error.rs:166:5
|
LL | #[link_section = "1800"] impl S { }
| ^^^^^^^^^^^^^^^^^^^^^^^^ ---------- not a function or static
error: aborting due to 34 previous errors
For more information about this error, try `rustc --explain E0518`.

View file

@ -72,7 +72,7 @@
#![doc = "2400"] #![doc = "2400"]
#![cold] #![cold]
#![export_name = "2200"] #![export_name = "2200"]
// see issue-43106-gating-of-inline.rs // see issue-43106-gating-of-builtin-attrs-error.rs
#![link()] #![link()]
#![link_name = "1900"] #![link_name = "1900"]
#![link_section = "1800"] #![link_section = "1800"]
@ -367,25 +367,6 @@ mod no_mangle {
#[no_mangle] impl S { } #[no_mangle] impl S { }
} }
#[no_link]
//~^ WARN unused attribute
mod no_link {
mod inner { #![no_link] }
//~^ WARN unused attribute
#[no_link] fn f() { }
//~^ WARN unused attribute
#[no_link] struct S;
//~^ WARN unused attribute
#[no_link]type T = S;
//~^ WARN unused attribute
#[no_link] impl S { }
//~^ WARN unused attribute
}
#[should_panic] #[should_panic]
//~^ WARN unused attribute //~^ WARN unused attribute
mod should_panic { mod should_panic {
@ -524,32 +505,6 @@ mod doc {
#[doc = "2400"] impl S { } #[doc = "2400"] impl S { }
} }
#[cold]
mod cold {
mod inner { #![cold] }
#[cold] fn f() { }
#[cold] struct S;
#[cold] type T = S;
#[cold] impl S { }
}
#[export_name = "2200"]
mod export_name {
mod inner { #![export_name="2200"] }
#[export_name = "2200"] fn f() { }
#[export_name = "2200"] struct S;
#[export_name = "2200"] type T = S;
#[export_name = "2200"] impl S { }
}
// Note that this is a `check-pass` test, so it // Note that this is a `check-pass` test, so it
// will never invoke the linker. These are here nonetheless to point // will never invoke the linker. These are here nonetheless to point
// out that we allow them at non-crate-level (though I do not know // out that we allow them at non-crate-level (though I do not know
@ -568,32 +523,6 @@ mod link {
#[link()] impl S { } #[link()] impl S { }
} }
#[link_name = "1900"]
mod link_name {
mod inner { #![link_name="1900"] }
#[link_name = "1900"] fn f() { }
#[link_name = "1900"] struct S;
#[link_name = "1900"] type T = S;
#[link_name = "1900"] impl S { }
}
#[link_section = "1800"]
mod link_section {
mod inner { #![link_section="1800"] }
#[link_section = "1800"] fn f() { }
#[link_section = "1800"] struct S;
#[link_section = "1800"] type T = S;
#[link_section = "1800"] impl S { }
}
struct StructForDeprecated; struct StructForDeprecated;
#[deprecated] #[deprecated]

View file

@ -173,13 +173,13 @@ LL | #[deny(x5100)] impl S { }
| ^^^^^ | ^^^^^
warning: `#[macro_escape]` is a deprecated synonym for `#[macro_use]` warning: `#[macro_escape]` is a deprecated synonym for `#[macro_use]`
--> $DIR/issue-43106-gating-of-builtin-attrs.rs:466:1 --> $DIR/issue-43106-gating-of-builtin-attrs.rs:447:1
| |
LL | #[macro_escape] LL | #[macro_escape]
| ^^^^^^^^^^^^^^^ | ^^^^^^^^^^^^^^^
warning: `#[macro_escape]` is a deprecated synonym for `#[macro_use]` warning: `#[macro_escape]` is a deprecated synonym for `#[macro_use]`
--> $DIR/issue-43106-gating-of-builtin-attrs.rs:469:17 --> $DIR/issue-43106-gating-of-builtin-attrs.rs:450:17
| |
LL | mod inner { #![macro_escape] } LL | mod inner { #![macro_escape] }
| ^^^^^^^^^^^^^^^^ | ^^^^^^^^^^^^^^^^
@ -463,707 +463,671 @@ LL | #[automatically_derived]
warning: unused attribute warning: unused attribute
--> $DIR/issue-43106-gating-of-builtin-attrs.rs:373:17 --> $DIR/issue-43106-gating-of-builtin-attrs.rs:373:17
| |
LL | mod inner { #![no_link] }
| ^^^^^^^^^^^
warning: unused attribute
--> $DIR/issue-43106-gating-of-builtin-attrs.rs:376:5
|
LL | #[no_link] fn f() { }
| ^^^^^^^^^^
warning: unused attribute
--> $DIR/issue-43106-gating-of-builtin-attrs.rs:379:5
|
LL | #[no_link] struct S;
| ^^^^^^^^^^
warning: unused attribute
--> $DIR/issue-43106-gating-of-builtin-attrs.rs:382:5
|
LL | #[no_link]type T = S;
| ^^^^^^^^^^
warning: unused attribute
--> $DIR/issue-43106-gating-of-builtin-attrs.rs:385:5
|
LL | #[no_link] impl S { }
| ^^^^^^^^^^
warning: unused attribute
--> $DIR/issue-43106-gating-of-builtin-attrs.rs:370:1
|
LL | #[no_link]
| ^^^^^^^^^^
warning: unused attribute
--> $DIR/issue-43106-gating-of-builtin-attrs.rs:392:17
|
LL | mod inner { #![should_panic] } LL | mod inner { #![should_panic] }
| ^^^^^^^^^^^^^^^^ | ^^^^^^^^^^^^^^^^
warning: unused attribute warning: unused attribute
--> $DIR/issue-43106-gating-of-builtin-attrs.rs:395:5 --> $DIR/issue-43106-gating-of-builtin-attrs.rs:376:5
| |
LL | #[should_panic] fn f() { } LL | #[should_panic] fn f() { }
| ^^^^^^^^^^^^^^^ | ^^^^^^^^^^^^^^^
warning: unused attribute warning: unused attribute
--> $DIR/issue-43106-gating-of-builtin-attrs.rs:398:5 --> $DIR/issue-43106-gating-of-builtin-attrs.rs:379:5
| |
LL | #[should_panic] struct S; LL | #[should_panic] struct S;
| ^^^^^^^^^^^^^^^ | ^^^^^^^^^^^^^^^
warning: unused attribute warning: unused attribute
--> $DIR/issue-43106-gating-of-builtin-attrs.rs:401:5 --> $DIR/issue-43106-gating-of-builtin-attrs.rs:382:5
| |
LL | #[should_panic] type T = S; LL | #[should_panic] type T = S;
| ^^^^^^^^^^^^^^^ | ^^^^^^^^^^^^^^^
warning: unused attribute warning: unused attribute
--> $DIR/issue-43106-gating-of-builtin-attrs.rs:404:5 --> $DIR/issue-43106-gating-of-builtin-attrs.rs:385:5
| |
LL | #[should_panic] impl S { } LL | #[should_panic] impl S { }
| ^^^^^^^^^^^^^^^ | ^^^^^^^^^^^^^^^
warning: unused attribute warning: unused attribute
--> $DIR/issue-43106-gating-of-builtin-attrs.rs:389:1 --> $DIR/issue-43106-gating-of-builtin-attrs.rs:370:1
| |
LL | #[should_panic] LL | #[should_panic]
| ^^^^^^^^^^^^^^^ | ^^^^^^^^^^^^^^^
warning: unused attribute warning: unused attribute
--> $DIR/issue-43106-gating-of-builtin-attrs.rs:411:17 --> $DIR/issue-43106-gating-of-builtin-attrs.rs:392:17
| |
LL | mod inner { #![ignore] } LL | mod inner { #![ignore] }
| ^^^^^^^^^^ | ^^^^^^^^^^
warning: unused attribute warning: unused attribute
--> $DIR/issue-43106-gating-of-builtin-attrs.rs:414:5 --> $DIR/issue-43106-gating-of-builtin-attrs.rs:395:5
| |
LL | #[ignore] fn f() { } LL | #[ignore] fn f() { }
| ^^^^^^^^^ | ^^^^^^^^^
warning: unused attribute warning: unused attribute
--> $DIR/issue-43106-gating-of-builtin-attrs.rs:417:5 --> $DIR/issue-43106-gating-of-builtin-attrs.rs:398:5
| |
LL | #[ignore] struct S; LL | #[ignore] struct S;
| ^^^^^^^^^ | ^^^^^^^^^
warning: unused attribute warning: unused attribute
--> $DIR/issue-43106-gating-of-builtin-attrs.rs:420:5 --> $DIR/issue-43106-gating-of-builtin-attrs.rs:401:5
| |
LL | #[ignore] type T = S; LL | #[ignore] type T = S;
| ^^^^^^^^^ | ^^^^^^^^^
warning: unused attribute warning: unused attribute
--> $DIR/issue-43106-gating-of-builtin-attrs.rs:423:5 --> $DIR/issue-43106-gating-of-builtin-attrs.rs:404:5
| |
LL | #[ignore] impl S { } LL | #[ignore] impl S { }
| ^^^^^^^^^ | ^^^^^^^^^
warning: unused attribute warning: unused attribute
--> $DIR/issue-43106-gating-of-builtin-attrs.rs:408:1 --> $DIR/issue-43106-gating-of-builtin-attrs.rs:389:1
| |
LL | #[ignore] LL | #[ignore]
| ^^^^^^^^^ | ^^^^^^^^^
warning: unused attribute warning: unused attribute
--> $DIR/issue-43106-gating-of-builtin-attrs.rs:430:17 --> $DIR/issue-43106-gating-of-builtin-attrs.rs:411:17
| |
LL | mod inner { #![no_implicit_prelude] } LL | mod inner { #![no_implicit_prelude] }
| ^^^^^^^^^^^^^^^^^^^^^^^ | ^^^^^^^^^^^^^^^^^^^^^^^
warning: unused attribute warning: unused attribute
--> $DIR/issue-43106-gating-of-builtin-attrs.rs:433:5 --> $DIR/issue-43106-gating-of-builtin-attrs.rs:414:5
| |
LL | #[no_implicit_prelude] fn f() { } LL | #[no_implicit_prelude] fn f() { }
| ^^^^^^^^^^^^^^^^^^^^^^ | ^^^^^^^^^^^^^^^^^^^^^^
warning: unused attribute warning: unused attribute
--> $DIR/issue-43106-gating-of-builtin-attrs.rs:436:5 --> $DIR/issue-43106-gating-of-builtin-attrs.rs:417:5
| |
LL | #[no_implicit_prelude] struct S; LL | #[no_implicit_prelude] struct S;
| ^^^^^^^^^^^^^^^^^^^^^^ | ^^^^^^^^^^^^^^^^^^^^^^
warning: unused attribute warning: unused attribute
--> $DIR/issue-43106-gating-of-builtin-attrs.rs:439:5 --> $DIR/issue-43106-gating-of-builtin-attrs.rs:420:5
| |
LL | #[no_implicit_prelude] type T = S; LL | #[no_implicit_prelude] type T = S;
| ^^^^^^^^^^^^^^^^^^^^^^ | ^^^^^^^^^^^^^^^^^^^^^^
warning: unused attribute warning: unused attribute
--> $DIR/issue-43106-gating-of-builtin-attrs.rs:442:5 --> $DIR/issue-43106-gating-of-builtin-attrs.rs:423:5
| |
LL | #[no_implicit_prelude] impl S { } LL | #[no_implicit_prelude] impl S { }
| ^^^^^^^^^^^^^^^^^^^^^^ | ^^^^^^^^^^^^^^^^^^^^^^
warning: unused attribute warning: unused attribute
--> $DIR/issue-43106-gating-of-builtin-attrs.rs:427:1 --> $DIR/issue-43106-gating-of-builtin-attrs.rs:408:1
| |
LL | #[no_implicit_prelude] LL | #[no_implicit_prelude]
| ^^^^^^^^^^^^^^^^^^^^^^ | ^^^^^^^^^^^^^^^^^^^^^^
warning: unused attribute warning: unused attribute
--> $DIR/issue-43106-gating-of-builtin-attrs.rs:449:17 --> $DIR/issue-43106-gating-of-builtin-attrs.rs:430:17
| |
LL | mod inner { #![reexport_test_harness_main="2900"] } LL | mod inner { #![reexport_test_harness_main="2900"] }
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
warning: unused attribute warning: unused attribute
--> $DIR/issue-43106-gating-of-builtin-attrs.rs:452:5 --> $DIR/issue-43106-gating-of-builtin-attrs.rs:433:5
| |
LL | #[reexport_test_harness_main = "2900"] fn f() { } LL | #[reexport_test_harness_main = "2900"] fn f() { }
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
warning: unused attribute warning: unused attribute
--> $DIR/issue-43106-gating-of-builtin-attrs.rs:455:5 --> $DIR/issue-43106-gating-of-builtin-attrs.rs:436:5
| |
LL | #[reexport_test_harness_main = "2900"] struct S; LL | #[reexport_test_harness_main = "2900"] struct S;
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
warning: unused attribute warning: unused attribute
--> $DIR/issue-43106-gating-of-builtin-attrs.rs:458:5 --> $DIR/issue-43106-gating-of-builtin-attrs.rs:439:5
| |
LL | #[reexport_test_harness_main = "2900"] type T = S; LL | #[reexport_test_harness_main = "2900"] type T = S;
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
warning: unused attribute warning: unused attribute
--> $DIR/issue-43106-gating-of-builtin-attrs.rs:461:5 --> $DIR/issue-43106-gating-of-builtin-attrs.rs:442:5
| |
LL | #[reexport_test_harness_main = "2900"] impl S { } LL | #[reexport_test_harness_main = "2900"] impl S { }
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
warning: unused attribute warning: unused attribute
--> $DIR/issue-43106-gating-of-builtin-attrs.rs:446:1 --> $DIR/issue-43106-gating-of-builtin-attrs.rs:427:1
| |
LL | #[reexport_test_harness_main = "2900"] LL | #[reexport_test_harness_main = "2900"]
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
warning: unused attribute warning: unused attribute
--> $DIR/issue-43106-gating-of-builtin-attrs.rs:472:5 --> $DIR/issue-43106-gating-of-builtin-attrs.rs:453:5
| |
LL | #[macro_escape] fn f() { } LL | #[macro_escape] fn f() { }
| ^^^^^^^^^^^^^^^ | ^^^^^^^^^^^^^^^
warning: unused attribute warning: unused attribute
--> $DIR/issue-43106-gating-of-builtin-attrs.rs:475:5 --> $DIR/issue-43106-gating-of-builtin-attrs.rs:456:5
| |
LL | #[macro_escape] struct S; LL | #[macro_escape] struct S;
| ^^^^^^^^^^^^^^^ | ^^^^^^^^^^^^^^^
warning: unused attribute warning: unused attribute
--> $DIR/issue-43106-gating-of-builtin-attrs.rs:478:5 --> $DIR/issue-43106-gating-of-builtin-attrs.rs:459:5
| |
LL | #[macro_escape] type T = S; LL | #[macro_escape] type T = S;
| ^^^^^^^^^^^^^^^ | ^^^^^^^^^^^^^^^
warning: unused attribute warning: unused attribute
--> $DIR/issue-43106-gating-of-builtin-attrs.rs:481:5 --> $DIR/issue-43106-gating-of-builtin-attrs.rs:462:5
| |
LL | #[macro_escape] impl S { } LL | #[macro_escape] impl S { }
| ^^^^^^^^^^^^^^^ | ^^^^^^^^^^^^^^^
warning: unused attribute warning: unused attribute
--> $DIR/issue-43106-gating-of-builtin-attrs.rs:489:17 --> $DIR/issue-43106-gating-of-builtin-attrs.rs:470:17
| |
LL | mod inner { #![no_std] } LL | mod inner { #![no_std] }
| ^^^^^^^^^^ | ^^^^^^^^^^
warning: crate-level attribute should be in the root module warning: crate-level attribute should be in the root module
--> $DIR/issue-43106-gating-of-builtin-attrs.rs:489:17 --> $DIR/issue-43106-gating-of-builtin-attrs.rs:470:17
| |
LL | mod inner { #![no_std] } LL | mod inner { #![no_std] }
| ^^^^^^^^^^ | ^^^^^^^^^^
warning: unused attribute warning: unused attribute
--> $DIR/issue-43106-gating-of-builtin-attrs.rs:493:5 --> $DIR/issue-43106-gating-of-builtin-attrs.rs:474:5
| |
LL | #[no_std] fn f() { } LL | #[no_std] fn f() { }
| ^^^^^^^^^ | ^^^^^^^^^
warning: crate-level attribute should be an inner attribute: add an exclamation mark: `#![foo]` warning: crate-level attribute should be an inner attribute: add an exclamation mark: `#![foo]`
--> $DIR/issue-43106-gating-of-builtin-attrs.rs:493:5 --> $DIR/issue-43106-gating-of-builtin-attrs.rs:474:5
| |
LL | #[no_std] fn f() { } LL | #[no_std] fn f() { }
| ^^^^^^^^^ | ^^^^^^^^^
warning: unused attribute warning: unused attribute
--> $DIR/issue-43106-gating-of-builtin-attrs.rs:497:5 --> $DIR/issue-43106-gating-of-builtin-attrs.rs:478:5
| |
LL | #[no_std] struct S; LL | #[no_std] struct S;
| ^^^^^^^^^ | ^^^^^^^^^
warning: crate-level attribute should be an inner attribute: add an exclamation mark: `#![foo]` warning: crate-level attribute should be an inner attribute: add an exclamation mark: `#![foo]`
--> $DIR/issue-43106-gating-of-builtin-attrs.rs:497:5 --> $DIR/issue-43106-gating-of-builtin-attrs.rs:478:5
| |
LL | #[no_std] struct S; LL | #[no_std] struct S;
| ^^^^^^^^^ | ^^^^^^^^^
warning: unused attribute warning: unused attribute
--> $DIR/issue-43106-gating-of-builtin-attrs.rs:501:5 --> $DIR/issue-43106-gating-of-builtin-attrs.rs:482:5
| |
LL | #[no_std] type T = S; LL | #[no_std] type T = S;
| ^^^^^^^^^ | ^^^^^^^^^
warning: crate-level attribute should be an inner attribute: add an exclamation mark: `#![foo]` warning: crate-level attribute should be an inner attribute: add an exclamation mark: `#![foo]`
--> $DIR/issue-43106-gating-of-builtin-attrs.rs:501:5 --> $DIR/issue-43106-gating-of-builtin-attrs.rs:482:5
| |
LL | #[no_std] type T = S; LL | #[no_std] type T = S;
| ^^^^^^^^^ | ^^^^^^^^^
warning: unused attribute warning: unused attribute
--> $DIR/issue-43106-gating-of-builtin-attrs.rs:505:5 --> $DIR/issue-43106-gating-of-builtin-attrs.rs:486:5
| |
LL | #[no_std] impl S { } LL | #[no_std] impl S { }
| ^^^^^^^^^ | ^^^^^^^^^
warning: crate-level attribute should be an inner attribute: add an exclamation mark: `#![foo]` warning: crate-level attribute should be an inner attribute: add an exclamation mark: `#![foo]`
--> $DIR/issue-43106-gating-of-builtin-attrs.rs:505:5 --> $DIR/issue-43106-gating-of-builtin-attrs.rs:486:5
| |
LL | #[no_std] impl S { } LL | #[no_std] impl S { }
| ^^^^^^^^^ | ^^^^^^^^^
warning: unused attribute warning: unused attribute
--> $DIR/issue-43106-gating-of-builtin-attrs.rs:485:1 --> $DIR/issue-43106-gating-of-builtin-attrs.rs:466:1
| |
LL | #[no_std] LL | #[no_std]
| ^^^^^^^^^ | ^^^^^^^^^
warning: crate-level attribute should be an inner attribute: add an exclamation mark: `#![foo]` warning: crate-level attribute should be an inner attribute: add an exclamation mark: `#![foo]`
--> $DIR/issue-43106-gating-of-builtin-attrs.rs:485:1 --> $DIR/issue-43106-gating-of-builtin-attrs.rs:466:1
| |
LL | #[no_std] LL | #[no_std]
| ^^^^^^^^^ | ^^^^^^^^^
warning: unused attribute warning: unused attribute
--> $DIR/issue-43106-gating-of-builtin-attrs.rs:644:17 --> $DIR/issue-43106-gating-of-builtin-attrs.rs:573:17
| |
LL | mod inner { #![crate_name="0900"] } LL | mod inner { #![crate_name="0900"] }
| ^^^^^^^^^^^^^^^^^^^^^ | ^^^^^^^^^^^^^^^^^^^^^
warning: crate-level attribute should be in the root module warning: crate-level attribute should be in the root module
--> $DIR/issue-43106-gating-of-builtin-attrs.rs:644:17 --> $DIR/issue-43106-gating-of-builtin-attrs.rs:573:17
| |
LL | mod inner { #![crate_name="0900"] } LL | mod inner { #![crate_name="0900"] }
| ^^^^^^^^^^^^^^^^^^^^^ | ^^^^^^^^^^^^^^^^^^^^^
warning: unused attribute warning: unused attribute
--> $DIR/issue-43106-gating-of-builtin-attrs.rs:648:5 --> $DIR/issue-43106-gating-of-builtin-attrs.rs:577:5
| |
LL | #[crate_name = "0900"] fn f() { } LL | #[crate_name = "0900"] fn f() { }
| ^^^^^^^^^^^^^^^^^^^^^^ | ^^^^^^^^^^^^^^^^^^^^^^
warning: crate-level attribute should be an inner attribute: add an exclamation mark: `#![foo]` warning: crate-level attribute should be an inner attribute: add an exclamation mark: `#![foo]`
--> $DIR/issue-43106-gating-of-builtin-attrs.rs:648:5 --> $DIR/issue-43106-gating-of-builtin-attrs.rs:577:5
| |
LL | #[crate_name = "0900"] fn f() { } LL | #[crate_name = "0900"] fn f() { }
| ^^^^^^^^^^^^^^^^^^^^^^ | ^^^^^^^^^^^^^^^^^^^^^^
warning: unused attribute warning: unused attribute
--> $DIR/issue-43106-gating-of-builtin-attrs.rs:652:5 --> $DIR/issue-43106-gating-of-builtin-attrs.rs:581:5
| |
LL | #[crate_name = "0900"] struct S; LL | #[crate_name = "0900"] struct S;
| ^^^^^^^^^^^^^^^^^^^^^^ | ^^^^^^^^^^^^^^^^^^^^^^
warning: crate-level attribute should be an inner attribute: add an exclamation mark: `#![foo]` warning: crate-level attribute should be an inner attribute: add an exclamation mark: `#![foo]`
--> $DIR/issue-43106-gating-of-builtin-attrs.rs:652:5 --> $DIR/issue-43106-gating-of-builtin-attrs.rs:581:5
| |
LL | #[crate_name = "0900"] struct S; LL | #[crate_name = "0900"] struct S;
| ^^^^^^^^^^^^^^^^^^^^^^ | ^^^^^^^^^^^^^^^^^^^^^^
warning: unused attribute warning: unused attribute
--> $DIR/issue-43106-gating-of-builtin-attrs.rs:656:5 --> $DIR/issue-43106-gating-of-builtin-attrs.rs:585:5
| |
LL | #[crate_name = "0900"] type T = S; LL | #[crate_name = "0900"] type T = S;
| ^^^^^^^^^^^^^^^^^^^^^^ | ^^^^^^^^^^^^^^^^^^^^^^
warning: crate-level attribute should be an inner attribute: add an exclamation mark: `#![foo]` warning: crate-level attribute should be an inner attribute: add an exclamation mark: `#![foo]`
--> $DIR/issue-43106-gating-of-builtin-attrs.rs:656:5 --> $DIR/issue-43106-gating-of-builtin-attrs.rs:585:5
| |
LL | #[crate_name = "0900"] type T = S; LL | #[crate_name = "0900"] type T = S;
| ^^^^^^^^^^^^^^^^^^^^^^ | ^^^^^^^^^^^^^^^^^^^^^^
warning: unused attribute warning: unused attribute
--> $DIR/issue-43106-gating-of-builtin-attrs.rs:660:5 --> $DIR/issue-43106-gating-of-builtin-attrs.rs:589:5
| |
LL | #[crate_name = "0900"] impl S { } LL | #[crate_name = "0900"] impl S { }
| ^^^^^^^^^^^^^^^^^^^^^^ | ^^^^^^^^^^^^^^^^^^^^^^
warning: crate-level attribute should be an inner attribute: add an exclamation mark: `#![foo]` warning: crate-level attribute should be an inner attribute: add an exclamation mark: `#![foo]`
--> $DIR/issue-43106-gating-of-builtin-attrs.rs:660:5 --> $DIR/issue-43106-gating-of-builtin-attrs.rs:589:5
| |
LL | #[crate_name = "0900"] impl S { } LL | #[crate_name = "0900"] impl S { }
| ^^^^^^^^^^^^^^^^^^^^^^ | ^^^^^^^^^^^^^^^^^^^^^^
warning: unused attribute warning: unused attribute
--> $DIR/issue-43106-gating-of-builtin-attrs.rs:640:1 --> $DIR/issue-43106-gating-of-builtin-attrs.rs:569:1
| |
LL | #[crate_name = "0900"] LL | #[crate_name = "0900"]
| ^^^^^^^^^^^^^^^^^^^^^^ | ^^^^^^^^^^^^^^^^^^^^^^
warning: crate-level attribute should be an inner attribute: add an exclamation mark: `#![foo]` warning: crate-level attribute should be an inner attribute: add an exclamation mark: `#![foo]`
--> $DIR/issue-43106-gating-of-builtin-attrs.rs:640:1 --> $DIR/issue-43106-gating-of-builtin-attrs.rs:569:1
| |
LL | #[crate_name = "0900"] LL | #[crate_name = "0900"]
| ^^^^^^^^^^^^^^^^^^^^^^ | ^^^^^^^^^^^^^^^^^^^^^^
warning: unused attribute warning: unused attribute
--> $DIR/issue-43106-gating-of-builtin-attrs.rs:669:17 --> $DIR/issue-43106-gating-of-builtin-attrs.rs:598:17
| |
LL | mod inner { #![crate_type="0800"] } LL | mod inner { #![crate_type="0800"] }
| ^^^^^^^^^^^^^^^^^^^^^ | ^^^^^^^^^^^^^^^^^^^^^
warning: crate-level attribute should be in the root module warning: crate-level attribute should be in the root module
--> $DIR/issue-43106-gating-of-builtin-attrs.rs:669:17 --> $DIR/issue-43106-gating-of-builtin-attrs.rs:598:17
| |
LL | mod inner { #![crate_type="0800"] } LL | mod inner { #![crate_type="0800"] }
| ^^^^^^^^^^^^^^^^^^^^^ | ^^^^^^^^^^^^^^^^^^^^^
warning: unused attribute warning: unused attribute
--> $DIR/issue-43106-gating-of-builtin-attrs.rs:673:5 --> $DIR/issue-43106-gating-of-builtin-attrs.rs:602:5
| |
LL | #[crate_type = "0800"] fn f() { } LL | #[crate_type = "0800"] fn f() { }
| ^^^^^^^^^^^^^^^^^^^^^^ | ^^^^^^^^^^^^^^^^^^^^^^
warning: crate-level attribute should be an inner attribute: add an exclamation mark: `#![foo]` warning: crate-level attribute should be an inner attribute: add an exclamation mark: `#![foo]`
--> $DIR/issue-43106-gating-of-builtin-attrs.rs:673:5 --> $DIR/issue-43106-gating-of-builtin-attrs.rs:602:5
| |
LL | #[crate_type = "0800"] fn f() { } LL | #[crate_type = "0800"] fn f() { }
| ^^^^^^^^^^^^^^^^^^^^^^ | ^^^^^^^^^^^^^^^^^^^^^^
warning: unused attribute warning: unused attribute
--> $DIR/issue-43106-gating-of-builtin-attrs.rs:677:5 --> $DIR/issue-43106-gating-of-builtin-attrs.rs:606:5
| |
LL | #[crate_type = "0800"] struct S; LL | #[crate_type = "0800"] struct S;
| ^^^^^^^^^^^^^^^^^^^^^^ | ^^^^^^^^^^^^^^^^^^^^^^
warning: crate-level attribute should be an inner attribute: add an exclamation mark: `#![foo]` warning: crate-level attribute should be an inner attribute: add an exclamation mark: `#![foo]`
--> $DIR/issue-43106-gating-of-builtin-attrs.rs:677:5 --> $DIR/issue-43106-gating-of-builtin-attrs.rs:606:5
| |
LL | #[crate_type = "0800"] struct S; LL | #[crate_type = "0800"] struct S;
| ^^^^^^^^^^^^^^^^^^^^^^ | ^^^^^^^^^^^^^^^^^^^^^^
warning: unused attribute warning: unused attribute
--> $DIR/issue-43106-gating-of-builtin-attrs.rs:681:5 --> $DIR/issue-43106-gating-of-builtin-attrs.rs:610:5
| |
LL | #[crate_type = "0800"] type T = S; LL | #[crate_type = "0800"] type T = S;
| ^^^^^^^^^^^^^^^^^^^^^^ | ^^^^^^^^^^^^^^^^^^^^^^
warning: crate-level attribute should be an inner attribute: add an exclamation mark: `#![foo]` warning: crate-level attribute should be an inner attribute: add an exclamation mark: `#![foo]`
--> $DIR/issue-43106-gating-of-builtin-attrs.rs:681:5 --> $DIR/issue-43106-gating-of-builtin-attrs.rs:610:5
| |
LL | #[crate_type = "0800"] type T = S; LL | #[crate_type = "0800"] type T = S;
| ^^^^^^^^^^^^^^^^^^^^^^ | ^^^^^^^^^^^^^^^^^^^^^^
warning: unused attribute warning: unused attribute
--> $DIR/issue-43106-gating-of-builtin-attrs.rs:685:5 --> $DIR/issue-43106-gating-of-builtin-attrs.rs:614:5
| |
LL | #[crate_type = "0800"] impl S { } LL | #[crate_type = "0800"] impl S { }
| ^^^^^^^^^^^^^^^^^^^^^^ | ^^^^^^^^^^^^^^^^^^^^^^
warning: crate-level attribute should be an inner attribute: add an exclamation mark: `#![foo]` warning: crate-level attribute should be an inner attribute: add an exclamation mark: `#![foo]`
--> $DIR/issue-43106-gating-of-builtin-attrs.rs:685:5 --> $DIR/issue-43106-gating-of-builtin-attrs.rs:614:5
| |
LL | #[crate_type = "0800"] impl S { } LL | #[crate_type = "0800"] impl S { }
| ^^^^^^^^^^^^^^^^^^^^^^ | ^^^^^^^^^^^^^^^^^^^^^^
warning: unused attribute warning: unused attribute
--> $DIR/issue-43106-gating-of-builtin-attrs.rs:665:1 --> $DIR/issue-43106-gating-of-builtin-attrs.rs:594:1
| |
LL | #[crate_type = "0800"] LL | #[crate_type = "0800"]
| ^^^^^^^^^^^^^^^^^^^^^^ | ^^^^^^^^^^^^^^^^^^^^^^
warning: crate-level attribute should be an inner attribute: add an exclamation mark: `#![foo]` warning: crate-level attribute should be an inner attribute: add an exclamation mark: `#![foo]`
--> $DIR/issue-43106-gating-of-builtin-attrs.rs:665:1 --> $DIR/issue-43106-gating-of-builtin-attrs.rs:594:1
| |
LL | #[crate_type = "0800"] LL | #[crate_type = "0800"]
| ^^^^^^^^^^^^^^^^^^^^^^ | ^^^^^^^^^^^^^^^^^^^^^^
warning: unused attribute warning: unused attribute
--> $DIR/issue-43106-gating-of-builtin-attrs.rs:694:17 --> $DIR/issue-43106-gating-of-builtin-attrs.rs:623:17
| |
LL | mod inner { #![feature(x0600)] } LL | mod inner { #![feature(x0600)] }
| ^^^^^^^^^^^^^^^^^^ | ^^^^^^^^^^^^^^^^^^
warning: crate-level attribute should be in the root module warning: crate-level attribute should be in the root module
--> $DIR/issue-43106-gating-of-builtin-attrs.rs:694:17 --> $DIR/issue-43106-gating-of-builtin-attrs.rs:623:17
| |
LL | mod inner { #![feature(x0600)] } LL | mod inner { #![feature(x0600)] }
| ^^^^^^^^^^^^^^^^^^ | ^^^^^^^^^^^^^^^^^^
warning: unused attribute warning: unused attribute
--> $DIR/issue-43106-gating-of-builtin-attrs.rs:698:5 --> $DIR/issue-43106-gating-of-builtin-attrs.rs:627:5
| |
LL | #[feature(x0600)] fn f() { } LL | #[feature(x0600)] fn f() { }
| ^^^^^^^^^^^^^^^^^ | ^^^^^^^^^^^^^^^^^
warning: crate-level attribute should be an inner attribute: add an exclamation mark: `#![foo]` warning: crate-level attribute should be an inner attribute: add an exclamation mark: `#![foo]`
--> $DIR/issue-43106-gating-of-builtin-attrs.rs:698:5 --> $DIR/issue-43106-gating-of-builtin-attrs.rs:627:5
| |
LL | #[feature(x0600)] fn f() { } LL | #[feature(x0600)] fn f() { }
| ^^^^^^^^^^^^^^^^^ | ^^^^^^^^^^^^^^^^^
warning: unused attribute warning: unused attribute
--> $DIR/issue-43106-gating-of-builtin-attrs.rs:702:5 --> $DIR/issue-43106-gating-of-builtin-attrs.rs:631:5
| |
LL | #[feature(x0600)] struct S; LL | #[feature(x0600)] struct S;
| ^^^^^^^^^^^^^^^^^ | ^^^^^^^^^^^^^^^^^
warning: crate-level attribute should be an inner attribute: add an exclamation mark: `#![foo]` warning: crate-level attribute should be an inner attribute: add an exclamation mark: `#![foo]`
--> $DIR/issue-43106-gating-of-builtin-attrs.rs:702:5 --> $DIR/issue-43106-gating-of-builtin-attrs.rs:631:5
| |
LL | #[feature(x0600)] struct S; LL | #[feature(x0600)] struct S;
| ^^^^^^^^^^^^^^^^^ | ^^^^^^^^^^^^^^^^^
warning: unused attribute warning: unused attribute
--> $DIR/issue-43106-gating-of-builtin-attrs.rs:706:5 --> $DIR/issue-43106-gating-of-builtin-attrs.rs:635:5
| |
LL | #[feature(x0600)] type T = S; LL | #[feature(x0600)] type T = S;
| ^^^^^^^^^^^^^^^^^ | ^^^^^^^^^^^^^^^^^
warning: crate-level attribute should be an inner attribute: add an exclamation mark: `#![foo]` warning: crate-level attribute should be an inner attribute: add an exclamation mark: `#![foo]`
--> $DIR/issue-43106-gating-of-builtin-attrs.rs:706:5 --> $DIR/issue-43106-gating-of-builtin-attrs.rs:635:5
| |
LL | #[feature(x0600)] type T = S; LL | #[feature(x0600)] type T = S;
| ^^^^^^^^^^^^^^^^^ | ^^^^^^^^^^^^^^^^^
warning: unused attribute warning: unused attribute
--> $DIR/issue-43106-gating-of-builtin-attrs.rs:710:5 --> $DIR/issue-43106-gating-of-builtin-attrs.rs:639:5
| |
LL | #[feature(x0600)] impl S { } LL | #[feature(x0600)] impl S { }
| ^^^^^^^^^^^^^^^^^ | ^^^^^^^^^^^^^^^^^
warning: crate-level attribute should be an inner attribute: add an exclamation mark: `#![foo]` warning: crate-level attribute should be an inner attribute: add an exclamation mark: `#![foo]`
--> $DIR/issue-43106-gating-of-builtin-attrs.rs:710:5 --> $DIR/issue-43106-gating-of-builtin-attrs.rs:639:5
| |
LL | #[feature(x0600)] impl S { } LL | #[feature(x0600)] impl S { }
| ^^^^^^^^^^^^^^^^^ | ^^^^^^^^^^^^^^^^^
warning: unused attribute warning: unused attribute
--> $DIR/issue-43106-gating-of-builtin-attrs.rs:690:1 --> $DIR/issue-43106-gating-of-builtin-attrs.rs:619:1
| |
LL | #[feature(x0600)] LL | #[feature(x0600)]
| ^^^^^^^^^^^^^^^^^ | ^^^^^^^^^^^^^^^^^
warning: crate-level attribute should be an inner attribute: add an exclamation mark: `#![foo]` warning: crate-level attribute should be an inner attribute: add an exclamation mark: `#![foo]`
--> $DIR/issue-43106-gating-of-builtin-attrs.rs:690:1 --> $DIR/issue-43106-gating-of-builtin-attrs.rs:619:1
| |
LL | #[feature(x0600)] LL | #[feature(x0600)]
| ^^^^^^^^^^^^^^^^^ | ^^^^^^^^^^^^^^^^^
warning: unused attribute warning: unused attribute
--> $DIR/issue-43106-gating-of-builtin-attrs.rs:720:17 --> $DIR/issue-43106-gating-of-builtin-attrs.rs:649:17
| |
LL | mod inner { #![no_main] } LL | mod inner { #![no_main] }
| ^^^^^^^^^^^ | ^^^^^^^^^^^
warning: crate-level attribute should be in the root module warning: crate-level attribute should be in the root module
--> $DIR/issue-43106-gating-of-builtin-attrs.rs:720:17 --> $DIR/issue-43106-gating-of-builtin-attrs.rs:649:17
| |
LL | mod inner { #![no_main] } LL | mod inner { #![no_main] }
| ^^^^^^^^^^^ | ^^^^^^^^^^^
warning: unused attribute warning: unused attribute
--> $DIR/issue-43106-gating-of-builtin-attrs.rs:724:5 --> $DIR/issue-43106-gating-of-builtin-attrs.rs:653:5
| |
LL | #[no_main] fn f() { } LL | #[no_main] fn f() { }
| ^^^^^^^^^^ | ^^^^^^^^^^
warning: crate-level attribute should be an inner attribute: add an exclamation mark: `#![foo]` warning: crate-level attribute should be an inner attribute: add an exclamation mark: `#![foo]`
--> $DIR/issue-43106-gating-of-builtin-attrs.rs:724:5 --> $DIR/issue-43106-gating-of-builtin-attrs.rs:653:5
| |
LL | #[no_main] fn f() { } LL | #[no_main] fn f() { }
| ^^^^^^^^^^ | ^^^^^^^^^^
warning: unused attribute warning: unused attribute
--> $DIR/issue-43106-gating-of-builtin-attrs.rs:728:5 --> $DIR/issue-43106-gating-of-builtin-attrs.rs:657:5
| |
LL | #[no_main] struct S; LL | #[no_main] struct S;
| ^^^^^^^^^^ | ^^^^^^^^^^
warning: crate-level attribute should be an inner attribute: add an exclamation mark: `#![foo]` warning: crate-level attribute should be an inner attribute: add an exclamation mark: `#![foo]`
--> $DIR/issue-43106-gating-of-builtin-attrs.rs:728:5 --> $DIR/issue-43106-gating-of-builtin-attrs.rs:657:5
| |
LL | #[no_main] struct S; LL | #[no_main] struct S;
| ^^^^^^^^^^ | ^^^^^^^^^^
warning: unused attribute warning: unused attribute
--> $DIR/issue-43106-gating-of-builtin-attrs.rs:732:5 --> $DIR/issue-43106-gating-of-builtin-attrs.rs:661:5
| |
LL | #[no_main] type T = S; LL | #[no_main] type T = S;
| ^^^^^^^^^^ | ^^^^^^^^^^
warning: crate-level attribute should be an inner attribute: add an exclamation mark: `#![foo]` warning: crate-level attribute should be an inner attribute: add an exclamation mark: `#![foo]`
--> $DIR/issue-43106-gating-of-builtin-attrs.rs:732:5 --> $DIR/issue-43106-gating-of-builtin-attrs.rs:661:5
| |
LL | #[no_main] type T = S; LL | #[no_main] type T = S;
| ^^^^^^^^^^ | ^^^^^^^^^^
warning: unused attribute warning: unused attribute
--> $DIR/issue-43106-gating-of-builtin-attrs.rs:736:5 --> $DIR/issue-43106-gating-of-builtin-attrs.rs:665:5
| |
LL | #[no_main] impl S { } LL | #[no_main] impl S { }
| ^^^^^^^^^^ | ^^^^^^^^^^
warning: crate-level attribute should be an inner attribute: add an exclamation mark: `#![foo]` warning: crate-level attribute should be an inner attribute: add an exclamation mark: `#![foo]`
--> $DIR/issue-43106-gating-of-builtin-attrs.rs:736:5 --> $DIR/issue-43106-gating-of-builtin-attrs.rs:665:5
| |
LL | #[no_main] impl S { } LL | #[no_main] impl S { }
| ^^^^^^^^^^ | ^^^^^^^^^^
warning: unused attribute warning: unused attribute
--> $DIR/issue-43106-gating-of-builtin-attrs.rs:716:1 --> $DIR/issue-43106-gating-of-builtin-attrs.rs:645:1
| |
LL | #[no_main] LL | #[no_main]
| ^^^^^^^^^^ | ^^^^^^^^^^
warning: crate-level attribute should be an inner attribute: add an exclamation mark: `#![foo]` warning: crate-level attribute should be an inner attribute: add an exclamation mark: `#![foo]`
--> $DIR/issue-43106-gating-of-builtin-attrs.rs:716:1 --> $DIR/issue-43106-gating-of-builtin-attrs.rs:645:1
| |
LL | #[no_main] LL | #[no_main]
| ^^^^^^^^^^ | ^^^^^^^^^^
warning: unused attribute warning: unused attribute
--> $DIR/issue-43106-gating-of-builtin-attrs.rs:758:17 --> $DIR/issue-43106-gating-of-builtin-attrs.rs:687:17
| |
LL | mod inner { #![recursion_limit="0200"] } LL | mod inner { #![recursion_limit="0200"] }
| ^^^^^^^^^^^^^^^^^^^^^^^^^^ | ^^^^^^^^^^^^^^^^^^^^^^^^^^
warning: crate-level attribute should be in the root module warning: crate-level attribute should be in the root module
--> $DIR/issue-43106-gating-of-builtin-attrs.rs:758:17 --> $DIR/issue-43106-gating-of-builtin-attrs.rs:687:17
| |
LL | mod inner { #![recursion_limit="0200"] } LL | mod inner { #![recursion_limit="0200"] }
| ^^^^^^^^^^^^^^^^^^^^^^^^^^ | ^^^^^^^^^^^^^^^^^^^^^^^^^^
warning: unused attribute warning: unused attribute
--> $DIR/issue-43106-gating-of-builtin-attrs.rs:762:5 --> $DIR/issue-43106-gating-of-builtin-attrs.rs:691:5
| |
LL | #[recursion_limit="0200"] fn f() { } LL | #[recursion_limit="0200"] fn f() { }
| ^^^^^^^^^^^^^^^^^^^^^^^^^ | ^^^^^^^^^^^^^^^^^^^^^^^^^
warning: crate-level attribute should be an inner attribute: add an exclamation mark: `#![foo]` warning: crate-level attribute should be an inner attribute: add an exclamation mark: `#![foo]`
--> $DIR/issue-43106-gating-of-builtin-attrs.rs:762:5 --> $DIR/issue-43106-gating-of-builtin-attrs.rs:691:5
| |
LL | #[recursion_limit="0200"] fn f() { } LL | #[recursion_limit="0200"] fn f() { }
| ^^^^^^^^^^^^^^^^^^^^^^^^^ | ^^^^^^^^^^^^^^^^^^^^^^^^^
warning: unused attribute warning: unused attribute
--> $DIR/issue-43106-gating-of-builtin-attrs.rs:766:5 --> $DIR/issue-43106-gating-of-builtin-attrs.rs:695:5
| |
LL | #[recursion_limit="0200"] struct S; LL | #[recursion_limit="0200"] struct S;
| ^^^^^^^^^^^^^^^^^^^^^^^^^ | ^^^^^^^^^^^^^^^^^^^^^^^^^
warning: crate-level attribute should be an inner attribute: add an exclamation mark: `#![foo]` warning: crate-level attribute should be an inner attribute: add an exclamation mark: `#![foo]`
--> $DIR/issue-43106-gating-of-builtin-attrs.rs:766:5 --> $DIR/issue-43106-gating-of-builtin-attrs.rs:695:5
| |
LL | #[recursion_limit="0200"] struct S; LL | #[recursion_limit="0200"] struct S;
| ^^^^^^^^^^^^^^^^^^^^^^^^^ | ^^^^^^^^^^^^^^^^^^^^^^^^^
warning: unused attribute warning: unused attribute
--> $DIR/issue-43106-gating-of-builtin-attrs.rs:770:5 --> $DIR/issue-43106-gating-of-builtin-attrs.rs:699:5
| |
LL | #[recursion_limit="0200"] type T = S; LL | #[recursion_limit="0200"] type T = S;
| ^^^^^^^^^^^^^^^^^^^^^^^^^ | ^^^^^^^^^^^^^^^^^^^^^^^^^
warning: crate-level attribute should be an inner attribute: add an exclamation mark: `#![foo]` warning: crate-level attribute should be an inner attribute: add an exclamation mark: `#![foo]`
--> $DIR/issue-43106-gating-of-builtin-attrs.rs:770:5 --> $DIR/issue-43106-gating-of-builtin-attrs.rs:699:5
| |
LL | #[recursion_limit="0200"] type T = S; LL | #[recursion_limit="0200"] type T = S;
| ^^^^^^^^^^^^^^^^^^^^^^^^^ | ^^^^^^^^^^^^^^^^^^^^^^^^^
warning: unused attribute warning: unused attribute
--> $DIR/issue-43106-gating-of-builtin-attrs.rs:774:5 --> $DIR/issue-43106-gating-of-builtin-attrs.rs:703:5
| |
LL | #[recursion_limit="0200"] impl S { } LL | #[recursion_limit="0200"] impl S { }
| ^^^^^^^^^^^^^^^^^^^^^^^^^ | ^^^^^^^^^^^^^^^^^^^^^^^^^
warning: crate-level attribute should be an inner attribute: add an exclamation mark: `#![foo]` warning: crate-level attribute should be an inner attribute: add an exclamation mark: `#![foo]`
--> $DIR/issue-43106-gating-of-builtin-attrs.rs:774:5 --> $DIR/issue-43106-gating-of-builtin-attrs.rs:703:5
| |
LL | #[recursion_limit="0200"] impl S { } LL | #[recursion_limit="0200"] impl S { }
| ^^^^^^^^^^^^^^^^^^^^^^^^^ | ^^^^^^^^^^^^^^^^^^^^^^^^^
warning: unused attribute warning: unused attribute
--> $DIR/issue-43106-gating-of-builtin-attrs.rs:754:1 --> $DIR/issue-43106-gating-of-builtin-attrs.rs:683:1
| |
LL | #[recursion_limit="0200"] LL | #[recursion_limit="0200"]
| ^^^^^^^^^^^^^^^^^^^^^^^^^ | ^^^^^^^^^^^^^^^^^^^^^^^^^
warning: crate-level attribute should be an inner attribute: add an exclamation mark: `#![foo]` warning: crate-level attribute should be an inner attribute: add an exclamation mark: `#![foo]`
--> $DIR/issue-43106-gating-of-builtin-attrs.rs:754:1 --> $DIR/issue-43106-gating-of-builtin-attrs.rs:683:1
| |
LL | #[recursion_limit="0200"] LL | #[recursion_limit="0200"]
| ^^^^^^^^^^^^^^^^^^^^^^^^^ | ^^^^^^^^^^^^^^^^^^^^^^^^^
warning: unused attribute warning: unused attribute
--> $DIR/issue-43106-gating-of-builtin-attrs.rs:783:17 --> $DIR/issue-43106-gating-of-builtin-attrs.rs:712:17
| |
LL | mod inner { #![type_length_limit="0100"] } LL | mod inner { #![type_length_limit="0100"] }
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
warning: crate-level attribute should be in the root module warning: crate-level attribute should be in the root module
--> $DIR/issue-43106-gating-of-builtin-attrs.rs:783:17 --> $DIR/issue-43106-gating-of-builtin-attrs.rs:712:17
| |
LL | mod inner { #![type_length_limit="0100"] } LL | mod inner { #![type_length_limit="0100"] }
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
warning: unused attribute warning: unused attribute
--> $DIR/issue-43106-gating-of-builtin-attrs.rs:787:5 --> $DIR/issue-43106-gating-of-builtin-attrs.rs:716:5
| |
LL | #[type_length_limit="0100"] fn f() { } LL | #[type_length_limit="0100"] fn f() { }
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^ | ^^^^^^^^^^^^^^^^^^^^^^^^^^^
warning: crate-level attribute should be an inner attribute: add an exclamation mark: `#![foo]` warning: crate-level attribute should be an inner attribute: add an exclamation mark: `#![foo]`
--> $DIR/issue-43106-gating-of-builtin-attrs.rs:787:5 --> $DIR/issue-43106-gating-of-builtin-attrs.rs:716:5
| |
LL | #[type_length_limit="0100"] fn f() { } LL | #[type_length_limit="0100"] fn f() { }
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^ | ^^^^^^^^^^^^^^^^^^^^^^^^^^^
warning: unused attribute warning: unused attribute
--> $DIR/issue-43106-gating-of-builtin-attrs.rs:791:5 --> $DIR/issue-43106-gating-of-builtin-attrs.rs:720:5
| |
LL | #[type_length_limit="0100"] struct S; LL | #[type_length_limit="0100"] struct S;
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^ | ^^^^^^^^^^^^^^^^^^^^^^^^^^^
warning: crate-level attribute should be an inner attribute: add an exclamation mark: `#![foo]` warning: crate-level attribute should be an inner attribute: add an exclamation mark: `#![foo]`
--> $DIR/issue-43106-gating-of-builtin-attrs.rs:791:5 --> $DIR/issue-43106-gating-of-builtin-attrs.rs:720:5
| |
LL | #[type_length_limit="0100"] struct S; LL | #[type_length_limit="0100"] struct S;
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^ | ^^^^^^^^^^^^^^^^^^^^^^^^^^^
warning: unused attribute warning: unused attribute
--> $DIR/issue-43106-gating-of-builtin-attrs.rs:795:5 --> $DIR/issue-43106-gating-of-builtin-attrs.rs:724:5
| |
LL | #[type_length_limit="0100"] type T = S; LL | #[type_length_limit="0100"] type T = S;
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^ | ^^^^^^^^^^^^^^^^^^^^^^^^^^^
warning: crate-level attribute should be an inner attribute: add an exclamation mark: `#![foo]` warning: crate-level attribute should be an inner attribute: add an exclamation mark: `#![foo]`
--> $DIR/issue-43106-gating-of-builtin-attrs.rs:795:5 --> $DIR/issue-43106-gating-of-builtin-attrs.rs:724:5
| |
LL | #[type_length_limit="0100"] type T = S; LL | #[type_length_limit="0100"] type T = S;
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^ | ^^^^^^^^^^^^^^^^^^^^^^^^^^^
warning: unused attribute warning: unused attribute
--> $DIR/issue-43106-gating-of-builtin-attrs.rs:799:5 --> $DIR/issue-43106-gating-of-builtin-attrs.rs:728:5
| |
LL | #[type_length_limit="0100"] impl S { } LL | #[type_length_limit="0100"] impl S { }
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^ | ^^^^^^^^^^^^^^^^^^^^^^^^^^^
warning: crate-level attribute should be an inner attribute: add an exclamation mark: `#![foo]` warning: crate-level attribute should be an inner attribute: add an exclamation mark: `#![foo]`
--> $DIR/issue-43106-gating-of-builtin-attrs.rs:799:5 --> $DIR/issue-43106-gating-of-builtin-attrs.rs:728:5
| |
LL | #[type_length_limit="0100"] impl S { } LL | #[type_length_limit="0100"] impl S { }
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^ | ^^^^^^^^^^^^^^^^^^^^^^^^^^^
warning: unused attribute warning: unused attribute
--> $DIR/issue-43106-gating-of-builtin-attrs.rs:779:1 --> $DIR/issue-43106-gating-of-builtin-attrs.rs:708:1
| |
LL | #[type_length_limit="0100"] LL | #[type_length_limit="0100"]
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^ | ^^^^^^^^^^^^^^^^^^^^^^^^^^^
warning: crate-level attribute should be an inner attribute: add an exclamation mark: `#![foo]` warning: crate-level attribute should be an inner attribute: add an exclamation mark: `#![foo]`
--> $DIR/issue-43106-gating-of-builtin-attrs.rs:779:1 --> $DIR/issue-43106-gating-of-builtin-attrs.rs:708:1
| |
LL | #[type_length_limit="0100"] LL | #[type_length_limit="0100"]
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^ | ^^^^^^^^^^^^^^^^^^^^^^^^^^^
@ -1234,5 +1198,5 @@ warning: unused attribute
LL | #![proc_macro_derive()] LL | #![proc_macro_derive()]
| ^^^^^^^^^^^^^^^^^^^^^^^ | ^^^^^^^^^^^^^^^^^^^^^^^
warning: 203 warnings emitted warning: 197 warnings emitted

View file

@ -1,31 +0,0 @@
// This is testing whether `#[inline]` signals an error or warning
// when put in "weird" places.
//
// (This file sits on its own because it actually signals an error,
// which would mess up the treatment of other cases in
// issue-43106-gating-of-builtin-attrs.rs)
// Crate-level is accepted, though it is almost certainly unused?
#![inline]
#[inline]
//~^ ERROR attribute should be applied to function or closure
mod inline {
mod inner { #![inline] }
//~^ ERROR attribute should be applied to function or closure
#[inline = "2100"] fn f() { }
//~^ ERROR attribute must be of the form
//~| WARN this was previously accepted
#[inline] struct S;
//~^ ERROR attribute should be applied to function or closure
#[inline] type T = S;
//~^ ERROR attribute should be applied to function or closure
#[inline] impl S { }
//~^ ERROR attribute should be applied to function or closure
}
fn main() {}

View file

@ -1,52 +0,0 @@
error: attribute must be of the form `#[inline]` or `#[inline(always|never)]`
--> $DIR/issue-43106-gating-of-inline.rs:17:5
|
LL | #[inline = "2100"] fn f() { }
| ^^^^^^^^^^^^^^^^^^
|
= note: `#[deny(ill_formed_attribute_input)]` on by default
= warning: this was previously accepted by the compiler but is being phased out; it will become a hard error in a future release!
= note: for more information, see issue #57571 <https://github.com/rust-lang/rust/issues/57571>
error[E0518]: attribute should be applied to function or closure
--> $DIR/issue-43106-gating-of-inline.rs:11:1
|
LL | #[inline]
| ^^^^^^^^^
LL |
LL | / mod inline {
LL | | mod inner { #![inline] }
LL | |
LL | |
... |
LL | |
LL | | }
| |_- not a function or closure
error[E0518]: attribute should be applied to function or closure
--> $DIR/issue-43106-gating-of-inline.rs:14:17
|
LL | mod inner { #![inline] }
| ------------^^^^^^^^^^-- not a function or closure
error[E0518]: attribute should be applied to function or closure
--> $DIR/issue-43106-gating-of-inline.rs:21:5
|
LL | #[inline] struct S;
| ^^^^^^^^^ --------- not a function or closure
error[E0518]: attribute should be applied to function or closure
--> $DIR/issue-43106-gating-of-inline.rs:24:5
|
LL | #[inline] type T = S;
| ^^^^^^^^^ ----------- not a function or closure
error[E0518]: attribute should be applied to function or closure
--> $DIR/issue-43106-gating-of-inline.rs:27:5
|
LL | #[inline] impl S { }
| ^^^^^^^^^ ---------- not a function or closure
error: aborting due to 6 previous errors
For more information about this error, try `rustc --explain E0518`.

View file

@ -23,7 +23,7 @@ fn lgamma(n: c_double, value: &mut isize) -> c_double {
mod m { mod m {
use libc::{c_double, c_int}; use libc::{c_double, c_int};
#[link_name = "m"] #[link(name = "m")]
extern { extern {
#[cfg(any(all(unix, not(target_os = "vxworks")), target_os = "cloudabi"))] #[cfg(any(all(unix, not(target_os = "vxworks")), target_os = "cloudabi"))]
#[link_name="lgamma_r"] #[link_name="lgamma_r"]

View file

@ -0,0 +1,22 @@
#[link_name = "foo"] //~ ERROR attribute should be applied to a foreign function or static
struct Foo; //~ NOTE not a foreign function or static
#[link_name = "foobar"]
//~^ ERROR attribute should be applied to a foreign function or static
//~| HELP try `#[link(name = "foobar")]` instead
extern "C" {
fn foo() -> u32;
}
//~^^^ NOTE not a foreign function or static
#[link_name]
//~^ ERROR malformed `link_name` attribute input
//~| HELP must be of the form
//~| ERROR attribute should be applied to a foreign function or static
//~| HELP try `#[link(name = "...")]` instead
extern "C" {
fn bar() -> u32;
}
//~^^^ NOTE not a foreign function or static
fn main() {}

View file

@ -0,0 +1,50 @@
error: malformed `link_name` attribute input
--> $DIR/issue-47725.rs:12:1
|
LL | #[link_name]
| ^^^^^^^^^^^^ help: must be of the form: `#[link_name = "name"]`
error: attribute should be applied to a foreign function or static
--> $DIR/issue-47725.rs:1:1
|
LL | #[link_name = "foo"]
| ^^^^^^^^^^^^^^^^^^^^
LL | struct Foo;
| ----------- not a foreign function or static
error: attribute should be applied to a foreign function or static
--> $DIR/issue-47725.rs:4:1
|
LL | #[link_name = "foobar"]
| ^^^^^^^^^^^^^^^^^^^^^^^
...
LL | / extern "C" {
LL | | fn foo() -> u32;
LL | | }
| |_- not a foreign function or static
|
help: try `#[link(name = "foobar")]` instead
--> $DIR/issue-47725.rs:4:1
|
LL | #[link_name = "foobar"]
| ^^^^^^^^^^^^^^^^^^^^^^^
error: attribute should be applied to a foreign function or static
--> $DIR/issue-47725.rs:12:1
|
LL | #[link_name]
| ^^^^^^^^^^^^
...
LL | / extern "C" {
LL | | fn bar() -> u32;
LL | | }
| |_- not a foreign function or static
|
help: try `#[link(name = "...")]` instead
--> $DIR/issue-47725.rs:12:1
|
LL | #[link_name]
| ^^^^^^^^^^^^
error: aborting due to 4 previous errors

View file

@ -0,0 +1,7 @@
#[cold] //~ ERROR attribute should be applied to a function
struct Foo; //~ NOTE not a function
fn main() {
#[cold] //~ ERROR attribute should be applied to a function
5; //~ NOTE not a function
}

View file

@ -0,0 +1,18 @@
error: attribute should be applied to a function
--> $DIR/issue-54044.rs:1:1
|
LL | #[cold]
| ^^^^^^^
LL | struct Foo;
| ----------- not a function
error: attribute should be applied to a function
--> $DIR/issue-54044.rs:5:5
|
LL | #[cold]
| ^^^^^^^
LL | 5;
| - not a function
error: aborting due to 2 previous errors

View file

@ -2,10 +2,11 @@ fn main() {
(0..) (0..)
.map( .map(
#[target_feature(enable = "")] #[target_feature(enable = "")]
//~^ ERROR: the feature named `` is not valid for this target //~^ ERROR: attribute should be applied to a function
//~| ERROR: `#[target_feature(..)]` can only be applied to `unsafe` functions //~| ERROR: the feature named `` is not valid for this target
#[track_caller] #[track_caller]
//~^ ERROR: `#[track_caller]` requires Rust ABI //~^ ERROR: attribute should be applied to function [E0739]
//~| ERROR: `#[track_caller]` requires Rust ABI [E0737]
|_| (), |_| (),
) )
.next(); .next();

View file

@ -1,14 +1,20 @@
error[E0658]: `#[target_feature(..)]` can only be applied to `unsafe` functions error: attribute should be applied to a function
--> $DIR/issue-68060.rs:4:13 --> $DIR/issue-68060.rs:4:13
| |
LL | #[target_feature(enable = "")] LL | #[target_feature(enable = "")]
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
... ...
LL | |_| (), LL | |_| (),
| ------ not an `unsafe` function | ------ not a function
error[E0739]: attribute should be applied to function
--> $DIR/issue-68060.rs:7:13
| |
= note: see issue #69098 <https://github.com/rust-lang/rust/issues/69098> for more information LL | #[track_caller]
= help: add `#![feature(target_feature_11)]` to the crate attributes to enable | ^^^^^^^^^^^^^^^
...
LL | |_| (),
| ------ not a function
error: the feature named `` is not valid for this target error: the feature named `` is not valid for this target
--> $DIR/issue-68060.rs:4:30 --> $DIR/issue-68060.rs:4:30
@ -17,12 +23,12 @@ LL | #[target_feature(enable = "")]
| ^^^^^^^^^^^ `` is not valid for this target | ^^^^^^^^^^^ `` is not valid for this target
error[E0737]: `#[track_caller]` requires Rust ABI error[E0737]: `#[track_caller]` requires Rust ABI
--> $DIR/issue-68060.rs:7:13 --> $DIR/issue-68060.rs:8:13
| |
LL | #[track_caller] LL | #[track_caller]
| ^^^^^^^^^^^^^^^ | ^^^^^^^^^^^^^^^
error: aborting due to 3 previous errors error: aborting due to 4 previous errors
Some errors have detailed explanations: E0658, E0737. Some errors have detailed explanations: E0737, E0739.
For more information about an error, try `rustc --explain E0658`. For more information about an error, try `rustc --explain E0737`.

View file

@ -79,13 +79,16 @@ impl Quux for Foo {
} }
fn main() { fn main() {
#[target_feature(enable = "sse2")]
//~^ ERROR attribute should be applied to a function
unsafe { unsafe {
foo(); foo();
bar(); bar();
} }
//~^^^^ NOTE not a function
#[target_feature(enable = "sse2")] #[target_feature(enable = "sse2")]
//~^ ERROR `#[target_feature(..)]` can only be applied to `unsafe` functions //~^ ERROR attribute should be applied to a function
//~| NOTE see issue #69098
|| {}; || {};
//~^ NOTE not an `unsafe` function //~^ NOTE not a function
} }

View file

@ -94,17 +94,26 @@ error: cannot use `#[inline(always)]` with `#[target_feature]`
LL | #[inline(always)] LL | #[inline(always)]
| ^^^^^^^^^^^^^^^^^ | ^^^^^^^^^^^^^^^^^
error[E0658]: `#[target_feature(..)]` can only be applied to `unsafe` functions error: attribute should be applied to a function
--> $DIR/invalid-attribute.rs:86:5 --> $DIR/invalid-attribute.rs:82:5
| |
LL | #[target_feature(enable = "sse2")] LL | #[target_feature(enable = "sse2")]
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
... LL |
LL | || {}; LL | / unsafe {
| ----- not an `unsafe` function LL | | foo();
LL | | bar();
LL | | }
| |_____- not a function
error: attribute should be applied to a function
--> $DIR/invalid-attribute.rs:90:5
| |
= note: see issue #69098 <https://github.com/rust-lang/rust/issues/69098> for more information LL | #[target_feature(enable = "sse2")]
= help: add `#![feature(target_feature_11)]` to the crate attributes to enable | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
LL |
LL | || {};
| ----- not a function
error[E0658]: `#[target_feature(..)]` can only be applied to `unsafe` functions error[E0658]: `#[target_feature(..)]` can only be applied to `unsafe` functions
--> $DIR/invalid-attribute.rs:74:5 --> $DIR/invalid-attribute.rs:74:5
@ -118,6 +127,6 @@ LL | fn foo() {}
= note: see issue #69098 <https://github.com/rust-lang/rust/issues/69098> for more information = note: see issue #69098 <https://github.com/rust-lang/rust/issues/69098> for more information
= help: add `#![feature(target_feature_11)]` to the crate attributes to enable = help: add `#![feature(target_feature_11)]` to the crate attributes to enable
error: aborting due to 14 previous errors error: aborting due to 15 previous errors
For more information about this error, try `rustc --explain E0658`. For more information about this error, try `rustc --explain E0658`.