2025-01-30 12:47:04 +00:00
|
|
|
//@ ignore-compare-mode-polonius (explicit revisions)
|
|
|
|
|
//@ revisions: nll polonius_next polonius
|
|
|
|
|
//@ [polonius_next] check-pass
|
|
|
|
|
//@ [polonius_next] compile-flags: -Zpolonius=next
|
|
|
|
|
//@ [polonius] check-pass
|
|
|
|
|
//@ [polonius] compile-flags: -Zpolonius
|
2019-07-16 17:34:06 +02:00
|
|
|
|
2018-12-06 15:47:30 +01:00
|
|
|
struct Foo;
|
|
|
|
|
|
|
|
|
|
impl Foo {
|
|
|
|
|
fn get_self(&mut self) -> Option<&mut Self> {
|
|
|
|
|
Some(self)
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
fn new_self(&mut self) -> &mut Self {
|
|
|
|
|
self
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
fn trigger_bug(&mut self) {
|
|
|
|
|
let other = &mut (&mut *self);
|
|
|
|
|
|
|
|
|
|
*other = match (*other).get_self() {
|
|
|
|
|
Some(s) => s,
|
|
|
|
|
None => (*other).new_self()
|
2025-01-30 12:47:04 +00:00
|
|
|
//[nll]~^ ERROR cannot borrow `**other` as mutable more than once at a time [E0499]
|
2018-12-06 15:47:30 +01:00
|
|
|
};
|
|
|
|
|
|
|
|
|
|
let c = other;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
fn main() {}
|