fn takes_fn(f: impl Fn()) { //~ HELP if `impl Fn()` implemented `Clone`
    loop {
        takes_fnonce(f);
        //~^ ERROR use of moved value
        //~| HELP consider borrowing
    }
}

fn takes_fn_mut(m: impl FnMut()) { //~ HELP if `impl FnMut()` implemented `Clone`
    if maybe() {
        takes_fnonce(m);
        //~^ HELP consider mutably borrowing
    }
    takes_fnonce(m);
    //~^ ERROR use of moved value
}

fn has_closure() {
    let mut x = 0;
    let mut closure = || {
        x += 1;
    };
    takes_fnonce(closure);
    //~^ HELP consider mutably borrowing
    closure();
    //~^ ERROR borrow of moved value
}

fn maybe() -> bool {
    false
}

// Could also be Fn[Mut], here it doesn't matter
fn takes_fnonce(_: impl FnOnce()) {}

fn main() {}
