| #![warn(clippy::mutex_atomic, clippy::mutex_integer)] | |
| #![expect(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))` | |
| } |