diff options
Diffstat (limited to 'src/test/ui/feature-gates/issue-43106-gating-of-builtin-attrs.rs')
-rw-r--r-- | src/test/ui/feature-gates/issue-43106-gating-of-builtin-attrs.rs | 772 |
1 files changed, 0 insertions, 772 deletions
diff --git a/src/test/ui/feature-gates/issue-43106-gating-of-builtin-attrs.rs b/src/test/ui/feature-gates/issue-43106-gating-of-builtin-attrs.rs deleted file mode 100644 index 1fa315f3d..000000000 --- a/src/test/ui/feature-gates/issue-43106-gating-of-builtin-attrs.rs +++ /dev/null @@ -1,772 +0,0 @@ -//~ NOTE not a function -//~| NOTE not a foreign function or static -//~| NOTE cannot be applied to crates -//~| NOTE not an `extern` block -// This test enumerates as many compiler-builtin ungated attributes as -// possible (that is, all the mutually compatible ones), and checks -// that we get "expected" (*) warnings for each in the various weird -// places that users might put them in the syntax. -// -// (*): The word "expected" is in quotes above because the cases where -// warnings are and are not emitted might not match a user's intuition -// nor the rustc developers' intent. I am really just trying to -// capture today's behavior in a test, not so that it become enshrined -// as the absolute behavior going forward, but rather so that we do -// not change the behavior in the future without even being *aware* of -// the change when it happens. -// -// At the time of authoring, the attributes here are listed in the -// order that they occur in `librustc_feature`. -// -// Any builtin attributes that: -// -// - are not stable, or -// -// - could not be included here covering the same cases as the other -// attributes without raising an *error* from rustc (note though -// that warnings are of course expected) -// -// have their own test case referenced by filename in an inline -// comment. -// -// The test feeds numeric inputs to each attribute that accepts them -// without error. We do this for two reasons: (1.) to exercise how -// inputs are handled by each, and (2.) to ease searching for related -// occurrences in the source text. - -// check-pass - -#![feature(test)] -#![warn(unused_attributes, unknown_lints)] -//~^ NOTE the lint level is defined here -//~| NOTE the lint level is defined here - -// UNGATED WHITE-LISTED BUILT-IN ATTRIBUTES - -#![warn(x5400)] //~ WARN unknown lint: `x5400` -#![allow(x5300)] //~ WARN unknown lint: `x5300` -#![forbid(x5200)] //~ WARN unknown lint: `x5200` -#![deny(x5100)] //~ WARN unknown lint: `x5100` -#![macro_use] // (allowed if no argument; see issue-43160-gating-of-macro_use.rs) -// skipping testing of cfg -// skipping testing of cfg_attr -#![should_panic] //~ WARN `#[should_panic]` only has an effect -#![ignore] //~ WARN `#[ignore]` only has an effect on functions -#![no_implicit_prelude] -#![reexport_test_harness_main = "2900"] -// see gated-link-args.rs -// see issue-43106-gating-of-macro_escape.rs for crate-level; but non crate-level is below at "2700" -// (cannot easily test gating of crate-level #[no_std]; but non crate-level is below at "2600") -#![proc_macro_derive()] //~ WARN `#[proc_macro_derive]` only has an effect -#![doc = "2400"] -#![cold] //~ WARN attribute should be applied to a function -//~^ WARN this was previously accepted -#![link()] //~ WARN attribute should be applied to an `extern` block -//~^ WARN this was previously accepted -#![link_name = "1900"] -//~^ WARN attribute should be applied to a foreign function -//~^^ WARN this was previously accepted by the compiler -#![link_section = "1800"] -//~^ WARN attribute should be applied to a function or static -//~^^ WARN this was previously accepted by the compiler -#![must_use] -//~^ WARN `#[must_use]` has no effect -// see issue-43106-gating-of-stable.rs -// see issue-43106-gating-of-unstable.rs -// see issue-43106-gating-of-deprecated.rs -#![windows_subsystem = "windows"] - -// UNGATED CRATE-LEVEL BUILT-IN ATTRIBUTES - -#![crate_name = "0900"] -#![crate_type = "bin"] // cannot pass "0800" here - -#![crate_id = "10"] -//~^ WARN use of deprecated attribute -//~| HELP remove this attribute -//~| NOTE `#[warn(deprecated)]` on by default - -// FIXME(#44232) we should warn that this isn't used. -#![feature(rust1)] -//~^ WARN no longer requires an attribute to enable -//~| NOTE `#[warn(stable_features)]` on by default - -#![no_start] -//~^ WARN use of deprecated attribute -//~| HELP remove this attribute - -// (cannot easily gating state of crate-level #[no_main]; but non crate-level is below at "0400") -#![no_builtins] -#![recursion_limit = "0200"] -#![type_length_limit = "0100"] - -// USES OF BUILT-IN ATTRIBUTES IN OTHER ("UNUSUAL") PLACES - -#[warn(x5400)] -//~^ WARN unknown lint: `x5400` -mod warn { - mod inner { #![warn(x5400)] } - //~^ WARN unknown lint: `x5400` - - #[warn(x5400)] fn f() { } - //~^ WARN unknown lint: `x5400` - - #[warn(x5400)] struct S; - //~^ WARN unknown lint: `x5400` - - #[warn(x5400)] type T = S; - //~^ WARN unknown lint: `x5400` - - #[warn(x5400)] impl S { } - //~^ WARN unknown lint: `x5400` -} - -#[allow(x5300)] -//~^ WARN unknown lint: `x5300` -mod allow { - mod inner { #![allow(x5300)] } - //~^ WARN unknown lint: `x5300` - - #[allow(x5300)] fn f() { } - //~^ WARN unknown lint: `x5300` - - #[allow(x5300)] struct S; - //~^ WARN unknown lint: `x5300` - - #[allow(x5300)] type T = S; - //~^ WARN unknown lint: `x5300` - - #[allow(x5300)] impl S { } - //~^ WARN unknown lint: `x5300` -} - -#[forbid(x5200)] -//~^ WARN unknown lint: `x5200` -mod forbid { - mod inner { #![forbid(x5200)] } - //~^ WARN unknown lint: `x5200` - - #[forbid(x5200)] fn f() { } - //~^ WARN unknown lint: `x5200` - - #[forbid(x5200)] struct S; - //~^ WARN unknown lint: `x5200` - - #[forbid(x5200)] type T = S; - //~^ WARN unknown lint: `x5200` - - #[forbid(x5200)] impl S { } - //~^ WARN unknown lint: `x5200` -} - -#[deny(x5100)] -//~^ WARN unknown lint: `x5100` -mod deny { - mod inner { #![deny(x5100)] } - //~^ WARN unknown lint: `x5100` - - #[deny(x5100)] fn f() { } - //~^ WARN unknown lint: `x5100` - - #[deny(x5100)] struct S; - //~^ WARN unknown lint: `x5100` - - #[deny(x5100)] type T = S; - //~^ WARN unknown lint: `x5100` - - #[deny(x5100)] impl S { } - //~^ WARN unknown lint: `x5100` -} - -#[macro_use] -mod macro_use { - mod inner { #![macro_use] } - - #[macro_use] fn f() { } - //~^ `#[macro_use]` only has an effect - - #[macro_use] struct S; - //~^ `#[macro_use]` only has an effect - - #[macro_use] type T = S; - //~^ `#[macro_use]` only has an effect - - #[macro_use] impl S { } - //~^ `#[macro_use]` only has an effect -} - -#[macro_export] -//~^ WARN `#[macro_export]` only has an effect on macro definitions -mod macro_export { - mod inner { #![macro_export] } - //~^ WARN `#[macro_export]` only has an effect on macro definitions - - #[macro_export] fn f() { } - //~^ WARN `#[macro_export]` only has an effect on macro definitions - - #[macro_export] struct S; - //~^ WARN `#[macro_export]` only has an effect on macro definitions - - #[macro_export] type T = S; - //~^ WARN `#[macro_export]` only has an effect on macro definitions - - #[macro_export] impl S { } - //~^ WARN `#[macro_export]` only has an effect on macro definitions -} - -// At time of unit test authorship, if compiling without `--test` then -// non-crate-level #[test] attributes seem to be ignored. - -#[test] -mod test { mod inner { #![test] } - - fn f() { } - - struct S; - - type T = S; - - impl S { } -} - -// At time of unit test authorship, if compiling without `--test` then -// non-crate-level #[bench] attributes seem to be ignored. - -#[bench] -mod bench { - mod inner { #![bench] } - - #[bench] - struct S; - - #[bench] - type T = S; - - #[bench] - impl S { } -} - -#[path = "3800"] -mod path { - mod inner { #![path="3800"] } - - #[path = "3800"] fn f() { } - //~^ WARN `#[path]` only has an effect - - #[path = "3800"] struct S; - //~^ WARN `#[path]` only has an effect - - #[path = "3800"] type T = S; - //~^ WARN `#[path]` only has an effect - - #[path = "3800"] impl S { } - //~^ WARN `#[path]` only has an effect -} - -#[automatically_derived] -//~^ WARN `#[automatically_derived]` only has an effect -mod automatically_derived { - mod inner { #![automatically_derived] } - //~^ WARN `#[automatically_derived] - - #[automatically_derived] fn f() { } - //~^ WARN `#[automatically_derived] - - #[automatically_derived] struct S; - //~^ WARN `#[automatically_derived] - - #[automatically_derived] type T = S; - //~^ WARN `#[automatically_derived] - - #[automatically_derived] impl S { } -} - -#[no_mangle] -//~^ WARN attribute should be applied to a free function, impl method or static [unused_attributes] -//~| WARN this was previously accepted by the compiler but is being phased out; it will become a hard error in a future release! -mod no_mangle { - //~^ NOTE not a free function, impl method or static - mod inner { #![no_mangle] } - //~^ WARN attribute should be applied to a free function, impl method or static [unused_attributes] - //~| WARN this was previously accepted by the compiler but is being phased out; it will become a hard error in a future release! - //~| NOTE not a free function, impl method or static - - #[no_mangle] fn f() { } - - #[no_mangle] struct S; - //~^ WARN attribute should be applied to a free function, impl method or static [unused_attributes] - //~| WARN this was previously accepted by the compiler but is being phased out; it will become a hard error in a future release! - //~| NOTE not a free function, impl method or static - - #[no_mangle] type T = S; - //~^ WARN attribute should be applied to a free function, impl method or static [unused_attributes] - //~| WARN this was previously accepted by the compiler but is being phased out; it will become a hard error in a future release! - //~| NOTE not a free function, impl method or static - - #[no_mangle] impl S { } - //~^ WARN attribute should be applied to a free function, impl method or static [unused_attributes] - //~| WARN this was previously accepted by the compiler but is being phased out; it will become a hard error in a future release! - //~| NOTE not a free function, impl method or static - - trait Tr { - #[no_mangle] fn foo(); - //~^ WARN attribute should be applied to a free function, impl method or static [unused_attributes] - //~| WARN this was previously accepted by the compiler but is being phased out; it will become a hard error in a future release! - //~| NOTE not a free function, impl method or static - - #[no_mangle] fn bar() {} - //~^ WARN attribute should be applied to a free function, impl method or static [unused_attributes] - //~| WARN this was previously accepted by the compiler but is being phased out; it will become a hard error in a future release! - //~| NOTE not a free function, impl method or static - } -} - -#[should_panic] -//~^ WARN `#[should_panic]` only has an effect on -mod should_panic { - mod inner { #![should_panic] } - //~^ WARN `#[should_panic]` only has an effect on - - #[should_panic] fn f() { } - - #[should_panic] struct S; - //~^ WARN `#[should_panic]` only has an effect on - - #[should_panic] type T = S; - //~^ WARN `#[should_panic]` only has an effect on - - #[should_panic] impl S { } - //~^ WARN `#[should_panic]` only has an effect on -} - -#[ignore] -//~^ WARN `#[ignore]` only has an effect on functions -mod ignore { - mod inner { #![ignore] } - //~^ WARN `#[ignore]` only has an effect on functions - - #[ignore] fn f() { } - - #[ignore] struct S; - //~^ WARN `#[ignore]` only has an effect on functions - - #[ignore] type T = S; - //~^ WARN `#[ignore]` only has an effect on functions - - #[ignore] impl S { } - //~^ WARN `#[ignore]` only has an effect on functions -} - -#[no_implicit_prelude] -mod no_implicit_prelude { - mod inner { #![no_implicit_prelude] } - - #[no_implicit_prelude] fn f() { } - //~^ WARN `#[no_implicit_prelude]` only has an effect - - #[no_implicit_prelude] struct S; - //~^ WARN `#[no_implicit_prelude]` only has an effect - - #[no_implicit_prelude] type T = S; - //~^ WARN `#[no_implicit_prelude]` only has an effect - - #[no_implicit_prelude] impl S { } - //~^ WARN `#[no_implicit_prelude]` only has an effect -} - -#[reexport_test_harness_main = "2900"] -//~^ WARN crate-level attribute should be -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 - - #[reexport_test_harness_main = "2900"] struct S; - //~^ WARN crate-level attribute should be - - #[reexport_test_harness_main = "2900"] type T = S; - //~^ WARN crate-level attribute should be - - #[reexport_test_harness_main = "2900"] impl S { } - //~^ WARN crate-level attribute should be -} - -// Cannot feed "2700" to `#[macro_escape]` without signaling an error. -#[macro_escape] -//~^ WARN `#[macro_escape]` is a deprecated synonym for `#[macro_use]` -mod macro_escape { - mod inner { #![macro_escape] } - //~^ WARN `#[macro_escape]` is a deprecated synonym for `#[macro_use]` - //~| HELP try an outer attribute: `#[macro_use]` - - #[macro_escape] fn f() { } - //~^ WARN `#[macro_escape]` only has an effect - - #[macro_escape] struct S; - //~^ WARN `#[macro_escape]` only has an effect - - #[macro_escape] type T = S; - //~^ WARN `#[macro_escape]` only has an effect - - #[macro_escape] impl S { } - //~^ WARN `#[macro_escape]` only has an effect -} - -#[no_std] -//~^ WARN crate-level attribute should be an inner attribute -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 - - #[no_std] struct S; - //~^ WARN crate-level attribute should be an inner attribute - - #[no_std] type T = S; - //~^ WARN crate-level attribute should be an inner attribute - - #[no_std] impl S { } - //~^ WARN crate-level attribute should be an inner attribute -} - -// At time of authorship, #[proc_macro_derive = "2500"] signals error -// when it occurs on a mod (apart from crate-level). Therefore it goes -// into its own file; see issue-43106-gating-of-proc_macro_derive.rs - -#[doc = "2400"] -mod doc { - mod inner { #![doc="2400"] } - - #[doc = "2400"] fn f() { } - - #[doc = "2400"] struct S; - - #[doc = "2400"] type T = S; - - #[doc = "2400"] impl S { } -} - -#[cold] -//~^ WARN attribute should be applied to a function -//~| WARN this was previously accepted by the compiler but is being phased out; it will become a hard error in a future release! -mod cold { - //~^ NOTE not a function - - mod inner { #![cold] } - //~^ WARN attribute should be applied to a function - //~| WARN this was previously accepted by the compiler but is being phased out; it will become a hard error in a future release! - //~| NOTE not a function - - #[cold] fn f() { } - - #[cold] struct S; - //~^ WARN attribute should be applied to a function - //~| WARN this was previously accepted by the compiler but is being phased out; it will become a hard error in a future release! - //~| NOTE not a function - - #[cold] type T = S; - //~^ WARN attribute should be applied to a function - //~| WARN this was previously accepted by the compiler but is being phased out; it will become a hard error in a future release! - //~| NOTE not a function - - #[cold] impl S { } - //~^ WARN attribute should be applied to a function - //~| WARN this was previously accepted by the compiler but is being phased out; it will become a hard error in a future release! - //~| NOTE not a function -} - -#[link_name = "1900"] -//~^ WARN attribute should be applied to a foreign function or static [unused_attributes] -//~| WARN this was previously accepted by the compiler but is being phased out; it will become a hard error in a future release! -mod link_name { - //~^ NOTE not a foreign function or static - - #[link_name = "1900"] - //~^ WARN attribute should be applied to a foreign function or static [unused_attributes] - //~| WARN this was previously accepted by the compiler but is being phased out; it will become a hard error in a future release! - //~| HELP try `#[link(name = "1900")]` instead - extern "C" { } - //~^ NOTE not a foreign function or static - - mod inner { #![link_name="1900"] } - //~^ WARN attribute should be applied to a foreign function or static [unused_attributes] - //~| WARN this was previously accepted by the compiler but is being phased out; it will become a hard error in a future release! - //~| NOTE not a foreign function or static - - #[link_name = "1900"] fn f() { } - //~^ WARN attribute should be applied to a foreign function or static [unused_attributes] - //~| WARN this was previously accepted by the compiler but is being phased out; it will become a hard error in a future release! - //~| NOTE not a foreign function or static - - #[link_name = "1900"] struct S; - //~^ WARN attribute should be applied to a foreign function or static [unused_attributes] - //~| WARN this was previously accepted by the compiler but is being phased out; it will become a hard error in a future release! - //~| NOTE not a foreign function or static - - #[link_name = "1900"] type T = S; - //~^ WARN attribute should be applied to a foreign function or static [unused_attributes] - //~| WARN this was previously accepted by the compiler but is being phased out; it will become a hard error in a future release! - //~| NOTE not a foreign function or static - - #[link_name = "1900"] impl S { } - //~^ WARN attribute should be applied to a foreign function or static [unused_attributes] - //~| WARN this was previously accepted by the compiler but is being phased out; it will become a hard error in a future release! - //~| NOTE not a foreign function or static -} - -#[link_section = "1800"] -//~^ WARN attribute should be applied to a function or static [unused_attributes] -//~| WARN this was previously accepted by the compiler but is being phased out; it will become a hard error in a future release! -mod link_section { - //~^ NOTE not a function or static - - mod inner { #![link_section="1800"] } - //~^ WARN attribute should be applied to a function or static [unused_attributes] - //~| WARN this was previously accepted by the compiler but is being phased out; it will become a hard error in a future release! - //~| NOTE not a function or static - - #[link_section = "1800"] fn f() { } - - #[link_section = "1800"] struct S; - //~^ WARN attribute should be applied to a function or static [unused_attributes] - //~| WARN this was previously accepted by the compiler but is being phased out; it will become a hard error in a future release! - //~| NOTE not a function or static - - #[link_section = "1800"] type T = S; - //~^ WARN attribute should be applied to a function or static [unused_attributes] - //~| WARN this was previously accepted by the compiler but is being phased out; it will become a hard error in a future release! - //~| NOTE not a function or static - - #[link_section = "1800"] impl S { } - //~^ WARN attribute should be applied to a function or static [unused_attributes] - //~| WARN this was previously accepted by the compiler but is being phased out; it will become a hard error in a future release! - //~| NOTE not a function or static -} - - -// Note that this is a `check-pass` test, so it will never invoke the linker. - -#[link()] -//~^ WARN attribute should be applied to an `extern` block -//~| WARN this was previously accepted -mod link { - //~^ NOTE not an `extern` block - - mod inner { #![link()] } - //~^ WARN attribute should be applied to an `extern` block - //~| WARN this was previously accepted - //~| NOTE not an `extern` block - - #[link()] fn f() { } - //~^ WARN attribute should be applied to an `extern` block - //~| WARN this was previously accepted - //~| NOTE not an `extern` block - - #[link()] struct S; - //~^ WARN attribute should be applied to an `extern` block - //~| WARN this was previously accepted - //~| NOTE not an `extern` block - - #[link()] type T = S; - //~^ WARN attribute should be applied to an `extern` block - //~| WARN this was previously accepted - //~| NOTE not an `extern` block - - #[link()] impl S { } - //~^ WARN attribute should be applied to an `extern` block - //~| WARN this was previously accepted - //~| NOTE not an `extern` block - - #[link()] extern "Rust" {} - //~^ WARN attribute should be applied to an `extern` block - //~| WARN this was previously accepted -} - -struct StructForDeprecated; - -#[deprecated] -mod deprecated { - mod inner { #![deprecated] } - - #[deprecated] fn f() { } - - #[deprecated] struct S1; - - #[deprecated] type T = super::StructForDeprecated; - - #[deprecated] impl super::StructForDeprecated { } -} - -#[must_use] //~ WARN `#[must_use]` has no effect -mod must_use { - mod inner { #![must_use] } //~ WARN `#[must_use]` has no effect - - #[must_use] fn f() { } - - #[must_use] struct S; - - #[must_use] type T = S; //~ WARN `#[must_use]` has no effect - - #[must_use] impl S { } //~ WARN `#[must_use]` has no effect -} - -#[windows_subsystem = "windows"] -//~^ WARN crate-level attribute should be an inner attribute -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 - - #[windows_subsystem = "windows"] struct S; - //~^ WARN crate-level attribute should be an inner attribute - - #[windows_subsystem = "windows"] type T = S; - //~^ WARN crate-level attribute should be an inner attribute - - #[windows_subsystem = "windows"] impl S { } - //~^ WARN crate-level attribute should be an inner attribute -} - -// BROKEN USES OF CRATE-LEVEL BUILT-IN ATTRIBUTES - -#[crate_name = "0900"] -//~^ WARN crate-level attribute should be an inner attribute -mod crate_name { - mod inner { #![crate_name="0900"] } -//~^ WARN crate-level attribute should be in the root module - - #[crate_name = "0900"] fn f() { } - //~^ WARN crate-level attribute should be an inner attribute - - #[crate_name = "0900"] struct S; - //~^ WARN crate-level attribute should be an inner attribute - - #[crate_name = "0900"] type T = S; - //~^ WARN crate-level attribute should be an inner attribute - - #[crate_name = "0900"] impl S { } - //~^ WARN crate-level attribute should be an inner attribute -} - -#[crate_type = "0800"] -//~^ WARN crate-level attribute should be an inner attribute -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 - - #[crate_type = "0800"] struct S; - //~^ WARN crate-level attribute should be an inner attribute - - #[crate_type = "0800"] type T = S; - //~^ WARN crate-level attribute should be an inner attribute - - #[crate_type = "0800"] impl S { } - //~^ WARN crate-level attribute should be an inner attribute -} - -#[feature(x0600)] -//~^ WARN crate-level attribute should be an inner attribute -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 - - #[feature(x0600)] struct S; - //~^ WARN crate-level attribute should be an inner attribute - - #[feature(x0600)] type T = S; - //~^ WARN crate-level attribute should be an inner attribute - - #[feature(x0600)] impl S { } - //~^ WARN crate-level attribute should be an inner attribute -} - - -#[no_main] -//~^ WARN crate-level attribute should be an inner attribute -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 - - #[no_main] struct S; - //~^ WARN crate-level attribute should be an inner attribute - - #[no_main] type T = S; - //~^ WARN crate-level attribute should be an inner attribute - - #[no_main] impl S { } - //~^ WARN crate-level attribute should be an inner attribute -} - -#[no_builtins] -//~^ WARN crate-level attribute should be an inner attribute -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 - - #[no_builtins] struct S; - //~^ WARN crate-level attribute should be an inner attribute - - #[no_builtins] type T = S; - //~^ WARN crate-level attribute should be an inner attribute - - #[no_builtins] impl S { } - //~^ WARN crate-level attribute should be an inner attribute -} - -#[recursion_limit="0200"] -//~^ WARN crate-level attribute should be an inner attribute -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 - - #[recursion_limit="0200"] struct S; - //~^ WARN crate-level attribute should be an inner attribute - - #[recursion_limit="0200"] type T = S; - //~^ WARN crate-level attribute should be an inner attribute - - #[recursion_limit="0200"] impl S { } - //~^ WARN crate-level attribute should be an inner attribute -} - -#[type_length_limit="0100"] -//~^ WARN crate-level attribute should be an inner attribute -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 - - #[type_length_limit="0100"] struct S; - //~^ WARN crate-level attribute should be an inner attribute - - #[type_length_limit="0100"] type T = S; - //~^ WARN crate-level attribute should be an inner attribute - - #[type_length_limit="0100"] impl S { } - //~^ WARN crate-level attribute should be an inner attribute -} - -fn main() {} |