1 // check that panics in destructors during assignment do not leave
2 // destroyed values lying around for other destructors to observe.
5 // error-pattern:panicking destructors ftw!
6 // ignore-emscripten no processes
8 struct Observer<'a>(&'a mut FilledOnDrop);
10 struct FilledOnDrop(u32);
11 impl Drop for FilledOnDrop {
14 // this is only set during the destructor - safe
15 // code should not be able to observe this.
17 panic!("panicking destructors ftw!");
22 impl<'a> Drop for Observer<'a> {
24 assert_eq!(self.0 .0, 1);
28 fn foo(b: &mut Observer) {
29 *b.0 = FilledOnDrop(1);
33 let mut bomb = FilledOnDrop(0);
34 let mut observer = Observer(&mut bomb);