Rollup merge of #128306 - WiktorPrzetacznik:WiktorPrzetacznik-nonnull-alignoffset-update, r=Amanieu
Update NonNull::align_offset quarantees This PR proposes to update [`NonNull::align_offset`](https://doc.rust-lang.org/stable/std/ptr/struct.NonNull.html#method.align_offset) guarantees, which should to be matched with [`ptr::align_offset`](https://doc.rust-lang.org/stable/std/primitive.pointer.html#method.align_offset-1) (as `NonNull::align_offset` delegates to `ptr::align_offset`). [PR #121201](https://github.com/rust-lang/rust/pull/121201) updated only `ptr::align_offset` docs.
This commit is contained in:
commit
3a9dd829d0
@ -1169,9 +1169,7 @@ pub unsafe fn replace(self, src: T) -> T
|
|||||||
/// `align`.
|
/// `align`.
|
||||||
///
|
///
|
||||||
/// If it is not possible to align the pointer, the implementation returns
|
/// If it is not possible to align the pointer, the implementation returns
|
||||||
/// `usize::MAX`. It is permissible for the implementation to *always*
|
/// `usize::MAX`.
|
||||||
/// return `usize::MAX`. Only your algorithm's performance can depend
|
|
||||||
/// on getting a usable offset here, not its correctness.
|
|
||||||
///
|
///
|
||||||
/// The offset is expressed in number of `T` elements, and not bytes.
|
/// The offset is expressed in number of `T` elements, and not bytes.
|
||||||
///
|
///
|
||||||
@ -1179,6 +1177,15 @@ pub unsafe fn replace(self, src: T) -> T
|
|||||||
/// beyond the allocation that the pointer points into. It is up to the caller to ensure that
|
/// beyond the allocation that the pointer points into. It is up to the caller to ensure that
|
||||||
/// the returned offset is correct in all terms other than alignment.
|
/// the returned offset is correct in all terms other than alignment.
|
||||||
///
|
///
|
||||||
|
/// When this is called during compile-time evaluation (which is unstable), the implementation
|
||||||
|
/// may return `usize::MAX` in cases where that can never happen at runtime. This is because the
|
||||||
|
/// actual alignment of pointers is not known yet during compile-time, so an offset with
|
||||||
|
/// guaranteed alignment can sometimes not be computed. For example, a buffer declared as `[u8;
|
||||||
|
/// N]` might be allocated at an odd or an even address, but at compile-time this is not yet
|
||||||
|
/// known, so the execution has to be correct for either choice. It is therefore impossible to
|
||||||
|
/// find an offset that is guaranteed to be 2-aligned. (This behavior is subject to change, as usual
|
||||||
|
/// for unstable APIs.)
|
||||||
|
///
|
||||||
/// # Panics
|
/// # Panics
|
||||||
///
|
///
|
||||||
/// The function panics if `align` is not a power-of-two.
|
/// The function panics if `align` is not a power-of-two.
|
||||||
|
Loading…
Reference in New Issue
Block a user