30 lines
648 B
Rust
30 lines
648 B
Rust
|
// 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() {}
|