update and clarify addr_of docs by RalfJung · Pull Request #117572 · rust-lang/rust

@rustbot rustbot added S-waiting-on-review

Status: Awaiting review from the assignee but also interested parties.

T-libs

Relevant to the library team, which will review and decide on the PR/issue.

labels

Nov 4, 2023

@RalfJung

cuviper

@RalfJung @cuviper

Co-authored-by: Josh Stone <cuviper@gmail.com>

@bors bors added S-waiting-on-bors

Status: Waiting on bors to run and complete tests. Bors will change the label on completion.

and removed S-waiting-on-review

Status: Awaiting review from the assignee but also interested parties.

labels

Nov 10, 2023

celinval added a commit to celinval/rust-dev that referenced this pull request

Jun 4, 2024
Update Rust toolchain from nightly-2023-11-10 to nightly-2023-11-11
without any other source changes.
This is an automatically generated pull request. If any of the CI checks
fail, manual intervention is required. In such a case, review the
changes at https://github.com/rust-lang/rust from
rust-lang@0f44eb3
up to
rust-lang@edf0b1d.
The log for this commit range is:
rust-lang@edf0b1db0a Auto merge of
rust-lang#115229 - iSwapna:issue-115222-fix, r=estebank
rust-lang@56a109d15b Recurse over the
method chain and maintain a stack to peek at previous receiver to align
spans
rust-lang@d4c86cfc49 Auto merge of
rust-lang#117779 - bjorn3:sync_cg_clif-2023-11-10, r=bjorn3
rust-lang@d186b49460 Merge commit
'c84d1871dc4456539b7b578830268ab3539915d0' into sync_cg_clif-2023-11-10
rust-lang@c84d1871dc Rustup to rustc
1.75.0-nightly (0f44eb3 2023-11-09)
rust-lang@6e7961ac5d Sync from rust
0f44eb3
rust-lang@3d0e99d632 Auto merge of
rust-lang#117765 - onur-ozkan:fix-117762, r=clubby789
rust-lang@17d0a45f5d Auto merge of
rust-lang#117572 - RalfJung:addr_of, r=cuviper
rust-lang@e30f8ae867 mention null
explicitly
rust-lang@0a1e5598b0 Auto merge of
rust-lang#117750 - klensy:icu-followup, r=Nilstrieb
rust-lang@d42d73b144 Auto merge of
rust-lang#117769 - matthiaskrgr:rollup-4efjlg3, r=matthiaskrgr
rust-lang@186a3c8c61 Rollup merge of
rust-lang#117751 - aDotInTheVoid:unkind, r=GuillaumeGomez
rust-lang@7607597d3a Rollup merge of
rust-lang#117743 - sjwang05:issue-117720, r=estebank
rust-lang@7fd7719ca1 Rollup merge of
rust-lang#117741 - eltociear:patch-23, r=compiler-errors
rust-lang@0f1da7e682 Rollup merge of
rust-lang#117730 - jmillikin:fmt-debug-helper-fns, r=cuviper
rust-lang@7096ec3e00 Rollup merge of
rust-lang#117039 - scottmcm:clarify-get-unchecked, r=cuviper
rust-lang@9dc022dd80 Rollup merge of
rust-lang#114191 - rcvalle:rust-exploit-mitigations, r=cuviper
rust-lang@82a9f94de5 Closure-consuming
helper functions for `fmt::Debug` helpers
rust-lang@fdb72795d1 enable unstable
feature on `x clean [PATH]`
rust-lang@22e1576a12 rustdoc-json: Fix
test so it actuall checks things
rust-lang@7142c8d83c bump few ICU4X
leftover deps
rust-lang@5693a34db2 Suggest fix for ;
within let-chains
rust-lang@b8648216a5 Fix typo in
internal.rs
rust-lang@7c385f5a03 Update exploit
mitigations documentation
rust-lang@545175ce87 Fix addition
formatting
rust-lang@82487a9447 Merge pull request
rust-lang#1417 from rust-lang/implement_xgetbv
rust-lang@864973135a Implement all vendor
intrinsics used by the simd-json crate
rust-lang@9f426cef38 Merge pull request
rust-lang#1416 from afonso360/aarch64-intrinsics-1
rust-lang@ecf79a304a Implement all vendor
intrinsics used by the fimg crate
rust-lang@0a35232c85 Implement all vendor
intrinsics used by the httparse crate
rust-lang@61e38ceea7 Implement all SSE
intrinsics used by the jpeg-decoder crate
rust-lang@438194980b Implement all avx2
intrinsics used by the image crate
rust-lang@6a53acefd8 Implement
_mm256_permute2f128_ps and _mm256_permute2f128_pd intrinsics
rust-lang@81af5b5031 update and clarify
addr_of docs
rust-lang@209476e33a Only import aarch64
intrinsics on aarch64
rust-lang@f824da66c6 Make neon example
build in all arches
rust-lang@70a6abfd29 Add unsigned
saturating add/sub intrinsics for aarch64
rust-lang@88c2e7896b Implement aarch64
addp intrinsics
rust-lang@1f09bae6a8 Implement min/max
neon intrisics
rust-lang@8eca01f4b6 Remove support for
compiler plugins.
rust-lang@f6a8c3afb5 Add real
implementation of _xgetbv()
rust-lang@909513ef74 Use Value instead of
CValue in CInlineAsmOperand
rust-lang@ef3703694f Disable a couple of
rustc tests which are broken due to a rustc bug
rust-lang@c04ceb4342 Fix workaround for
the `int $$0x29` issue to not crash on empty inline asm
rust-lang@04f1024ecb Rustup to rustc
1.75.0-nightly (75b064d 2023-11-01)
rust-lang@361585e06d Sync from rust
75b064d
rust-lang@03c9acdd8f Support enum
variants in offset_of!
rust-lang@48ca2d9703 Implement
llvm.fma.v* intrinsics
rust-lang@aed0ed2875 Rollup merge of
rust-lang#117317 - RalfJung:track-caller, r=oli-obk
rust-lang@9a33f82140 Remove inline asm
support from the list of limitations
rust-lang@51f6ac7bfc Merge branch
'sync_from_rust'
rust-lang@41dcb52153 Merge commit
'dde58803fd6cbb270c7a437f36a8a3a29fbef679' into sync_cg_clif-2023-10-29
rust-lang@c6f5090294 share the
track_caller handling within a mir::Body
rust-lang@bad4be6e29 interpret: call
caller_location logic the same way codegen does, and share some code
rust-lang@01ca7a0cb0 Add the missing word
rust-lang@2c13ee8970 Clarify UB in
`get_unchecked(_mut)`
rust-lang@40a83be6eb Format exploit
mitigations documentation

Co-authored-by: celinval <celinval@users.noreply.github.com>

jhpratt added a commit to jhpratt/rust that referenced this pull request

Jan 15, 2025
Update `ReadDir::next` in `std::sys::pal::unix::fs` to use `&raw const (*p).field` instead of `p.byte_offset().cast()`

Since rust-lang/reference#1387 and rust-lang#117572, `&raw mut (*p).field`/`addr_of!((*p).field)` is defined to have the same inbounds preconditions as `ptr::offset`/`ptr::byte_offset`. I.e. `&raw const (*p).field` does not require that `p: *const T` point to a full `size_of::<T>()` bytes of memory, only that `p.byte_add(offset_of!(T, field))` is defined.

The old comment "[...] we don't even get to use `&raw const (*entry_ptr).d_name` because that operation requires the full extent of *entry_ptr to be in bounds of the same allocation, which is not necessarily the case here [...]" is now outdated, and the code can be simplified to use `&raw const (*entry_ptr).field`.

-------

There should be no behavior differences from this PR.

The `: *const dirent64` on line 716 and the `const _: usize = mem::offset_of!(dirent64, $field);` and comment on lines 749-751 are just sanity checks and should not affect semantics.

Since the `offset_ptr!` macro is only called three times, and all with the same local variable entry_ptr, I just used the local variable directly in the macro instead of taking it as an input, and renamed the macro to `entry_field_ptr!`.

The whole macro could also be removed and replaced with just using `&raw const (*entry_ptr).field`  in the three places, but the comments on the macro seemed worthwhile to keep.

rust-timer added a commit to rust-lang-ci/rust that referenced this pull request

Jan 15, 2025
Rollup merge of rust-lang#134678 - zachs18:offset-ptr-update, r=tgross35

Update `ReadDir::next` in `std::sys::pal::unix::fs` to use `&raw const (*p).field` instead of `p.byte_offset().cast()`

Since rust-lang/reference#1387 and rust-lang#117572, `&raw mut (*p).field`/`addr_of!((*p).field)` is defined to have the same inbounds preconditions as `ptr::offset`/`ptr::byte_offset`. I.e. `&raw const (*p).field` does not require that `p: *const T` point to a full `size_of::<T>()` bytes of memory, only that `p.byte_add(offset_of!(T, field))` is defined.

The old comment "[...] we don't even get to use `&raw const (*entry_ptr).d_name` because that operation requires the full extent of *entry_ptr to be in bounds of the same allocation, which is not necessarily the case here [...]" is now outdated, and the code can be simplified to use `&raw const (*entry_ptr).field`.

-------

There should be no behavior differences from this PR.

The `: *const dirent64` on line 716 and the `const _: usize = mem::offset_of!(dirent64, $field);` and comment on lines 749-751 are just sanity checks and should not affect semantics.

Since the `offset_ptr!` macro is only called three times, and all with the same local variable entry_ptr, I just used the local variable directly in the macro instead of taking it as an input, and renamed the macro to `entry_field_ptr!`.

The whole macro could also be removed and replaced with just using `&raw const (*entry_ptr).field`  in the three places, but the comments on the macro seemed worthwhile to keep.

github-actions bot pushed a commit to tautschnig/verify-rust-std that referenced this pull request

Mar 11, 2025
Update `ReadDir::next` in `std::sys::pal::unix::fs` to use `&raw const (*p).field` instead of `p.byte_offset().cast()`

Since rust-lang/reference#1387 and rust-lang#117572, `&raw mut (*p).field`/`addr_of!((*p).field)` is defined to have the same inbounds preconditions as `ptr::offset`/`ptr::byte_offset`. I.e. `&raw const (*p).field` does not require that `p: *const T` point to a full `size_of::<T>()` bytes of memory, only that `p.byte_add(offset_of!(T, field))` is defined.

The old comment "[...] we don't even get to use `&raw const (*entry_ptr).d_name` because that operation requires the full extent of *entry_ptr to be in bounds of the same allocation, which is not necessarily the case here [...]" is now outdated, and the code can be simplified to use `&raw const (*entry_ptr).field`.

-------

There should be no behavior differences from this PR.

The `: *const dirent64` on line 716 and the `const _: usize = mem::offset_of!(dirent64, $field);` and comment on lines 749-751 are just sanity checks and should not affect semantics.

Since the `offset_ptr!` macro is only called three times, and all with the same local variable entry_ptr, I just used the local variable directly in the macro instead of taking it as an input, and renamed the macro to `entry_field_ptr!`.

The whole macro could also be removed and replaced with just using `&raw const (*entry_ptr).field`  in the three places, but the comments on the macro seemed worthwhile to keep.