diff --git a/src/lib.rs b/src/lib.rs index f76cb79008c278bb0ed7343ec0c9529e4042f349..16b985a6301bf86c10a856e9b7e98c5facc87e3c 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -243,10 +243,9 @@ mod tests { use std::cell::RefCell; use std::fmt::Display; + use std::panic::{self, AssertUnwindSafe}; use std::pin::pin; - use std::ptr; use std::rc::Rc; - use std::panic::{self, AssertUnwindSafe}; fn iter_pinned_mut<T>(slice: Pin<&mut [T]>) -> impl Iterator<Item = Pin<&mut T>> { unsafe { @@ -366,18 +365,16 @@ mod tests { #[test] #[should_panic = "projected from different roots"] fn project_multiple() { - let target = ProjectTarget::new(0); - // pretend we leak the target here without actually leaking - let target_leak = unsafe { &*ptr::from_ref(&target) }; + let target = Rc::new(ProjectTarget::new(0)); let root1 = pin!(Root::new()); - let xrc1 = root1.unclaimed().claim(NoReclaim(())); + let xrc1 = root1.unclaimed().claim(NoReclaim(target.clone())); let root2 = pin!(Root::new()); - let xrc2 = root2.unclaimed().claim(NoReclaim(())); + let xrc2 = root2.unclaimed().claim(NoReclaim(target)); - let _ = Xrc::project(xrc1, |_| target_leak); - let _ = Xrc::project(xrc2, |_| target_leak); + let _ = Xrc::project(xrc1, |xrc| &*xrc.0); + let _ = Xrc::project(xrc2, |xrc| &*xrc.0); } #[test]