#![deny(deprecated)]
#![allow(warnings)]

#[deprecated]
fn issue_35128() {
    format_args!("foo");
}

#[deprecated]
fn issue_35128_minimal() {
    static FOO: &'static str = "foo";
    let _ = FOO;
}

#[deprecated]
mod silent {
    type DeprecatedType = u8;
    struct DeprecatedStruct;
    fn deprecated_fn() {}
    trait DeprecatedTrait {}
    static DEPRECATED_STATIC: u8 = 0;
    const DEPRECATED_CONST: u8 = 1;

    struct Foo(DeprecatedType);

    impl DeprecatedTrait for Foo {}

    impl Foo {
        fn bar<T: DeprecatedTrait>() {
            deprecated_fn();
        }
    }

    fn foo() -> u8 {
        DEPRECATED_STATIC +
        DEPRECATED_CONST
    }
}

#[deprecated]
mod loud {
    #[deprecated]
    type DeprecatedType = u8;
    #[deprecated]
    struct DeprecatedStruct;
    #[deprecated]
    fn deprecated_fn() {}
    #[deprecated]
    trait DeprecatedTrait {}
    #[deprecated]
    static DEPRECATED_STATIC: u8 = 0;
    #[deprecated]
    const DEPRECATED_CONST: u8 = 1;

    struct Foo(DeprecatedType); //~ ERROR use of deprecated type alias

    impl DeprecatedTrait for Foo {} //~ ERROR use of deprecated trait

    impl Foo {
        fn bar<T: DeprecatedTrait>() { //~ ERROR use of deprecated trait
            deprecated_fn(); //~ ERROR use of deprecated function
        }
    }

    fn foo() -> u8 {
        DEPRECATED_STATIC + //~ ERROR use of deprecated static
        DEPRECATED_CONST //~ ERROR use of deprecated const
    }
}

fn main() {}
