Skip to content

Commit

Permalink
Browse files Browse the repository at this point in the history
Add address stability test for matches
  • Loading branch information
matthewjasper committed Feb 21, 2019
1 parent 87ec3b2 commit bf446c8
Showing 1 changed file with 39 additions and 0 deletions.
39 changes: 39 additions & 0 deletions src/test/ui/match/match-ref-mut-stability.rs
@@ -0,0 +1,39 @@
// Check that `ref mut` variables don't change address between the match guard
// and the arm expression.

// run-pass

#![feature(nll, bind_by_move_pattern_guards)]

// 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();
}

0 comments on commit bf446c8

Please sign in to comment.