fn bar(k: i32) {}
trait I: Copy {
    fn succ(&self) -> Self;
    fn inc(&mut self) -> Self {
        let v = self.succ();
        *self = v;
        v
    }
}
impl I for i32 {
    fn succ(&self) -> Self {
        *self + 1
    }
}
fn foo() {
    let mut n = 1;
    fun_name(&mut n);
    let m = n + 1;
}

fn fun_name(n: &mut i32) {
    *n += *n;
    bar(*n);
    bar(*n + 1);
    bar(*n * *n);
    bar(&*n);
    n.inc();
    let v = n;
    *v = v.succ();
    n.succ();
}

fn main() {}
