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 }})
r? @cuviper
(rustbot has picked a reviewer for you, use r? to override)
rustbot added S-waiting-on-review
Status: Awaiting review from the assignee but also interested parties.
Relevant to the library team, which will review and decide on the PR/issue.
labels
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.
Co-authored-by: Josh Stone cuviper@gmail.com
📌 Commit e30f8ae has been approved by cuviper
It is now in the queue for this repository.
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
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
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
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
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
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
This PR was explicitly merged by bors.
Status: Waiting on bors to run and complete tests. Bors will change the label on completion.
Relevant to the library team, which will review and decide on the PR/issue.