about summary refs log tree commit diff
diff options
context:
space:
mode:
-rw-r--r--library/core/src/intrinsics.rs10
1 files changed, 7 insertions, 3 deletions
diff --git a/library/core/src/intrinsics.rs b/library/core/src/intrinsics.rs
index 4962299de6f..4a98b480c9d 100644
--- a/library/core/src/intrinsics.rs
+++ b/library/core/src/intrinsics.rs
@@ -993,9 +993,13 @@ extern "rust-intrinsic" {
     ///
     /// Note that using `transmute` to turn a pointer to a `usize` is (as noted above) [undefined
     /// behavior][ub] in `const` contexts. Also outside of consts, this operation might not behave
-    /// as expected -- this is touching on many unspecified aspects of the Rust memory model. To
-    /// make sure your code is well-defined, the conversion of pointers to integers and back should
-    /// always be done explicitly via casts.
+    /// as expected -- this is touching on many unspecified aspects of the Rust memory model.
+    /// Depending on what the code is doing, the following alternatives are preferrable to
+    /// pointer-to-integer transmutation:
+    /// - If the code just wants to store data of arbitrary type in some buffer and needs to pick a
+    ///   type for that buffer, it can use [`MaybeUninit`][mem::MaybeUninit].
+    /// - If the code actually wants to work on the address the pointer points to, it can use `as`
+    ///   casts or [`ptr.addr()`][pointer::addr].
     ///
     /// Turning a `*mut T` into an `&mut T`:
     ///