about summary refs log tree commit diff
path: root/library/alloc/src
diff options
context:
space:
mode:
authorbors <bors@rust-lang.org>2023-08-17 09:09:29 +0000
committerbors <bors@rust-lang.org>2023-08-17 09:09:29 +0000
commitbd138e2ae11050ea9ca7a187345a1b606697a8db (patch)
tree2f4d10e95f3284bb757163b8649035b221734e10 /library/alloc/src
parentd4a881e1433cd10e424843353e1f939f5a798f4e (diff)
parentf2172ea4e25021cae0efb9ef078373a8cca43885 (diff)
downloadrust-bd138e2ae11050ea9ca7a187345a1b606697a8db.tar.gz
rust-bd138e2ae11050ea9ca7a187345a1b606697a8db.zip
Auto merge of #114799 - RalfJung:less-transmute, r=m-ou-se
avoid transmuting Box when we can just cast raw pointers instead

Always better to avoid a transmute, in particular when the layout assumptions it is making are not clearly documented. :)
Diffstat (limited to 'library/alloc/src')
-rw-r--r--library/alloc/src/boxed.rs4
1 files changed, 2 insertions, 2 deletions
diff --git a/library/alloc/src/boxed.rs b/library/alloc/src/boxed.rs
index 8697a77db3b..96b93830f96 100644
--- a/library/alloc/src/boxed.rs
+++ b/library/alloc/src/boxed.rs
@@ -2183,7 +2183,7 @@ impl dyn Error + Send {
         let err: Box<dyn Error> = self;
         <dyn Error>::downcast(err).map_err(|s| unsafe {
             // Reapply the `Send` marker.
-            mem::transmute::<Box<dyn Error>, Box<dyn Error + Send>>(s)
+            Box::from_raw(Box::into_raw(s) as *mut (dyn Error + Send))
         })
     }
 }
@@ -2197,7 +2197,7 @@ impl dyn Error + Send + Sync {
         let err: Box<dyn Error> = self;
         <dyn Error>::downcast(err).map_err(|s| unsafe {
             // Reapply the `Send + Sync` marker.
-            mem::transmute::<Box<dyn Error>, Box<dyn Error + Send + Sync>>(s)
+            Box::from_raw(Box::into_raw(s) as *mut (dyn Error + Send + Sync))
         })
     }
 }