]> git.lizzy.rs Git - rust.git/commitdiff
improve OFFSET_IS_ADDR docs
authorRalf Jung <post@ralfj.de>
Sun, 28 Aug 2022 17:01:56 +0000 (13:01 -0400)
committerRalf Jung <post@ralfj.de>
Sun, 28 Aug 2022 17:05:34 +0000 (13:05 -0400)
compiler/rustc_middle/src/mir/interpret/pointer.rs

index 5fa802236edd307def377e7c33d8e63d87062fb7..95e52e391d8f8f60f8cc6450da3d49d149f36cce 100644 (file)
@@ -107,8 +107,12 @@ impl<T: HasDataLayout> PointerArithmetic for T {}
 /// pointer), but `derive` adds some unnecessary bounds.
 pub trait Provenance: Copy + fmt::Debug {
     /// Says whether the `offset` field of `Pointer`s with this provenance is the actual physical address.
-    /// If `true, ptr-to-int casts work by simply discarding the provenance.
-    /// If `false`, ptr-to-int casts are not supported. The offset *must* be relative in that case.
+    /// - If `false`, the offset *must* be relative. This means the bytes representing a pointer are
+    ///   different from what the Abstract Machine prescribes, so the interpreter must prevent any
+    ///   operation that would inspect the underlying bytes of a pointer, such as ptr-to-int
+    ///   transmutation. A `ReadPointerAsBytes` error will be raised in such situations.
+    /// - If `true`, the interpreter will permit operations to inspect the underlying bytes of a
+    ///   pointer, and implement ptr-to-int transmutation by stripping provenance.
     const OFFSET_IS_ADDR: bool;
 
     /// We also use this trait to control whether to abort execution when a pointer is being partially overwritten