|
1 |
| -#![allow(unused_variables, dead_code)] |
2 |
| -//@no-rustfix |
3 |
| -fn takes_an_immutable_reference(a: &i32) {} |
4 |
| -fn takes_a_mutable_reference(a: &mut i32) {} |
| 1 | +#![allow(clippy::mut_mut)] |
| 2 | + |
| 3 | +fn takes_ref(a: &i32) {} |
| 4 | +fn takes_refmut(a: &mut i32) {} |
| 5 | +fn takes_ref_ref(a: &&i32) {} |
| 6 | +fn takes_refmut_ref(a: &mut &i32) {} |
| 7 | +fn takes_ref_refmut(a: &&mut i32) {} |
| 8 | +fn takes_refmut_refmut(a: &mut &mut i32) {} |
| 9 | +fn takes_raw_const(a: *const i32) {} |
| 10 | +fn takes_raw_mut(a: *mut i32) {} |
5 | 11 |
|
6 | 12 | mod issue11268 {
|
7 | 13 | macro_rules! x {
|
8 |
| - ($f:expr) => { |
| 14 | + (1 $f:expr) => { |
9 | 15 | $f(&mut 1);
|
10 | 16 | };
|
| 17 | + (2 $f:expr) => { |
| 18 | + $f(&mut &1) |
| 19 | + }; |
| 20 | + (3 $f:expr) => { |
| 21 | + $f(&mut &mut 1) |
| 22 | + }; |
| 23 | + (4 $f:expr) => { |
| 24 | + let mut a = 1; |
| 25 | + $f(&raw mut a) |
| 26 | + }; |
11 | 27 | }
|
12 | 28 |
|
13 | 29 | fn f() {
|
14 |
| - x!(super::takes_an_immutable_reference); |
15 |
| - x!(super::takes_a_mutable_reference); |
| 30 | + x!(1 super::takes_ref); |
| 31 | + x!(1 super::takes_refmut); |
| 32 | + x!(2 super::takes_refmut_ref); |
| 33 | + x!(3 super::takes_ref_refmut); |
| 34 | + x!(3 super::takes_refmut_refmut); |
| 35 | + x!(4 super::takes_raw_const); |
| 36 | + x!(4 super::takes_raw_mut); |
16 | 37 | }
|
17 | 38 | }
|
18 | 39 |
|
19 | 40 | struct MyStruct;
|
20 | 41 |
|
21 | 42 | impl MyStruct {
|
22 |
| - fn takes_an_immutable_reference(&self, a: &i32) {} |
23 |
| - |
24 |
| - fn takes_a_mutable_reference(&self, a: &mut i32) {} |
| 43 | + fn takes_ref(&self, a: &i32) {} |
| 44 | + fn takes_refmut(&self, a: &mut i32) {} |
| 45 | + fn takes_ref_ref(&self, a: &&i32) {} |
| 46 | + fn takes_refmut_ref(&self, a: &mut &i32) {} |
| 47 | + fn takes_ref_refmut(&self, a: &&mut i32) {} |
| 48 | + fn takes_refmut_refmut(&self, a: &mut &mut i32) {} |
| 49 | + fn takes_raw_const(&self, a: *const i32) {} |
| 50 | + fn takes_raw_mut(&self, a: *mut i32) {} |
25 | 51 | }
|
26 | 52 |
|
27 | 53 | #[warn(clippy::unnecessary_mut_passed)]
|
28 | 54 | fn main() {
|
29 | 55 | // Functions
|
30 |
| - takes_an_immutable_reference(&mut 42); |
| 56 | + takes_ref(&mut 42); |
| 57 | + //~^ unnecessary_mut_passed |
| 58 | + takes_ref_ref(&mut &42); |
| 59 | + //~^ unnecessary_mut_passed |
| 60 | + takes_ref_refmut(&mut &mut 42); |
| 61 | + //~^ unnecessary_mut_passed |
| 62 | + takes_raw_const(&mut 42); |
31 | 63 | //~^ unnecessary_mut_passed
|
32 | 64 |
|
33 |
| - let as_ptr: fn(&i32) = takes_an_immutable_reference; |
| 65 | + let as_ptr: fn(&i32) = takes_ref; |
| 66 | + as_ptr(&mut 42); |
| 67 | + //~^ unnecessary_mut_passed |
| 68 | + let as_ptr: fn(&&i32) = takes_ref_ref; |
| 69 | + as_ptr(&mut &42); |
| 70 | + //~^ unnecessary_mut_passed |
| 71 | + let as_ptr: fn(&&mut i32) = takes_ref_refmut; |
| 72 | + as_ptr(&mut &mut 42); |
| 73 | + //~^ unnecessary_mut_passed |
| 74 | + let as_ptr: fn(*const i32) = takes_raw_const; |
34 | 75 | as_ptr(&mut 42);
|
35 | 76 | //~^ unnecessary_mut_passed
|
36 | 77 |
|
37 | 78 | // Methods
|
38 | 79 | let my_struct = MyStruct;
|
39 |
| - my_struct.takes_an_immutable_reference(&mut 42); |
| 80 | + my_struct.takes_ref(&mut 42); |
| 81 | + //~^ unnecessary_mut_passed |
| 82 | + my_struct.takes_ref_ref(&mut &42); |
| 83 | + //~^ unnecessary_mut_passed |
| 84 | + my_struct.takes_ref_refmut(&mut &mut 42); |
| 85 | + //~^ unnecessary_mut_passed |
| 86 | + my_struct.takes_raw_const(&mut 42); |
40 | 87 | //~^ unnecessary_mut_passed
|
41 | 88 |
|
42 | 89 | // No error
|
43 | 90 |
|
44 | 91 | // Functions
|
45 |
| - takes_an_immutable_reference(&42); |
46 |
| - let as_ptr: fn(&i32) = takes_an_immutable_reference; |
| 92 | + takes_ref(&42); |
| 93 | + let as_ptr: fn(&i32) = takes_ref; |
47 | 94 | as_ptr(&42);
|
48 | 95 |
|
49 |
| - takes_a_mutable_reference(&mut 42); |
50 |
| - let as_ptr: fn(&mut i32) = takes_a_mutable_reference; |
| 96 | + takes_refmut(&mut 42); |
| 97 | + let as_ptr: fn(&mut i32) = takes_refmut; |
| 98 | + as_ptr(&mut 42); |
| 99 | + |
| 100 | + takes_ref_ref(&&42); |
| 101 | + let as_ptr: fn(&&i32) = takes_ref_ref; |
| 102 | + as_ptr(&&42); |
| 103 | + |
| 104 | + takes_refmut_ref(&mut &42); |
| 105 | + let as_ptr: fn(&mut &i32) = takes_refmut_ref; |
| 106 | + as_ptr(&mut &42); |
| 107 | + |
| 108 | + takes_ref_refmut(&&mut 42); |
| 109 | + let as_ptr: fn(&&mut i32) = takes_ref_refmut; |
| 110 | + as_ptr(&&mut 42); |
| 111 | + |
| 112 | + takes_refmut_refmut(&mut &mut 42); |
| 113 | + let as_ptr: fn(&mut &mut i32) = takes_refmut_refmut; |
| 114 | + as_ptr(&mut &mut 42); |
| 115 | + |
| 116 | + takes_raw_const(&42); |
| 117 | + let as_ptr: fn(*const i32) = takes_raw_const; |
| 118 | + as_ptr(&42); |
| 119 | + |
| 120 | + takes_raw_mut(&mut 42); |
| 121 | + let as_ptr: fn(*mut i32) = takes_raw_mut; |
51 | 122 | as_ptr(&mut 42);
|
52 | 123 |
|
53 | 124 | let a = &mut 42;
|
54 |
| - takes_an_immutable_reference(a); |
| 125 | + let b = &mut &42; |
| 126 | + let c = &mut &mut 42; |
| 127 | + takes_ref(a); |
| 128 | + takes_ref_ref(b); |
| 129 | + takes_ref_refmut(c); |
| 130 | + takes_raw_const(a); |
55 | 131 |
|
56 | 132 | // Methods
|
57 |
| - my_struct.takes_an_immutable_reference(&42); |
58 |
| - my_struct.takes_a_mutable_reference(&mut 42); |
59 |
| - my_struct.takes_an_immutable_reference(a); |
| 133 | + my_struct.takes_ref(&42); |
| 134 | + my_struct.takes_refmut(&mut 42); |
| 135 | + my_struct.takes_ref_ref(&&42); |
| 136 | + my_struct.takes_refmut_ref(&mut &42); |
| 137 | + my_struct.takes_ref_refmut(&&mut 42); |
| 138 | + my_struct.takes_refmut_refmut(&mut &mut 42); |
| 139 | + my_struct.takes_raw_const(&42); |
| 140 | + my_struct.takes_raw_mut(&mut 42); |
| 141 | + my_struct.takes_ref(a); |
| 142 | + my_struct.takes_ref_ref(b); |
| 143 | + my_struct.takes_ref_refmut(c); |
| 144 | + my_struct.takes_raw_const(a); |
| 145 | + my_struct.takes_raw_mut(a); |
| 146 | +} |
| 147 | + |
| 148 | +// not supported currently |
| 149 | +fn raw_ptrs(my_struct: MyStruct) { |
| 150 | + let mut n = 42; |
| 151 | + |
| 152 | + takes_raw_const(&raw mut n); |
| 153 | + |
| 154 | + let as_ptr: fn(*const i32) = takes_raw_const; |
| 155 | + as_ptr(&raw mut n); |
| 156 | + |
| 157 | + my_struct.takes_raw_const(&raw mut n); |
| 158 | + |
| 159 | + // No error |
| 160 | + |
| 161 | + takes_raw_const(&raw const n); |
| 162 | + takes_raw_mut(&raw mut n); |
| 163 | + |
| 164 | + let a = &raw mut n; |
| 165 | + takes_raw_const(a); |
| 166 | + |
| 167 | + my_struct.takes_raw_const(&raw const n); |
| 168 | + my_struct.takes_raw_mut(&raw mut n); |
| 169 | + my_struct.takes_raw_const(a); |
60 | 170 | }
|
0 commit comments