#![warn(clippy::mutex_integer)]
#![warn(clippy::mutex_atomic)]
#![allow(clippy::borrow_as_ptr)]

use std::sync::Mutex;

fn main() {
    let _ = Mutex::new(true);
    //~^ mutex_atomic

    let _ = Mutex::new(5usize);
    //~^ mutex_atomic

    let _ = Mutex::new(9isize);
    //~^ mutex_atomic

    let mut x = 4u32;
    // `AtomicPtr` only accepts `*mut T`, so this should not lint
    let _ = Mutex::new(&x as *const u32);

    let _ = Mutex::new(&mut x as *mut u32);
    //~^ mutex_atomic

    let _ = Mutex::new(0u32);
    //~^ mutex_integer

    let _ = Mutex::new(0i32);
    //~^ mutex_integer

    let _ = Mutex::new(0f32); // there are no float atomics, so this should not lint
    let _ = Mutex::new(0u8);
    //~^ mutex_integer

    let _ = Mutex::new(0i16);
    //~^ mutex_integer

    let _x: Mutex<i8> = Mutex::new(0);
    //~^ mutex_integer

    const X: i64 = 0;
    let _ = Mutex::new(X);
    //~^ mutex_integer

    // there are no 128 atomics, so these two should not lint
    {
        let _ = Mutex::new(0u128);
        let _x: Mutex<i128> = Mutex::new(0);
    }
}

// don't lint on _use_, only declaration
fn issue13378() {
    static MTX: Mutex<u32> = Mutex::new(0);
    //~^ mutex_integer

    let mtx = Mutex::new(0);
    //~^ mutex_integer
    // This will still lint, since we're reassigning the mutex to a variable -- oh well.
    // But realistically something like this won't really come up.
    let reassigned = mtx;
    //~^ mutex_integer

    // don't eat the `)` when removing the type ascription -- see
    // https://github.com/rust-lang/rust-clippy/issues/15377
    let (funky_mtx): Mutex<u64> = Mutex::new(0);
    //~^ mutex_integer
}

fn wrongly_unmangled_macros() {
    macro_rules! test_expr {
        ($val:expr) => {
            ($val > 0 && true)
        };
    }

    let _ = Mutex::new(test_expr!(1));
    //~^ mutex_atomic
    // The suggestion should preserve the macro call: `AtomicBool::new(test_expr!(true))`
}
