rust/tests/ui/borrowck/issue-109271-pass-self-into-closure.rs

Ignoring revisions in .git-blame-ignore-revs. Click here to bypass and see the normal blame view.

40 lines
959 B
Rust
Raw Normal View History

//@ run-rustfix
2023-04-07 17:23:03 +00: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);
});
}