From 7919ebb0ae932edf441691b65f6add9850bceb88 Mon Sep 17 00:00:00 2001
From: Lukas Markeffsky <@>
Date: Thu, 1 Feb 2024 00:49:36 +0100
Subject: [PATCH] less unsafe in test

---
 src/lib.rs | 15 ++++++---------
 1 file changed, 6 insertions(+), 9 deletions(-)

diff --git a/src/lib.rs b/src/lib.rs
index f76cb79..16b985a 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]
-- 
GitLab