rust/tests/ui/nll/polonius/call-kills-loans.rs

24 lines
605 B
Rust

// `Call` terminators can write to a local which has existing loans
// and those need to be killed like a regular assignment to a local.
// This is a simplified version of issue 47680, is correctly accepted
// by NLL but was incorrectly rejected by Polonius because of these
// missing `killed` facts.
//@ check-pass
//@ compile-flags: -Z polonius
struct Thing;
impl Thing {
fn next(&mut self) -> &mut Self { unimplemented!() }
}
fn main() {
let mut temp = &mut Thing;
loop {
let v = temp.next();
temp = v; // accepted by NLL, was incorrectly rejected by Polonius
}
}