//@ run-pass #![allow(non_upper_case_globals)] // just to make sure that `return` is only returning from the closure, // not the surrounding function. static mut calls: usize = 0; fn surrounding() { let return_works = |n: isize| { unsafe { calls += 1 } if n >= 0 { return; } panic!() }; return_works(10); return_works(20); let return_works_proc = |n: isize| { unsafe { calls += 1 } if n >= 0 { return; } panic!() }; return_works_proc(10); } pub fn main() { surrounding(); assert_eq!(unsafe {calls}, 3); }