From 1cefaa7432f2b8ffe05d10889e2e6f9115e7c630 Mon Sep 17 00:00:00 2001 From: Joshua Liebow-Feeser Date: Sat, 11 May 2024 11:50:20 -0700 Subject: [PATCH 1/2] Relax slice 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. --- library/core/src/primitive_docs.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/library/core/src/primitive_docs.rs b/library/core/src/primitive_docs.rs index d8597369b9bfd..331067b8975ca 100644 --- a/library/core/src/primitive_docs.rs +++ b/library/core/src/primitive_docs.rs @@ -1468,7 +1468,7 @@ mod prim_usize {} /// boundary, the following invariants must generally be upheld: /// /// * `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]. From 15df3d78e47466e651510d93ee36c0852ac4374e Mon Sep 17 00:00:00 2001 From: Joshua Liebow-Feeser Date: Sat, 11 May 2024 12:08:19 -0700 Subject: [PATCH 2/2] References must also be non-null --- library/core/src/primitive_docs.rs | 1 + 1 file changed, 1 insertion(+) diff --git a/library/core/src/primitive_docs.rs b/library/core/src/primitive_docs.rs index 331067b8975ca..8283fdc459be1 100644 --- a/library/core/src/primitive_docs.rs +++ b/library/core/src/primitive_docs.rs @@ -1467,6 +1467,7 @@ 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)` /// * if `size_of_val(t) > 0`, then `t` is dereferenceable for `size_of_val(t)` many bytes ///