//@ run-pass #![allow(unused_must_use)] // Test that we are able to reinitialize box with moved referent // FIXME(static_mut_refs): Do not allow `static_mut_refs` lint #![allow(static_mut_refs)] static mut ORDER: [usize; 3] = [0, 0, 0]; static mut INDEX: usize = 0; struct Dropee (usize); impl Drop for Dropee { fn drop(&mut self) { unsafe { ORDER[INDEX] = self.0; INDEX = INDEX + 1; } } } fn add_sentintel() { unsafe { ORDER[INDEX] = 2; INDEX = INDEX + 1; } } fn main() { let mut x = Box::new(Dropee(1)); *x; // move out from `*x` add_sentintel(); *x = Dropee(3); // re-initialize `*x` {x}; // drop value unsafe { assert_eq!(ORDER, [1, 2, 3]); } }