diff --git a/library/coretests/tests/manually_drop.rs b/library/coretests/tests/manually_drop.rs index bbf444471ad2..1638c82b161b 100644 --- a/library/coretests/tests/manually_drop.rs +++ b/library/coretests/tests/manually_drop.rs @@ -27,3 +27,41 @@ fn drop(&mut self) { drop(x); drop(y); } + +#[test] +fn const_drop_in_place() { + const COUNTER: usize = { + use core::cell::Cell; + + let counter = Cell::new(0); + + // only exists to make `Drop` indirect impl + #[allow(dead_code)] + struct Test<'a>(Dropped<'a>); + + struct Dropped<'a>(&'a Cell); + impl const Drop for Dropped<'_> { + fn drop(&mut self) { + self.0.set(self.0.get() + 1); + } + } + + let mut one = ManuallyDrop::new(Test(Dropped(&counter))); + let mut two = ManuallyDrop::new(Test(Dropped(&counter))); + let mut three = ManuallyDrop::new(Test(Dropped(&counter))); + assert!(counter.get() == 0); + unsafe { + ManuallyDrop::drop(&mut one); + } + assert!(counter.get() == 1); + unsafe { + ManuallyDrop::drop(&mut two); + } + assert!(counter.get() == 2); + unsafe { + ManuallyDrop::drop(&mut three); + } + counter.get() + }; + assert_eq!(COUNTER, 3); +} diff --git a/library/coretests/tests/ptr.rs b/library/coretests/tests/ptr.rs index 7afbb1260f23..4d5138d539b9 100644 --- a/library/coretests/tests/ptr.rs +++ b/library/coretests/tests/ptr.rs @@ -1,6 +1,6 @@ use core::cell::RefCell; use core::marker::Freeze; -use core::mem::{ManuallyDrop, MaybeUninit}; +use core::mem::MaybeUninit; use core::num::NonZero; use core::ptr; use core::ptr::*; @@ -1045,41 +1045,3 @@ struct PtrMutDefaultTest { let default = PtrMutDefaultTest::default(); assert!(default.ptr.is_null()); } - -#[test] -fn test_const_drop_in_place() { - const COUNTER: usize = { - use core::cell::Cell; - - let counter = Cell::new(0); - - // only exists to make `Drop` indirect impl - #[allow(dead_code)] - struct Test<'a>(Dropped<'a>); - - struct Dropped<'a>(&'a Cell); - impl const Drop for Dropped<'_> { - fn drop(&mut self) { - self.0.set(self.0.get() + 1); - } - } - - let mut one = ManuallyDrop::new(Test(Dropped(&counter))); - let mut two = ManuallyDrop::new(Test(Dropped(&counter))); - let mut three = ManuallyDrop::new(Test(Dropped(&counter))); - assert!(counter.get() == 0); - unsafe { - ManuallyDrop::drop(&mut one); - } - assert!(counter.get() == 1); - unsafe { - ManuallyDrop::drop(&mut two); - } - assert!(counter.get() == 2); - unsafe { - ManuallyDrop::drop(&mut three); - } - counter.get() - }; - assert_eq!(COUNTER, 3); -}