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

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service andprivacy statement. We’ll occasionally send you account related emails.

Already on GitHub?Sign in to your account

Conversation11 Commits2 Checks0 Files changed

Conversation

This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.Learn more about bidirectional Unicode characters

[ Show hidden characters]({{ revealButtonHref }})

RalfJung

@rustbot

r? @cuviper

(rustbot has picked a reviewer for you, use r? to override)

@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

@chorman0773

Appologies for forgetting to work on this.

I'd probably also explicitly note that expr applies Deref and DerefMut (likewise Index and IndexMut) when applicable, as that's a fairly significant footgun.

@RalfJung

@RalfJung

cuviper

@RalfJung @cuviper

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

@cuviper

@bors

📌 Commit e30f8ae has been approved by cuviper

It is now in the queue for this repository.

@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

@bors

@bors

@rust-timer

Finished benchmarking commit (17d0a45): comparison URL.

Overall result: ✅ improvements - no action needed

@rustbot label: -perf-regression

Instruction count

This is a highly reliable metric that was used to determine the overall result at the top of this comment.

mean range count
Regressions ❌ (primary) - - 0
Regressions ❌ (secondary) - - 0
Improvements ✅ (primary) -0.3% [-0.3%, -0.3%] 1
Improvements ✅ (secondary) -0.2% [-0.2%, -0.2%] 1
All ❌✅ (primary) -0.3% [-0.3%, -0.3%] 1

Max RSS (memory usage)

Results

This is a less reliable metric that may be of interest but was not used to determine the overall result at the top of this comment.

mean range count
Regressions ❌ (primary) 0.6% [0.4%, 0.9%] 6
Regressions ❌ (secondary) 1.8% [0.9%, 2.8%] 2
Improvements ✅ (primary) -1.4% [-1.4%, -1.4%] 1
Improvements ✅ (secondary) - - 0
All ❌✅ (primary) 0.3% [-1.4%, 0.9%] 7

Cycles

Results

This is a less reliable metric that may be of interest but was not used to determine the overall result at the top of this comment.

mean range count
Regressions ❌ (primary) - - 0
Regressions ❌ (secondary) - - 0
Improvements ✅ (primary) -0.5% [-0.5%, -0.5%] 1
Improvements ✅ (secondary) - - 0
All ❌✅ (primary) -0.5% [-0.5%, -0.5%] 1

Binary size

This benchmark run did not return any relevant results for this metric.

Bootstrap: 673.637s -> 675.602s (0.29%)
Artifact size: 311.13 MiB -> 311.12 MiB (-0.00%)

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

Jun 4, 2024

@github-actions @celinval

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 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow></mrow><annotation encoding="application/x-tex"></annotation></semantics></math></span><span class="katex-html" aria-hidden="true"></span></span>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

@jhpratt

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

@rust-timer

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

@jhpratt

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.

Labels

merged-by-bors

This PR was explicitly merged by bors.

S-waiting-on-bors

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

T-libs

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