about summary refs log tree commit diff
diff options
context:
space:
mode:
authorGuillaume Gomez <guillaume1.gomez@gmail.com>2024-05-12 13:41:57 +0200
committerGitHub <noreply@github.com>2024-05-12 13:41:57 +0200
commit5087947695d6aee6c73fb3dbc9b10c5bd9cb6162 (patch)
treebfb346adb8dc6e566ada4608426178af0808ffef
parent4fd98a4b1b100f5329c6efae18031791f64372d2 (diff)
parent15df3d78e47466e651510d93ee36c0852ac4374e (diff)
Rollup merge of #125021 - joshlf:patch-11, r=RalfJung
Update reference safety requirements

Per https://github.com/rust-lang/rust/pull/116677#issuecomment-1945495786, the language as written promises too much. This PR relaxes the language to be consistent with current semantics. If and when #117945 is implemented, we can revert to the old language.

While we're here, we also require that references be non-null.

cc ``@RalfJung``
-rw-r--r--library/core/src/primitive_docs.rs3
1 files changed, 2 insertions, 1 deletions
diff --git a/library/core/src/primitive_docs.rs b/library/core/src/primitive_docs.rs
index d8597369b9b..8283fdc459b 100644
--- a/library/core/src/primitive_docs.rs
+++ b/library/core/src/primitive_docs.rs
@@ -1467,8 +1467,9 @@ mod prim_usize {}
 /// For all types, `T: ?Sized`, and for all `t: &T` or `t: &mut T`, when such values cross an API
 /// boundary, the following invariants must generally be upheld:
 ///
+/// * `t` is non-null
 /// * `t` is aligned to `align_of_val(t)`
-/// * `t` is dereferenceable for `size_of_val(t)` many bytes
+/// * if `size_of_val(t) > 0`, then `t` is dereferenceable for `size_of_val(t)` many bytes
 ///
 /// If `t` points at address `a`, being "dereferenceable" for N bytes means that the memory range
 /// `[a, a + N)` is all contained within a single [allocated object].