//@ run-pass | |
use std::cell::RefCell; | |
struct S<'a>(i32, &'a RefCell<Vec<i32>>); | |
impl<'a> Drop for S<'a> { | |
fn drop(&mut self) { | |
self.1.borrow_mut().push(self.0); | |
} | |
} | |
fn test(drops: &RefCell<Vec<i32>>) { | |
let mut foo = None; | |
match foo { | |
None => (), | |
_ => return, | |
} | |
*(&mut foo) = Some((S(0, drops), S(1, drops))); // Both S(0) and S(1) should be dropped | |
match foo { | |
Some((_x, _)) => {} | |
_ => {} | |
} | |
} | |
fn main() { | |
let drops = RefCell::new(Vec::new()); | |
test(&drops); | |
assert_eq!(*drops.borrow(), &[0, 1]); | |
} |