| //@ run-pass |
| #![allow(unused_variables)] |
| #![allow(non_upper_case_globals)] |
| |
| // Test that destructor on a struct runs successfully after the struct |
| // is boxed and converted to an object. |
| |
| // FIXME(static_mut_refs): this could use an atomic |
| #![allow(static_mut_refs)] |
| |
| static mut value: usize = 0; |
| |
| struct Cat { |
| name : usize, |
| } |
| |
| trait Dummy { |
| fn get(&self) -> usize; //~ WARN method `get` is never used |
| } |
| |
| impl Dummy for Cat { |
| fn get(&self) -> usize { self.name } |
| } |
| |
| impl Drop for Cat { |
| fn drop(&mut self) { |
| unsafe { value = self.name; } |
| } |
| } |
| |
| pub fn main() { |
| { |
| let x = Box::new(Cat {name: 22}); |
| let nyan: Box<dyn Dummy> = x as Box<dyn Dummy>; |
| } |
| unsafe { |
| assert_eq!(value, 22); |
| } |
| } |