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