Files
rust/tests/ui/borrowck/already-borrowed-as-mutable-if-let-133941.rs
Michael Howell ecb2d5c43d diagnostics: fix borrowck suggestions for if/while let conditionals
This code detects the case where one of the borrows is inside the
let init expr while the other end is not. If that happens, we don't
want to suggest adding a semicolon, because it won't work.
2025-02-01 14:39:43 -07:00

47 lines
917 B
Rust

// 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]
}
}