| //~ NOTE: not an `extern crate` item |
| //~^ NOTE: not a free function, impl method or static |
| //~^^ NOTE: not a function or closure |
| // 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) |
| |
| |
| #![macro_export] |
| //~^ ERROR: `macro_export` attribute cannot be used at crate level |
| #![rustc_main] //~ ERROR: the `#[rustc_main]` attribute is used internally to specify |
| //~^ ERROR: `rustc_main` attribute cannot be used at crate level |
| //~| NOTE: this compiler was built on YYYY-MM-DD; consider upgrading it if it is out of date |
| #![start] |
| //~^ ERROR: `start` attribute cannot be used at crate level |
| #![repr()] |
| //~^ ERROR: `repr` attribute cannot be used at crate level |
| #![path = "3800"] |
| //~^ ERROR: `path` attribute cannot be used at crate level |
| #![automatically_derived] |
| //~^ ERROR: `automatically_derived` attribute cannot be used at crate level |
| #![no_mangle] |
| #![no_link] |
| //~^ ERROR: attribute should be applied to an `extern crate` item |
| #![export_name = "2200"] |
| //~^ ERROR: attribute should be applied to a free function, impl method or static |
| #![inline] |
| //~^ ERROR: attribute should be applied to function or closure |
| #[inline] |
| //~^ ERROR attribute should be applied to function or closure |
| mod inline { |
| //~^ NOTE not a function or closure |
| //~| NOTE the inner attribute doesn't annotate this module |
| //~| NOTE the inner attribute doesn't annotate this module |
| //~| NOTE the inner attribute doesn't annotate this module |
| //~| NOTE the inner attribute doesn't annotate this module |
| //~| NOTE the inner attribute doesn't annotate this module |
| //~| NOTE the inner attribute doesn't annotate this module |
| |
| mod inner { #![inline] } |
| //~^ ERROR attribute should be applied to function or closure |
| //~| NOTE not a function or closure |
| |
| #[inline = "2100"] fn f() { } |
| //~^ ERROR valid forms for the attribute are |
| //~| 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 |
| } |
| |
| #[export_name = "2200"] |
| //~^ ERROR attribute should be applied to a free function, impl method or static |
| mod export_name { |
| //~^ NOTE not a free function, impl method or static |
| |
| mod inner { #![export_name="2200"] } |
| //~^ ERROR attribute should be applied to a free function, impl method or static |
| //~| NOTE not a free function, impl method or static |
| |
| #[export_name = "2200"] fn f() { } |
| |
| #[export_name = "2200"] struct S; |
| //~^ ERROR attribute should be applied to a free function, impl method or static |
| //~| NOTE not a free function, impl method or static |
| |
| #[export_name = "2200"] type T = S; |
| //~^ ERROR attribute should be applied to a free function, impl method or static |
| //~| NOTE not a free function, impl method or static |
| |
| #[export_name = "2200"] impl S { } |
| //~^ ERROR attribute should be applied to a free function, impl method or static |
| //~| NOTE not a free function, impl method or static |
| |
| trait Tr { |
| #[export_name = "2200"] fn foo(); |
| //~^ ERROR attribute should be applied to a free function, impl method or static |
| //~| NOTE not a free function, impl method or static |
| |
| #[export_name = "2200"] fn bar() {} |
| //~^ ERROR attribute should be applied to a free function, impl method or static |
| //~| NOTE not a free function, impl method or static |
| } |
| } |
| |
| #[start] |
| //~^ ERROR: `start` attribute can only be used on functions |
| mod start { |
| mod inner { #![start] } |
| //~^ ERROR: `start` attribute can only be used on functions |
| |
| // for `fn f()` case, see feature-gate-start.rs |
| |
| #[start] struct S; |
| //~^ ERROR: `start` attribute can only be used on functions |
| |
| #[start] type T = S; |
| //~^ ERROR: `start` attribute can only be used on functions |
| |
| #[start] impl S { } |
| //~^ ERROR: `start` attribute can only be used on functions |
| } |
| |
| #[repr(C)] |
| //~^ ERROR: attribute should be applied to a struct, enum, or union |
| mod repr { |
| //~^ NOTE not a struct, enum, or union |
| mod inner { #![repr(C)] } |
| //~^ ERROR: attribute should be applied to a struct, enum, or union |
| //~| NOTE not a struct, enum, or union |
| |
| #[repr(C)] fn f() { } |
| //~^ ERROR: attribute should be applied to a struct, enum, or union |
| //~| NOTE not a struct, enum, or union |
| |
| struct S; |
| |
| #[repr(C)] type T = S; |
| //~^ ERROR: attribute should be applied to a struct, enum, or union |
| //~| NOTE not a struct, enum, or union |
| |
| #[repr(C)] impl S { } |
| //~^ ERROR: attribute should be applied to a struct, enum, or union |
| //~| NOTE not a struct, enum, or union |
| } |
| |
| |
| #[repr(Rust)] |
| //~^ ERROR: attribute should be applied to a struct, enum, or union |
| mod repr_rust { |
| //~^ NOTE not a struct, enum, or union |
| mod inner { #![repr(Rust)] } |
| //~^ ERROR: attribute should be applied to a struct, enum, or union |
| //~| NOTE not a struct, enum, or union |
| |
| #[repr(Rust)] fn f() { } |
| //~^ ERROR: attribute should be applied to a struct, enum, or union |
| //~| NOTE not a struct, enum, or union |
| |
| struct S; |
| |
| #[repr(Rust)] type T = S; |
| //~^ ERROR: attribute should be applied to a struct, enum, or union |
| //~| NOTE not a struct, enum, or union |
| |
| #[repr(Rust)] impl S { } |
| //~^ ERROR: attribute should be applied to a struct, enum, or union |
| //~| NOTE not a struct, enum, or union |
| } |
| |
| fn main() {} |