| //@ ignore-compare-mode-polonius (explicit revisions) |
| //@ revisions: nll polonius legacy |
| //@ [nll] known-bug: #46589 |
| //@ [polonius] known-bug: #46589 |
| //@ [polonius] compile-flags: -Zpolonius=next |
| //@ [legacy] check-pass |
| //@ [legacy] compile-flags: -Zpolonius=legacy |
| |
| 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() |
| }; |
| |
| let c = other; |
| } |
| } |
| |
| fn main() {} |