mirror of
https://github.com/rust-lang/rust.git
synced 2024-11-23 23:34:48 +00:00
38 lines
877 B
Rust
38 lines
877 B
Rust
|
// Check that `ref mut` variables don't change address between the match guard
|
||
|
// and the arm expression.
|
||
|
|
||
|
//@ run-pass
|
||
|
|
||
|
// Test that z always point to the same temporary.
|
||
|
fn referent_stability() {
|
||
|
let p;
|
||
|
match 0 {
|
||
|
ref mut z if { p = z as *const _; true } => assert_eq!(p, z as *const _),
|
||
|
_ => unreachable!(),
|
||
|
};
|
||
|
}
|
||
|
|
||
|
// Test that z is always effectively the same variable.
|
||
|
fn variable_stability() {
|
||
|
let p;
|
||
|
match 0 {
|
||
|
ref mut z if { p = &z as *const _; true } => assert_eq!(p, &z as *const _),
|
||
|
_ => unreachable!(),
|
||
|
};
|
||
|
}
|
||
|
|
||
|
// Test that a borrow of *z can cross from the guard to the arm.
|
||
|
fn persist_borrow() {
|
||
|
let r;
|
||
|
match 0 {
|
||
|
ref mut z if { r = z as &_; true } => assert_eq!(*r, 0),
|
||
|
_ => unreachable!(),
|
||
|
}
|
||
|
}
|
||
|
|
||
|
fn main() {
|
||
|
referent_stability();
|
||
|
variable_stability();
|
||
|
persist_borrow();
|
||
|
}
|