//@ run-pass | |
// Tests that the scope of the pointer returned from `get()` is | |
// limited to the deref operation itself, and does not infect the | |
// block as a whole. | |
struct Box { | |
x: usize | |
} | |
impl Box { | |
fn get(&self) -> &usize { | |
&self.x | |
} | |
fn set(&mut self, x: usize) { | |
self.x = x; | |
} | |
} | |
fn fun1() { | |
// in the past, borrow checker behaved differently when | |
// init and decl of `v` were distinct | |
let v; | |
let mut a_box = Box {x: 0}; | |
a_box.set(22); | |
v = *a_box.get(); | |
a_box.set(v+1); | |
assert_eq!(23, *a_box.get()); | |
} | |
fn fun2() { | |
let mut a_box = Box {x: 0}; | |
a_box.set(22); | |
let v = *a_box.get(); | |
a_box.set(v+1); | |
assert_eq!(23, *a_box.get()); | |
} | |
pub fn main() { | |
fun1(); | |
fun2(); | |
} |