// 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() {}
