| //@aux-build:proc_macros.rs | |
| #![warn(clippy::mut_mut)] | |
| extern crate proc_macros; | |
| use proc_macros::{external, inline_macros}; | |
| fn fun(x: &mut &mut u32) { | |
| //~^ mut_mut | |
| } | |
| fn less_fun(x: *mut *mut u32) { | |
| let y = x; | |
| } | |
| macro_rules! mut_ptr { | |
| ($p:expr) => { | |
| &mut $p | |
| }; | |
| } | |
| #[inline_macros] | |
| fn main() { | |
| let mut x = &mut &mut 1u32; | |
| //~^ mut_mut | |
| { | |
| let mut y = &mut x; | |
| //~^ mut_mut | |
| } | |
| { | |
| let y: &mut &mut u32 = &mut &mut 2; | |
| //~^ mut_mut | |
| //~| mut_mut | |
| } | |
| { | |
| let y: &mut &mut &mut u32 = &mut &mut &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; | |
| } |