//~ 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() {}
