Rollup merge of #100030 - WaffleLapkin:nice_pointer_sis, r=scottmcm
cleanup code w/ pointers in std a little Use pointer methods (`byte_add`, `null_mut`, etc) to make code in std a little nicer.
This commit is contained in:
commit
51eed00ca9
8 changed files with 33 additions and 26 deletions
|
@ -1545,20 +1545,23 @@ impl<T: ?Sized> *mut T {
|
|||
/// Accessing adjacent `u8` as `u16`
|
||||
///
|
||||
/// ```
|
||||
/// # fn foo(n: usize) {
|
||||
/// # use std::mem::align_of;
|
||||
/// use std::mem::align_of;
|
||||
///
|
||||
/// # unsafe {
|
||||
/// let x = [5u8, 6u8, 7u8, 8u8, 9u8];
|
||||
/// let ptr = x.as_ptr().add(n) as *const u8;
|
||||
/// let mut x = [5_u8, 6, 7, 8, 9];
|
||||
/// let ptr = x.as_mut_ptr();
|
||||
/// let offset = ptr.align_offset(align_of::<u16>());
|
||||
/// if offset < x.len() - n - 1 {
|
||||
/// let u16_ptr = ptr.add(offset) as *const u16;
|
||||
/// assert_ne!(*u16_ptr, 500);
|
||||
///
|
||||
/// if offset < x.len() - 1 {
|
||||
/// let u16_ptr = ptr.add(offset).cast::<u16>();
|
||||
/// *u16_ptr = 0;
|
||||
///
|
||||
/// assert!(x == [0, 0, 7, 8, 9] || x == [5, 0, 0, 8, 9]);
|
||||
/// } else {
|
||||
/// // while the pointer can be aligned via `offset`, it would point
|
||||
/// // outside the allocation
|
||||
/// }
|
||||
/// # } }
|
||||
/// # }
|
||||
/// ```
|
||||
#[stable(feature = "align_offset", since = "1.36.0")]
|
||||
#[rustc_const_unstable(feature = "const_align_offset", issue = "90962")]
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue