2024-02-16 14:02:50 -06:00
|
|
|
//@ run-rustfix
|
2023-04-07 12:23:03 -05:00
|
|
|
#![allow(unused)]
|
|
|
|
struct S;
|
|
|
|
|
|
|
|
impl S {
|
|
|
|
fn call(&mut self, f: impl FnOnce((), &mut Self)) {
|
|
|
|
// change state or something ...
|
|
|
|
f((), self);
|
|
|
|
// change state or something ...
|
|
|
|
}
|
|
|
|
|
|
|
|
fn get(&self) {}
|
|
|
|
fn set(&mut self) {}
|
|
|
|
}
|
|
|
|
|
|
|
|
fn main() {
|
|
|
|
let mut v = S;
|
|
|
|
|
|
|
|
v.call(|(), this: &mut S| v.get());
|
|
|
|
//~^ error: cannot borrow `v` as mutable because it is also borrowed as immutable
|
|
|
|
v.call(|(), this: &mut S| v.set());
|
|
|
|
//~^ error: cannot borrow `v` as mutable more than once at a time
|
|
|
|
//~| error: cannot borrow `v` as mutable more than once at a time
|
|
|
|
|
|
|
|
v.call(|(), this: &mut S| {
|
|
|
|
//~^ error: cannot borrow `v` as mutable more than once at a time
|
|
|
|
//~| error: cannot borrow `v` as mutable more than once at a time
|
|
|
|
|
|
|
|
_ = v;
|
|
|
|
v.set();
|
|
|
|
v.get();
|
|
|
|
S::get(&v);
|
|
|
|
|
|
|
|
use std::ops::Add;
|
|
|
|
let v = 0u32;
|
|
|
|
_ = v + v;
|
|
|
|
_ = v.add(3);
|
|
|
|
});
|
|
|
|
}
|