Files
rust/tests/ui/borrowck/already-borrowed-as-mutable-if-let-133941.rs

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

47 lines
917 B
Rust
Raw Normal View History

// https://github.com/rust-lang/rust/issues/133941
use std::marker::PhantomData;
struct Bar<'a>(PhantomData<&'a mut i32>);
impl<'a> Drop for Bar<'a> {
fn drop(&mut self) {}
}
struct Foo();
impl Foo {
fn f(&mut self) -> Option<Bar<'_>> {
None
}
fn g(&mut self) {}
}
fn main() {
let mut foo = Foo();
while let Some(_) = foo.f() {
//~^ HELP matches!
foo.g();
//~^ ERROR [E0499]
}
if let Some(_) = foo.f() {
//~^ HELP matches!
foo.g();
//~^ ERROR [E0499]
}
while let Some(_x) = foo.f() {
foo.g();
//~^ ERROR [E0499]
}
if let Some(_x) = foo.f() {
foo.g();
//~^ ERROR [E0499]
}
while let Some(_x) = {let _x = foo.f(); foo.g(); None::<()>} {
//~^ ERROR [E0499]
}
if let Some(_x) = {let _x = foo.f(); foo.g(); None::<()>} {
//~^ ERROR [E0499]
}
}