170 lines
4.2 KiB
Rust
170 lines
4.2 KiB
Rust
#![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);
|
|
}
|