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``
This commit is contained in:
commit
5087947695
1 changed files with 2 additions and 1 deletions
|
@ -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].
|
||||
|
|
Loading…
Add table
Reference in a new issue