From 2d74528c21d352969eb044a87d3686a92c9c02bd Mon Sep 17 00:00:00 2001 From: Ralf Jung Date: Thu, 31 Mar 2022 21:11:29 -0400 Subject: [PATCH] caution against ptr-to-int transmutes --- library/core/src/intrinsics.rs | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/library/core/src/intrinsics.rs b/library/core/src/intrinsics.rs index 8ad4317c145..4962299de6f 100644 --- a/library/core/src/intrinsics.rs +++ b/library/core/src/intrinsics.rs @@ -991,6 +991,12 @@ extern "rust-intrinsic" { /// let ptr_num_cast = ptr as *const i32 as usize; /// ``` /// + /// 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. + /// /// Turning a `*mut T` into an `&mut T`: /// /// ```