//@aux-build:proc_macros.rs

#![warn(clippy::mut_mut)]
#![allow(unused)]
#![allow(
    clippy::no_effect,
    clippy::uninlined_format_args,
    clippy::unnecessary_operation,
    clippy::needless_pass_by_ref_mut
)]

extern crate proc_macros;
use proc_macros::{external, inline_macros};

fn fun(x: &mut u32) {
    //~^ mut_mut
}

fn less_fun(x: *mut *mut u32) {
    let y = x;
}

macro_rules! mut_ptr {
    ($p:expr) => {
        &mut $p
    };
}

#[allow(unused_mut, unused_variables)]
#[inline_macros]
fn main() {
    let mut x = &mut 1u32;
    //~^ mut_mut
    {
        let mut y = &mut *x;
        //~^ mut_mut
    }

    {
        let y: &mut u32 = &mut 2;
        //~^ mut_mut
        //~| mut_mut
    }

    {
        let y: &mut u32 = &mut 2;
        //~^ mut_mut
        //~| mut_mut
    }

    let mut z = inline!(&mut $(&mut 3u32));
}

fn issue939() {
    let array = [5, 6, 7, 8, 9];
    let mut args = array.iter().skip(2);
    for &arg in &mut args {
        println!("{}", arg);
    }

    let args = &mut args;
    for arg in args {
        println!(":{}", arg);
    }
}

fn issue6922() {
    // do not lint from an external macro
    external!(let mut_mut_ty: &mut &mut u32 = &mut &mut 1u32;);
}

mod issue9035 {
    use std::fmt::Display;

    struct Foo<'a> {
        inner: &'a mut dyn Display,
    }

    impl Foo<'_> {
        fn foo(&mut self) {
            let hlp = &mut self.inner;
            bar(hlp);
        }
    }

    fn bar(_: &mut impl Display) {}
}

fn allow_works() {
    #[allow(clippy::mut_mut)]
    let _ = &mut &mut 1;
}
