//run-rustfix
#![allow(unused)]

struct S;
impl S {
    fn foo(&mut self) {
        let x = |this: &Self, v: i32| {
            this.bar();
            this.hel();
        };
        self.qux(); //~ ERROR cannot borrow `*self` as mutable because it is also borrowed as immutable
        x(self, 1);
        x(self, 3);
    }
    fn bar(&self) {}
    fn hel(&self) {}
    fn qux(&mut self) {}

    fn hello(&mut self) {
        let y = |this: &Self| {
            this.bar();
        };
        self.qux(); //~ ERROR cannot borrow `*self` as mutable because it is also borrowed as immutable
        y(self);
    }
}

fn main() {}