| // Regression test for #125325 |
| |
| // Tests that we suggest changing an `impl Fn` param |
| // to `impl FnMut` when the provided closure arg |
| // is trying to mutate the closure env. |
| // Ensures that it works that way for both |
| // functions and methods |
| |
| struct S; |
| |
| impl S { |
| fn assoc_func(&self, _f: impl Fn()) -> usize { |
| 0 |
| } |
| } |
| |
| fn func(_f: impl Fn()) -> usize { |
| 0 |
| } |
| |
| fn test_func(s: &S) -> usize { |
| let mut x = (); |
| s.assoc_func(|| x = ()); |
| //~^ cannot assign to `x`, as it is a captured variable in a `Fn` closure |
| func(|| x = ()) |
| //~^ cannot assign to `x`, as it is a captured variable in a `Fn` closure |
| } |
| |
| fn main() {} |