blob: 03d854099e644dee7638ab3916f31ae04ed53dbe [file] [log] [blame]
#![allow(clippy::mut_mut)]
fn takes_ref(a: &i32) {}
fn takes_refmut(a: &mut i32) {}
fn takes_ref_ref(a: &&i32) {}
fn takes_refmut_ref(a: &mut &i32) {}
fn takes_ref_refmut(a: &&mut i32) {}
fn takes_refmut_refmut(a: &mut &mut i32) {}
fn takes_raw_const(a: *const i32) {}
fn takes_raw_mut(a: *mut i32) {}
mod issue11268 {
macro_rules! x {
(1 $f:expr) => {
$f(&mut 1);
};
(2 $f:expr) => {
$f(&mut &1)
};
(3 $f:expr) => {
$f(&mut &mut 1)
};
(4 $f:expr) => {
let mut a = 1;
$f(&raw mut a)
};
}
fn f() {
x!(1 super::takes_ref);
x!(1 super::takes_refmut);
x!(2 super::takes_refmut_ref);
x!(3 super::takes_ref_refmut);
x!(3 super::takes_refmut_refmut);
x!(4 super::takes_raw_const);
x!(4 super::takes_raw_mut);
}
}
struct MyStruct;
impl MyStruct {
fn takes_ref(&self, a: &i32) {}
fn takes_refmut(&self, a: &mut i32) {}
fn takes_ref_ref(&self, a: &&i32) {}
fn takes_refmut_ref(&self, a: &mut &i32) {}
fn takes_ref_refmut(&self, a: &&mut i32) {}
fn takes_refmut_refmut(&self, a: &mut &mut i32) {}
fn takes_raw_const(&self, a: *const i32) {}
fn takes_raw_mut(&self, a: *mut i32) {}
}
#[warn(clippy::unnecessary_mut_passed)]
fn main() {
// Functions
takes_ref(&42);
//~^ unnecessary_mut_passed
takes_ref_ref(&&42);
//~^ unnecessary_mut_passed
takes_ref_refmut(&&mut 42);
//~^ unnecessary_mut_passed
takes_raw_const(&42);
//~^ unnecessary_mut_passed
let as_ptr: fn(&i32) = takes_ref;
as_ptr(&42);
//~^ unnecessary_mut_passed
let as_ptr: fn(&&i32) = takes_ref_ref;
as_ptr(&&42);
//~^ unnecessary_mut_passed
let as_ptr: fn(&&mut i32) = takes_ref_refmut;
as_ptr(&&mut 42);
//~^ unnecessary_mut_passed
let as_ptr: fn(*const i32) = takes_raw_const;
as_ptr(&42);
//~^ unnecessary_mut_passed
// Methods
let my_struct = MyStruct;
my_struct.takes_ref(&42);
//~^ unnecessary_mut_passed
my_struct.takes_ref_ref(&&42);
//~^ unnecessary_mut_passed
my_struct.takes_ref_refmut(&&mut 42);
//~^ unnecessary_mut_passed
my_struct.takes_raw_const(&42);
//~^ unnecessary_mut_passed
// No error
// Functions
takes_ref(&42);
let as_ptr: fn(&i32) = takes_ref;
as_ptr(&42);
takes_refmut(&mut 42);
let as_ptr: fn(&mut i32) = takes_refmut;
as_ptr(&mut 42);
takes_ref_ref(&&42);
let as_ptr: fn(&&i32) = takes_ref_ref;
as_ptr(&&42);
takes_refmut_ref(&mut &42);
let as_ptr: fn(&mut &i32) = takes_refmut_ref;
as_ptr(&mut &42);
takes_ref_refmut(&&mut 42);
let as_ptr: fn(&&mut i32) = takes_ref_refmut;
as_ptr(&&mut 42);
takes_refmut_refmut(&mut &mut 42);
let as_ptr: fn(&mut &mut i32) = takes_refmut_refmut;
as_ptr(&mut &mut 42);
takes_raw_const(&42);
let as_ptr: fn(*const i32) = takes_raw_const;
as_ptr(&42);
takes_raw_mut(&mut 42);
let as_ptr: fn(*mut i32) = takes_raw_mut;
as_ptr(&mut 42);
let a = &mut 42;
let b = &mut &42;
let c = &mut &mut 42;
takes_ref(a);
takes_ref_ref(b);
takes_ref_refmut(c);
takes_raw_const(a);
// Methods
my_struct.takes_ref(&42);
my_struct.takes_refmut(&mut 42);
my_struct.takes_ref_ref(&&42);
my_struct.takes_refmut_ref(&mut &42);
my_struct.takes_ref_refmut(&&mut 42);
my_struct.takes_refmut_refmut(&mut &mut 42);
my_struct.takes_raw_const(&42);
my_struct.takes_raw_mut(&mut 42);
my_struct.takes_ref(a);
my_struct.takes_ref_ref(b);
my_struct.takes_ref_refmut(c);
my_struct.takes_raw_const(a);
my_struct.takes_raw_mut(a);
}
// not supported currently
fn raw_ptrs(my_struct: MyStruct) {
let mut n = 42;
takes_raw_const(&raw mut n);
let as_ptr: fn(*const i32) = takes_raw_const;
as_ptr(&raw mut n);
my_struct.takes_raw_const(&raw mut n);
// No error
takes_raw_const(&raw const n);
takes_raw_mut(&raw mut n);
let a = &raw mut n;
takes_raw_const(a);
my_struct.takes_raw_const(&raw const n);
my_struct.takes_raw_mut(&raw mut n);
my_struct.takes_raw_const(a);
}