2019-11-24 22:39:05 +00:00
|
|
|
// Test that the borrow checker doesn't consider checking an exhaustive pattern
|
|
|
|
// as an access.
|
|
|
|
|
|
|
|
// check-pass
|
|
|
|
|
2023-05-19 11:25:35 +02:00
|
|
|
#![allow(dropping_references)]
|
2023-03-29 22:18:20 +02:00
|
|
|
|
2019-11-24 22:39:05 +00:00
|
|
|
// aux-build:monovariants.rs
|
|
|
|
extern crate monovariants;
|
|
|
|
|
|
|
|
use monovariants::ExhaustiveMonovariant;
|
|
|
|
|
|
|
|
enum Local {
|
|
|
|
Variant(u32),
|
|
|
|
}
|
|
|
|
|
|
|
|
#[non_exhaustive]
|
|
|
|
enum LocalNonExhaustive {
|
|
|
|
Variant(u32),
|
|
|
|
}
|
|
|
|
|
|
|
|
fn main() {
|
|
|
|
let mut x = ExhaustiveMonovariant::Variant(1);
|
|
|
|
let y = &mut x;
|
|
|
|
match x {
|
|
|
|
ExhaustiveMonovariant::Variant(_) => {},
|
|
|
|
_ => {},
|
|
|
|
}
|
|
|
|
drop(y);
|
|
|
|
let mut x = Local::Variant(1);
|
|
|
|
let y = &mut x;
|
|
|
|
match x {
|
|
|
|
Local::Variant(_) => {},
|
|
|
|
_ => {},
|
|
|
|
}
|
|
|
|
drop(y);
|
|
|
|
let mut x = LocalNonExhaustive::Variant(1);
|
|
|
|
let y = &mut x;
|
|
|
|
match x {
|
|
|
|
LocalNonExhaustive::Variant(_) => {},
|
|
|
|
_ => {},
|
|
|
|
}
|
|
|
|
drop(y);
|
|
|
|
}
|