Skip to content

Add documentation about the memory layout of Cell - #106921

Merged
bors merged 1 commit into
rust-lang:masterfrom
madsmtm:cell-memory-layout
Mar 11, 2023
Merged

Add documentation about the memory layout of Cell#106921
bors merged 1 commit into
rust-lang:masterfrom
madsmtm:cell-memory-layout

Conversation

@madsmtm

Copy link
Copy Markdown
Member

#101717 guaranteed the memory layout of UnsafeCell<T>.

This property (a guaranteed memory layout) can be useful to have on Cell<T> as well.

(Note that Cell<u8>already doesn't trigger the improper_ctypes lint since it is #[repr(transparent)]).

The concrete use-case is for the crate objc2 to specify that Cell<T> is safe to use as an instance variable when T is.

Fixes#79303.


I'm unsure if we should specify less, for example say that the Cell may have extra restrictions on when it may be accessed, or if that's implicit in the (deliberately minimal) way I've worded it here?

@rustbot

Copy link
Copy Markdown
Collaborator

r? @scottmcm

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

@rustbotrustbot 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 Jan 15, 2023
@scottmcm

Copy link
Copy Markdown
Member

Since it sounds like this is a new guarantee,
@rustbot label +needs-fcp
r? rust-lang/libs-api

@rustbotrustbot added the needs-fcp This change is insta-stable, or significant enough to need a team FCP to proceed. label Jan 15, 2023
@rustbotrustbot assigned Amanieu and unassigned scottmcmJan 15, 2023
@madsmtm

Copy link
Copy Markdown
MemberAuthor

Indeed, this is a new guarantee (though I doubt one could change the implementation of Cell to not guarantee this, given that we have Cell::from_mut and Cell::as_slice_of_cells).

@madsmtm
madsmtm marked this pull request as ready for review January 15, 2023 22:44
@rustbot

Copy link
Copy Markdown
Collaborator

Hey! It looks like you've submitted a new PR for the library teams!

If this PR contains changes to any rust-lang/rust public library APIs then please comment with @rustbot label +T-libs-api -T-libs to tag it appropriately. If this PR contains changes to any unstable APIs please edit the PR description to add a link to the relevant API Change Proposal or create one if you haven't already. If you're unsure where your change falls no worries, just leave it as is and the reviewer will take a look and make a decision to forward on if necessary.

Examples of T-libs-api changes:

  • Stabilizing library features
  • Introducing insta-stable changes such as new implementations of existing stable traits on existing stable types
  • Introducing new or changing existing unstable library APIs (excluding permanently unstable features / features without a tracking issue)
  • Changing public documentation in ways that create new stability guarantees
  • Changing observable runtime behavior of library APIs

@madsmtm

Copy link
Copy Markdown
MemberAuthor

@rustbot label +T-libs-api -T-libs

@rustbotrustbot added T-libs-api [DEPRECATED; DO NOT USE] and removed T-libs Relevant to the library team, which will review and decide on the PR/issue. labels Jan 17, 2023
Comment threadlibrary/core/src/cell.rs Outdated
@Amanieu

Copy link
Copy Markdown
Member

Although I think everyone already assumes this, it does technically require an FCP.

@rfcbot merge

@rfcbot

rfcbot commented Jan 24, 2023

Copy link
Copy Markdown

Team member @Amanieu has proposed to merge this. The next step is review by the rest of the tagged team members:

No concerns currently listed.

Once a majority of reviewers approve (and at most 2 approvals are outstanding), this will enter its final comment period. If you spot a major issue that hasn't been raised at any point in this process, please speak up!

See this document for info about what commands tagged team members can give me.

@rfcbotrfcbot added proposed-final-comment-period Proposed to merge/close by relevant subteam, see T-<team> label. Will enter FCP once signed off. disposition-merge This issue / PR is in PFCP or FCP with a disposition to merge it. labels Jan 24, 2023
@rfcbotrfcbot added final-comment-period In the final comment period and will be merged soon unless new substantive objections are raised. and removed proposed-final-comment-period Proposed to merge/close by relevant subteam, see T-<team> label. Will enter FCP once signed off. labels Feb 28, 2023
@rfcbot

Copy link
Copy Markdown

🔔 This is now entering its final comment period, as per the review above. 🔔

@rfcbotrfcbot added finished-final-comment-period The final comment period is finished for this PR / Issue. to-announce Announce this issue on triage meeting and removed final-comment-period In the final comment period and will be merged soon unless new substantive objections are raised. labels Mar 10, 2023
@rfcbot

Copy link
Copy Markdown

The final comment period, with a disposition to merge, as per the review above, is now complete.

As the automated representative of the governance process, I would like to thank the author for their work and everyone else who contributed.

This will be merged soon.

@dtolnay

Copy link
Copy Markdown
Member

@bors r+ rollup

@bors

bors commented Mar 10, 2023

Copy link
Copy Markdown
Collaborator

📌 Commit 660d985 has been approved by dtolnay

It is now in the queue for this repository.

@borsbors 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 Mar 10, 2023
@dtolnaydtolnay assigned dtolnay and unassigned AmanieuMar 10, 2023
bors added a commit to rust-lang-ci/rust that referenced this pull request Mar 11, 2023
…iaskrgr
Rollup of 9 pull requests
Successful merges:
- rust-lang#106921 (Add documentation about the memory layout of `Cell`)
- rust-lang#108828 (Emit alias-eq when equating numeric var and projection)
- rust-lang#108834 (Do not ICE when we have fn pointer `Fn` obligations with bound vars in the self type)
- rust-lang#108900 (fix(lexer): print whitespace warning for \x0c)
- rust-lang#108930 (feat: implement better error for manual impl of `Fn*` traits)
- rust-lang#108937 (improve readability of winnowing)
- rust-lang#108947 (Don't even try to combine consts with incompatible types)
- rust-lang#108976 (Update triagebot rust-analyzer team mention)
- rust-lang#108983 (Forbid `#[target_feature]` on safe default implementations)
Failed merges:
- rust-lang#108950 (Directly construct Inherited in typeck.)
r? `@ghost`
`@rustbot` modify labels: rollup
@bors
bors merged commit b90277e into rust-lang:masterMar 11, 2023
@rustbotrustbot added this to the 1.70.0 milestone Mar 11, 2023
@apirainoapiraino removed the to-announce Announce this issue on triage meeting label Mar 23, 2023
wip-sync pushed a commit to NetBSD/pkgsrc-wip that referenced this pull request Jun 3, 2023
Pkgsrc changes:
* Adjust patches and cargo checksums to new versions.
* Adjust to not cross-build to 8.0, due to LLVM using c++17,
so adjust USE_LANGUAGES.
Upstream changes:
Version 1.70.0 (2023-06-01)
==========================
Language
--------
- [Relax ordering rules for `asm!` operands]
(rust-lang/rust#105798)
- [Properly allow macro expanded `format_args` invocations to uses
captures] (rust-lang/rust#106505)
- [Lint ambiguous glob re-exports]
(rust-lang/rust#107880)
- [Perform const and unsafe checking for expressions in `let _ =
expr` position.]
(rust-lang/rust#102256)
Compiler
--------
- [Extend -Cdebuginfo with new options and named aliases]
(rust-lang/rust#109808)
This provides a smaller version of debuginfo for cases that only
need line number information (`-Cdebuginfo=line-tables-only`),
which may eventually become the default for `-Cdebuginfo=1`.
- [Make `unused_allocation` lint against `Box::new` too]
(rust-lang/rust#104363)
- [Detect uninhabited types early in const eval]
(rust-lang/rust#109435)
- [Switch to LLD as default linker for {arm,thumb}v4t-none-eabi]
(rust-lang/rust#109721)
- [Add tier 3 target `loongarch64-unknown-linux-gnu`]
(rust-lang/rust#96971)
- [Add tier 3 target for `i586-pc-nto-qnx700` (QNX Neutrino RTOS,
version 7.0)] (rust-lang/rust#109173),
- [Insert alignment checks for pointer dereferences as debug assertions]
(rust-lang/rust#98112)
This catches undefined behavior at runtime, and may cause existing
code to fail.
Refer to Rust's [platform support page][platform-support-doc]
for more information on Rust's tiered platform support.
Libraries
---------
- [Document NonZeroXxx layout guarantees]
(rust-lang/rust#94786)
- [Windows: make `Command` prefer non-verbatim paths]
(rust-lang/rust#96391)
- [Implement Default for some alloc/core iterators]
(rust-lang/rust#99929)
- [Fix handling of trailing bare CR in str::lines]
(rust-lang/rust#100311)
- [allow negative numeric literals in `concat!`]
(rust-lang/rust#106844)
- [Add documentation about the memory layout of `Cell`]
(rust-lang/rust#106921)
- [Use `partial_cmp` to implement tuple `lt`/`le`/`ge`/`gt`]
(rust-lang/rust#108157)
- [Stabilize `atomic_as_ptr`]
(rust-lang/rust#108419)
- [Stabilize `nonnull_slice_from_raw_parts`]
(rust-lang/rust#97506)
- [Partial stabilization of `once_cell`]
(rust-lang/rust#105587)
- [Stabilize `nonzero_min_max`]
(rust-lang/rust#106633)
- [Flatten/inline format_args!() and (string and int) literal
arguments into format_args!()]
(rust-lang/rust#106824)
- [Stabilize movbe target feature]
(rust-lang/rust#107711)
- [don't splice from files into pipes in io::copy]
(rust-lang/rust#108283)
- [Add a builtin unstable `FnPtr` trait that is implemented for
all function pointers]
(rust-lang/rust#108080)
This extends `Debug`, `Pointer`, `Hash`, `PartialEq`, `Eq`,
`PartialOrd`, and `Ord` implementations for function pointers
with all ABIs.
Stabilized APIs
---------------
- [`NonZero*::MIN/MAX`]
(https://doc.rust-lang.org/stable/std/num/struct.NonZeroI8.html#associatedconstant.MIN)
- [`BinaryHeap::retain`]
(https://doc.rust-lang.org/stable/std/collections/struct.BinaryHeap.html#method.retain)
- [`Default for std::collections::binary_heap::IntoIter`]
(https://doc.rust-lang.org/stable/std/collections/binary_heap/struct.IntoIter.html)
- [`Default for std::collections::btree_map::{IntoIter, Iter, IterMut}`]
(https://doc.rust-lang.org/stable/std/collections/btree_map/struct.IntoIter.html)
- [`Default for std::collections::btree_map::{IntoKeys, Keys}`]
(https://doc.rust-lang.org/stable/std/collections/btree_map/struct.IntoKeys.html)
- [`Default for std::collections::btree_map::{IntoValues, Values}`]
(https://doc.rust-lang.org/stable/std/collections/btree_map/struct.IntoKeys.html)
- [`Default for std::collections::btree_map::Range`]
(https://doc.rust-lang.org/stable/std/collections/btree_map/struct.Range.html)
- [`Default for std::collections::btree_set::{IntoIter, Iter}`]
(https://doc.rust-lang.org/stable/std/collections/btree_set/struct.IntoIter.html)
- [`Default for std::collections::btree_set::Range`]
(https://doc.rust-lang.org/stable/std/collections/btree_set/struct.Range.html)
- [`Default for std::collections::linked_list::{IntoIter, Iter, IterMut}`]
(https://doc.rust-lang.org/stable/alloc/collections/linked_list/struct.IntoIter.html)
- [`Default for std::vec::IntoIter`]
(https://doc.rust-lang.org/stable/alloc/vec/struct.IntoIter.html#impl-Default-for-IntoIter%3CT,+A%3E)
- [`Default for std::iter::Chain`]
(https://doc.rust-lang.org/stable/std/iter/struct.Chain.html)
- [`Default for std::iter::Cloned`]
(https://doc.rust-lang.org/stable/std/iter/struct.Cloned.html)
- [`Default for std::iter::Copied`]
(https://doc.rust-lang.org/stable/std/iter/struct.Copied.html)
- [`Default for std::iter::Enumerate`]
(https://doc.rust-lang.org/stable/std/iter/struct.Enumerate.html)
- [`Default for std::iter::Flatten`]
(https://doc.rust-lang.org/stable/std/iter/struct.Flatten.html)
- [`Default for std::iter::Fuse`]
(https://doc.rust-lang.org/stable/std/iter/struct.Fuse.html)
- [`Default for std::iter::Rev`]
(https://doc.rust-lang.org/stable/std/iter/struct.Rev.html)
- [`Default for std::slice::Iter`]
(https://doc.rust-lang.org/stable/std/slice/struct.Iter.html)
- [`Default for std::slice::IterMut`]
(https://doc.rust-lang.org/stable/std/slice/struct.IterMut.html)
- [`Rc::into_inner`]
(https://doc.rust-lang.org/stable/alloc/rc/struct.Rc.html#method.into_inner)
- [`Arc::into_inner`]
(https://doc.rust-lang.org/stable/alloc/sync/struct.Arc.html#method.into_inner)
- [`std::cell::OnceCell`]
(https://doc.rust-lang.org/stable/std/cell/struct.OnceCell.html)
- [`Option::is_some_and`]
(https://doc.rust-lang.org/stable/std/option/enum.Option.html#method.is_some_and)
- [`NonNull::slice_from_raw_parts`]
(https://doc.rust-lang.org/stable/std/ptr/struct.NonNull.html#method.slice_from_raw_parts)
- [`Result::is_ok_and`]
(https://doc.rust-lang.org/stable/std/result/enum.Result.html#method.is_ok_and)
- [`Result::is_err_and`]
(https://doc.rust-lang.org/stable/std/result/enum.Result.html#method.is_err_and)
- [`std::sync::atomic::Atomic*::as_ptr`]
(https://doc.rust-lang.org/stable/std/sync/atomic/struct.AtomicU8.html#method.as_ptr)
- [`std::io::IsTerminal`]
(https://doc.rust-lang.org/stable/std/io/trait.IsTerminal.html)
- [`std::os::linux::net::SocketAddrExt`]
(https://doc.rust-lang.org/stable/std/os/linux/net/trait.SocketAddrExt.html)
- [`std::os::unix::net::UnixDatagram::bind_addr`]
(https://doc.rust-lang.org/stable/std/os/unix/net/struct.UnixDatagram.html#method.bind_addr)
- [`std::os::unix::net::UnixDatagram::connect_addr`]
(https://doc.rust-lang.org/stable/std/os/unix/net/struct.UnixDatagram.html#method.connect_addr)
- [`std::os::unix::net::UnixDatagram::send_to_addr`]
(https://doc.rust-lang.org/stable/std/os/unix/net/struct.UnixDatagram.html#method.send_to_addr)
- [`std::os::unix::net::UnixListener::bind_addr`]
(https://doc.rust-lang.org/stable/std/os/unix/net/struct.UnixListener.html#method.bind_addr)
- [`std::path::Path::as_mut_os_str`]
(https://doc.rust-lang.org/stable/std/path/struct.Path.html#method.as_mut_os_str)
- [`std::sync::OnceLock`]
(https://doc.rust-lang.org/stable/std/sync/struct.OnceLock.html)
Cargo
-----
- [Add `CARGO_PKG_README`]
(rust-lang/cargo#11645)
- [Make `sparse` the default protocol for crates.io]
(rust-lang/cargo#11791)
- [Accurately show status when downgrading dependencies]
(rust-lang/cargo#11839)
- [Use registry.default for login/logout]
(rust-lang/cargo#11949)
- [Stabilize `cargo logout`]
(rust-lang/cargo#11950)
Misc
----
- [Stabilize rustdoc `--test-run-directory`]
(rust-lang/rust#103682)
Compatibility Notes
-------------------
- [Prevent stable `libtest` from supporting `-Zunstable-options`]
(rust-lang/rust#109044)
- [Perform const and unsafe checking for expressions in `let _ =
expr` position.] (rust-lang/rust#102256)
- [WebAssembly targets enable `sign-ext` and `mutable-globals`
features in codegen] (rust-lang/rust#109807)
This may cause incompatibility with older execution environments.
- [Insert alignment checks for pointer dereferences as debug assertions]
(rust-lang/rust#98112)
This catches undefined behavior at runtime, and may cause existing
code to fail.
Internal Changes
----------------
These changes do not affect any public interfaces of Rust, but they represent
significant improvements to the performance or internals of rustc and related
tools.
- [Upgrade to LLVM 16]
(rust-lang/rust#109474)
- [Use SipHash-1-3 instead of SipHash-2-4 for StableHasher]
(rust-lang/rust#107925)
netbsd-srcmastr pushed a commit to NetBSD/pkgsrc that referenced this pull request Jul 10, 2023
Pkgsrc changes:
* Adjust patches and cargo checksums to new versions.
* Add support for NetBSD/riscv64.
Upstream changes:
Version 1.70.0 (2023-06-01)
==========================
Language
--------
- [Relax ordering rules for `asm!` operands]
(rust-lang/rust#105798)
- [Properly allow macro expanded `format_args` invocations to uses captures]
(rust-lang/rust#106505)
- [Lint ambiguous glob re-exports]
(rust-lang/rust#107880)
- [Perform const and unsafe checking for expressions in `let _ =
expr` position.]
(rust-lang/rust#102256)
Compiler
--------
- [Extend -Cdebuginfo with new options and named aliases]
(rust-lang/rust#109808)
This provides a smaller version of debuginfo for cases that only
need line number information (`-Cdebuginfo=line-tables-only`),
which may eventually become the default for `-Cdebuginfo=1`.
- [Make `unused_allocation` lint against `Box::new` too]
(rust-lang/rust#104363)
- [Detect uninhabited types early in const eval]
(rust-lang/rust#109435)
- [Switch to LLD as default linker for {arm,thumb}v4t-none-eabi]
(rust-lang/rust#109721)
- [Add tier 3 target `loongarch64-unknown-linux-gnu`]
(rust-lang/rust#96971)
- [Add tier 3 target for `i586-pc-nto-qnx700`(QNX Neutrino RTOS, version 7.0)]
(rust-lang/rust#109173),
- [Insert alignment checks for pointer dereferences as debug assertions]
(rust-lang/rust#98112)
This catches undefined behavior at runtime, and may cause existing
code to fail.
Refer to Rust's [platform support page][platform-support-doc]
for more information on Rust's tiered platform support.
Libraries
---------
- [Document NonZeroXxx layout guarantees]
(rust-lang/rust#94786)
- [Windows: make `Command` prefer non-verbatim paths]
(rust-lang/rust#96391)
- [Implement Default for some alloc/core iterators]
(rust-lang/rust#99929)
- [Fix handling of trailing bare CR in str::lines]
(rust-lang/rust#100311)
- [allow negative numeric literals in `concat!`]
(rust-lang/rust#106844)
- [Add documentation about the memory layout of `Cell`]
(rust-lang/rust#106921)
- [Use `partial_cmp` to implement tuple `lt`/`le`/`ge`/`gt`]
(rust-lang/rust#108157)
- [Stabilize `atomic_as_ptr`]
(rust-lang/rust#108419)
- [Stabilize `nonnull_slice_from_raw_parts`]
(rust-lang/rust#97506)
- [Partial stabilization of `once_cell`]
(rust-lang/rust#105587)
- [Stabilize `nonzero_min_max`]
(rust-lang/rust#106633)
- [Flatten/inline format_args!() and (string and int) literal
arguments into format_args!()]
(rust-lang/rust#106824)
- [Stabilize movbe target feature]
(rust-lang/rust#107711)
- [don't splice from files into pipes in io::copy]
(rust-lang/rust#108283)
- [Add a builtin unstable `FnPtr` trait that is implemented for
all function pointers]
(rust-lang/rust#108080)
This extends `Debug`, `Pointer`, `Hash`, `PartialEq`, `Eq`,
`PartialOrd`, and `Ord` implementations for function pointers
with all ABIs.
Stabilized APIs
---------------
- [`NonZero*::MIN/MAX`]
(https://doc.rust-lang.org/stable/std/num/struct.NonZeroI8.html#associatedconstant.MIN)
- [`BinaryHeap::retain`]
(https://doc.rust-lang.org/stable/std/collections/struct.BinaryHeap.html#method.retain)
- [`Default for std::collections::binary_heap::IntoIter`]
(https://doc.rust-lang.org/stable/std/collections/binary_heap/struct.IntoIter.html)
- [`Default for std::collections::btree_map::{IntoIter, Iter, IterMut}`]
(https://doc.rust-lang.org/stable/std/collections/btree_map/struct.IntoIter.html)
- [`Default for std::collections::btree_map::{IntoKeys, Keys}`]
(https://doc.rust-lang.org/stable/std/collections/btree_map/struct.IntoKeys.html)
- [`Default for std::collections::btree_map::{IntoValues, Values}`]
(https://doc.rust-lang.org/stable/std/collections/btree_map/struct.IntoKeys.html)
- [`Default for std::collections::btree_map::Range`]
(https://doc.rust-lang.org/stable/std/collections/btree_map/struct.Range.html)
- [`Default for std::collections::btree_set::{IntoIter, Iter}`]
(https://doc.rust-lang.org/stable/std/collections/btree_set/struct.IntoIter.html)
- [`Default for std::collections::btree_set::Range`]
(https://doc.rust-lang.org/stable/std/collections/btree_set/struct.Range.html)
- [`Default for std::collections::linked_list::{IntoIter, Iter, IterMut}`]
(https://doc.rust-lang.org/stable/alloc/collections/linked_list/struct.IntoIter.html)
- [`Default for std::vec::IntoIter`]
(https://doc.rust-lang.org/stable/alloc/vec/struct.IntoIter.html#impl-Default-for-IntoIter%3CT,+A%3E)
- [`Default for std::iter::Chain`]
(https://doc.rust-lang.org/stable/std/iter/struct.Chain.html)
- [`Default for std::iter::Cloned`]
(https://doc.rust-lang.org/stable/std/iter/struct.Cloned.html)
- [`Default for std::iter::Copied`]
(https://doc.rust-lang.org/stable/std/iter/struct.Copied.html)
- [`Default for std::iter::Enumerate`]
(https://doc.rust-lang.org/stable/std/iter/struct.Enumerate.html)
- [`Default for std::iter::Flatten`]
(https://doc.rust-lang.org/stable/std/iter/struct.Flatten.html)
- [`Default for std::iter::Fuse`]
(https://doc.rust-lang.org/stable/std/iter/struct.Fuse.html)
- [`Default for std::iter::Rev`]
(https://doc.rust-lang.org/stable/std/iter/struct.Rev.html)
- [`Default for std::slice::Iter`]
(https://doc.rust-lang.org/stable/std/slice/struct.Iter.html)
- [`Default for std::slice::IterMut`]
(https://doc.rust-lang.org/stable/std/slice/struct.IterMut.html)
- [`Rc::into_inner`]
(https://doc.rust-lang.org/stable/alloc/rc/struct.Rc.html#method.into_inner)
- [`Arc::into_inner`]
(https://doc.rust-lang.org/stable/alloc/sync/struct.Arc.html#method.into_inner)
- [`std::cell::OnceCell`]
(https://doc.rust-lang.org/stable/std/cell/struct.OnceCell.html)
- [`Option::is_some_and`]
(https://doc.rust-lang.org/stable/std/option/enum.Option.html#method.is_some_and)
- [`NonNull::slice_from_raw_parts`]
(https://doc.rust-lang.org/stable/std/ptr/struct.NonNull.html#method.slice_from_raw_parts)
- [`Result::is_ok_and`]
(https://doc.rust-lang.org/stable/std/result/enum.Result.html#method.is_ok_and)
- [`Result::is_err_and`]
(https://doc.rust-lang.org/stable/std/result/enum.Result.html#method.is_err_and)
- [`std::sync::atomic::Atomic*::as_ptr`]
(https://doc.rust-lang.org/stable/std/sync/atomic/struct.AtomicU8.html#method.as_ptr)
- [`std::io::IsTerminal`]
(https://doc.rust-lang.org/stable/std/io/trait.IsTerminal.html)
- [`std::os::linux::net::SocketAddrExt`]
(https://doc.rust-lang.org/stable/std/os/linux/net/trait.SocketAddrExt.html)
- [`std::os::unix::net::UnixDatagram::bind_addr`]
(https://doc.rust-lang.org/stable/std/os/unix/net/struct.UnixDatagram.html#method.bind_addr)
- [`std::os::unix::net::UnixDatagram::connect_addr`]
(https://doc.rust-lang.org/stable/std/os/unix/net/struct.UnixDatagram.html#method.connect_addr)
- [`std::os::unix::net::UnixDatagram::send_to_addr`]
(https://doc.rust-lang.org/stable/std/os/unix/net/struct.UnixDatagram.html#method.send_to_addr)
- [`std::os::unix::net::UnixListener::bind_addr`]
(https://doc.rust-lang.org/stable/std/os/unix/net/struct.UnixListener.html#method.bind_addr)
- [`std::path::Path::as_mut_os_str`]
(https://doc.rust-lang.org/stable/std/path/struct.Path.html#method.as_mut_os_str)
- [`std::sync::OnceLock`]
(https://doc.rust-lang.org/stable/std/sync/struct.OnceLock.html)
Cargo
-----
- [Add `CARGO_PKG_README`]
(rust-lang/cargo#11645)
- [Make `sparse` the default protocol for crates.io]
(rust-lang/cargo#11791)
- [Accurately show status when downgrading dependencies]
(rust-lang/cargo#11839)
- [Use registry.default for login/logout]
(rust-lang/cargo#11949)
- [Stabilize `cargo logout`]
(rust-lang/cargo#11950)
Misc
----
- [Stabilize rustdoc `--test-run-directory`]
(rust-lang/rust#103682)
Compatibility Notes
-------------------
- [Prevent stable `libtest` from supporting `-Zunstable-options`]
(rust-lang/rust#109044)
- [Perform const and unsafe checking for expressions in `let _ =
expr` position.]
(rust-lang/rust#102256)
- [WebAssembly targets enable `sign-ext` and `mutable-globals`
features in codegen]
(rust-lang/rust#109807)
This may cause incompatibility with older execution environments.
- [Insert alignment checks for pointer dereferences as debug assertions]
(rust-lang/rust#98112)
This catches undefined behavior at runtime, and may cause existing
code to fail.
Internal Changes
----------------
These changes do not affect any public interfaces of Rust, but they represent
significant improvements to the performance or internals of rustc and related
tools.
- [Upgrade to LLVM 16]
(rust-lang/rust#109474)
- [Use SipHash-1-3 instead of SipHash-2-4 for StableHasher]
(rust-lang/rust#107925)
@madsmtm
madsmtm deleted the cell-memory-layout branch November 14, 2023 13:54
msk pushed a commit to msk/pkgsrc that referenced this pull request May 11, 2026
Pkgsrc changes:
* Adjust patches and cargo checksums to new versions.
* Add support for NetBSD/riscv64.
Upstream changes:
Version 1.70.0 (2023-06-01)
==========================
Language
--------
- [Relax ordering rules for `asm!` operands]
(rust-lang/rust#105798)
- [Properly allow macro expanded `format_args` invocations to uses captures]
(rust-lang/rust#106505)
- [Lint ambiguous glob re-exports]
(rust-lang/rust#107880)
- [Perform const and unsafe checking for expressions in `let _ =
expr` position.]
(rust-lang/rust#102256)
Compiler
--------
- [Extend -Cdebuginfo with new options and named aliases]
(rust-lang/rust#109808)
This provides a smaller version of debuginfo for cases that only
need line number information (`-Cdebuginfo=line-tables-only`),
which may eventually become the default for `-Cdebuginfo=1`.
- [Make `unused_allocation` lint against `Box::new` too]
(rust-lang/rust#104363)
- [Detect uninhabited types early in const eval]
(rust-lang/rust#109435)
- [Switch to LLD as default linker for {arm,thumb}v4t-none-eabi]
(rust-lang/rust#109721)
- [Add tier 3 target `loongarch64-unknown-linux-gnu`]
(rust-lang/rust#96971)
- [Add tier 3 target for `i586-pc-nto-qnx700`(QNX Neutrino RTOS, version 7.0)]
(rust-lang/rust#109173),
- [Insert alignment checks for pointer dereferences as debug assertions]
(rust-lang/rust#98112)
This catches undefined behavior at runtime, and may cause existing
code to fail.
Refer to Rust's [platform support page][platform-support-doc]
for more information on Rust's tiered platform support.
Libraries
---------
- [Document NonZeroXxx layout guarantees]
(rust-lang/rust#94786)
- [Windows: make `Command` prefer non-verbatim paths]
(rust-lang/rust#96391)
- [Implement Default for some alloc/core iterators]
(rust-lang/rust#99929)
- [Fix handling of trailing bare CR in str::lines]
(rust-lang/rust#100311)
- [allow negative numeric literals in `concat!`]
(rust-lang/rust#106844)
- [Add documentation about the memory layout of `Cell`]
(rust-lang/rust#106921)
- [Use `partial_cmp` to implement tuple `lt`/`le`/`ge`/`gt`]
(rust-lang/rust#108157)
- [Stabilize `atomic_as_ptr`]
(rust-lang/rust#108419)
- [Stabilize `nonnull_slice_from_raw_parts`]
(rust-lang/rust#97506)
- [Partial stabilization of `once_cell`]
(rust-lang/rust#105587)
- [Stabilize `nonzero_min_max`]
(rust-lang/rust#106633)
- [Flatten/inline format_args!() and (string and int) literal
arguments into format_args!()]
(rust-lang/rust#106824)
- [Stabilize movbe target feature]
(rust-lang/rust#107711)
- [don't splice from files into pipes in io::copy]
(rust-lang/rust#108283)
- [Add a builtin unstable `FnPtr` trait that is implemented for
all function pointers]
(rust-lang/rust#108080)
This extends `Debug`, `Pointer`, `Hash`, `PartialEq`, `Eq`,
`PartialOrd`, and `Ord` implementations for function pointers
with all ABIs.
Stabilized APIs
---------------
- [`NonZero*::MIN/MAX`]
(https://doc.rust-lang.org/stable/std/num/struct.NonZeroI8.html#associatedconstant.MIN)
- [`BinaryHeap::retain`]
(https://doc.rust-lang.org/stable/std/collections/struct.BinaryHeap.html#method.retain)
- [`Default for std::collections::binary_heap::IntoIter`]
(https://doc.rust-lang.org/stable/std/collections/binary_heap/struct.IntoIter.html)
- [`Default for std::collections::btree_map::{IntoIter, Iter, IterMut}`]
(https://doc.rust-lang.org/stable/std/collections/btree_map/struct.IntoIter.html)
- [`Default for std::collections::btree_map::{IntoKeys, Keys}`]
(https://doc.rust-lang.org/stable/std/collections/btree_map/struct.IntoKeys.html)
- [`Default for std::collections::btree_map::{IntoValues, Values}`]
(https://doc.rust-lang.org/stable/std/collections/btree_map/struct.IntoKeys.html)
- [`Default for std::collections::btree_map::Range`]
(https://doc.rust-lang.org/stable/std/collections/btree_map/struct.Range.html)
- [`Default for std::collections::btree_set::{IntoIter, Iter}`]
(https://doc.rust-lang.org/stable/std/collections/btree_set/struct.IntoIter.html)
- [`Default for std::collections::btree_set::Range`]
(https://doc.rust-lang.org/stable/std/collections/btree_set/struct.Range.html)
- [`Default for std::collections::linked_list::{IntoIter, Iter, IterMut}`]
(https://doc.rust-lang.org/stable/alloc/collections/linked_list/struct.IntoIter.html)
- [`Default for std::vec::IntoIter`]
(https://doc.rust-lang.org/stable/alloc/vec/struct.IntoIter.html#impl-Default-for-IntoIter%3CT,+A%3E)
- [`Default for std::iter::Chain`]
(https://doc.rust-lang.org/stable/std/iter/struct.Chain.html)
- [`Default for std::iter::Cloned`]
(https://doc.rust-lang.org/stable/std/iter/struct.Cloned.html)
- [`Default for std::iter::Copied`]
(https://doc.rust-lang.org/stable/std/iter/struct.Copied.html)
- [`Default for std::iter::Enumerate`]
(https://doc.rust-lang.org/stable/std/iter/struct.Enumerate.html)
- [`Default for std::iter::Flatten`]
(https://doc.rust-lang.org/stable/std/iter/struct.Flatten.html)
- [`Default for std::iter::Fuse`]
(https://doc.rust-lang.org/stable/std/iter/struct.Fuse.html)
- [`Default for std::iter::Rev`]
(https://doc.rust-lang.org/stable/std/iter/struct.Rev.html)
- [`Default for std::slice::Iter`]
(https://doc.rust-lang.org/stable/std/slice/struct.Iter.html)
- [`Default for std::slice::IterMut`]
(https://doc.rust-lang.org/stable/std/slice/struct.IterMut.html)
- [`Rc::into_inner`]
(https://doc.rust-lang.org/stable/alloc/rc/struct.Rc.html#method.into_inner)
- [`Arc::into_inner`]
(https://doc.rust-lang.org/stable/alloc/sync/struct.Arc.html#method.into_inner)
- [`std::cell::OnceCell`]
(https://doc.rust-lang.org/stable/std/cell/struct.OnceCell.html)
- [`Option::is_some_and`]
(https://doc.rust-lang.org/stable/std/option/enum.Option.html#method.is_some_and)
- [`NonNull::slice_from_raw_parts`]
(https://doc.rust-lang.org/stable/std/ptr/struct.NonNull.html#method.slice_from_raw_parts)
- [`Result::is_ok_and`]
(https://doc.rust-lang.org/stable/std/result/enum.Result.html#method.is_ok_and)
- [`Result::is_err_and`]
(https://doc.rust-lang.org/stable/std/result/enum.Result.html#method.is_err_and)
- [`std::sync::atomic::Atomic*::as_ptr`]
(https://doc.rust-lang.org/stable/std/sync/atomic/struct.AtomicU8.html#method.as_ptr)
- [`std::io::IsTerminal`]
(https://doc.rust-lang.org/stable/std/io/trait.IsTerminal.html)
- [`std::os::linux::net::SocketAddrExt`]
(https://doc.rust-lang.org/stable/std/os/linux/net/trait.SocketAddrExt.html)
- [`std::os::unix::net::UnixDatagram::bind_addr`]
(https://doc.rust-lang.org/stable/std/os/unix/net/struct.UnixDatagram.html#method.bind_addr)
- [`std::os::unix::net::UnixDatagram::connect_addr`]
(https://doc.rust-lang.org/stable/std/os/unix/net/struct.UnixDatagram.html#method.connect_addr)
- [`std::os::unix::net::UnixDatagram::send_to_addr`]
(https://doc.rust-lang.org/stable/std/os/unix/net/struct.UnixDatagram.html#method.send_to_addr)
- [`std::os::unix::net::UnixListener::bind_addr`]
(https://doc.rust-lang.org/stable/std/os/unix/net/struct.UnixListener.html#method.bind_addr)
- [`std::path::Path::as_mut_os_str`]
(https://doc.rust-lang.org/stable/std/path/struct.Path.html#method.as_mut_os_str)
- [`std::sync::OnceLock`]
(https://doc.rust-lang.org/stable/std/sync/struct.OnceLock.html)
Cargo
-----
- [Add `CARGO_PKG_README`]
(rust-lang/cargo#11645)
- [Make `sparse` the default protocol for crates.io]
(rust-lang/cargo#11791)
- [Accurately show status when downgrading dependencies]
(rust-lang/cargo#11839)
- [Use registry.default for login/logout]
(rust-lang/cargo#11949)
- [Stabilize `cargo logout`]
(rust-lang/cargo#11950)
Misc
----
- [Stabilize rustdoc `--test-run-directory`]
(rust-lang/rust#103682)
Compatibility Notes
-------------------
- [Prevent stable `libtest` from supporting `-Zunstable-options`]
(rust-lang/rust#109044)
- [Perform const and unsafe checking for expressions in `let _ =
expr` position.]
(rust-lang/rust#102256)
- [WebAssembly targets enable `sign-ext` and `mutable-globals`
features in codegen]
(rust-lang/rust#109807)
This may cause incompatibility with older execution environments.
- [Insert alignment checks for pointer dereferences as debug assertions]
(rust-lang/rust#98112)
This catches undefined behavior at runtime, and may cause existing
code to fail.
Internal Changes
----------------
These changes do not affect any public interfaces of Rust, but they represent
significant improvements to the performance or internals of rustc and related
tools.
- [Upgrade to LLVM 16]
(rust-lang/rust#109474)
- [Use SipHash-1-3 instead of SipHash-2-4 for StableHasher]
(rust-lang/rust#107925)
jperkin pushed a commit to TritonDataCenter/pkgsrc that referenced this pull request May 14, 2026
Pkgsrc changes:
* Adjust patches and cargo checksums to new versions.
* Add support for NetBSD/riscv64.
Upstream changes:
Version 1.70.0 (2023-06-01)
==========================
Language
--------
- [Relax ordering rules for `asm!` operands]
(rust-lang/rust#105798)
- [Properly allow macro expanded `format_args` invocations to uses captures]
(rust-lang/rust#106505)
- [Lint ambiguous glob re-exports]
(rust-lang/rust#107880)
- [Perform const and unsafe checking for expressions in `let _ =
expr` position.]
(rust-lang/rust#102256)
Compiler
--------
- [Extend -Cdebuginfo with new options and named aliases]
(rust-lang/rust#109808)
This provides a smaller version of debuginfo for cases that only
need line number information (`-Cdebuginfo=line-tables-only`),
which may eventually become the default for `-Cdebuginfo=1`.
- [Make `unused_allocation` lint against `Box::new` too]
(rust-lang/rust#104363)
- [Detect uninhabited types early in const eval]
(rust-lang/rust#109435)
- [Switch to LLD as default linker for {arm,thumb}v4t-none-eabi]
(rust-lang/rust#109721)
- [Add tier 3 target `loongarch64-unknown-linux-gnu`]
(rust-lang/rust#96971)
- [Add tier 3 target for `i586-pc-nto-qnx700`(QNX Neutrino RTOS, version 7.0)]
(rust-lang/rust#109173),
- [Insert alignment checks for pointer dereferences as debug assertions]
(rust-lang/rust#98112)
This catches undefined behavior at runtime, and may cause existing
code to fail.
Refer to Rust's [platform support page][platform-support-doc]
for more information on Rust's tiered platform support.
Libraries
---------
- [Document NonZeroXxx layout guarantees]
(rust-lang/rust#94786)
- [Windows: make `Command` prefer non-verbatim paths]
(rust-lang/rust#96391)
- [Implement Default for some alloc/core iterators]
(rust-lang/rust#99929)
- [Fix handling of trailing bare CR in str::lines]
(rust-lang/rust#100311)
- [allow negative numeric literals in `concat!`]
(rust-lang/rust#106844)
- [Add documentation about the memory layout of `Cell`]
(rust-lang/rust#106921)
- [Use `partial_cmp` to implement tuple `lt`/`le`/`ge`/`gt`]
(rust-lang/rust#108157)
- [Stabilize `atomic_as_ptr`]
(rust-lang/rust#108419)
- [Stabilize `nonnull_slice_from_raw_parts`]
(rust-lang/rust#97506)
- [Partial stabilization of `once_cell`]
(rust-lang/rust#105587)
- [Stabilize `nonzero_min_max`]
(rust-lang/rust#106633)
- [Flatten/inline format_args!() and (string and int) literal
arguments into format_args!()]
(rust-lang/rust#106824)
- [Stabilize movbe target feature]
(rust-lang/rust#107711)
- [don't splice from files into pipes in io::copy]
(rust-lang/rust#108283)
- [Add a builtin unstable `FnPtr` trait that is implemented for
all function pointers]
(rust-lang/rust#108080)
This extends `Debug`, `Pointer`, `Hash`, `PartialEq`, `Eq`,
`PartialOrd`, and `Ord` implementations for function pointers
with all ABIs.
Stabilized APIs
---------------
- [`NonZero*::MIN/MAX`]
(https://doc.rust-lang.org/stable/std/num/struct.NonZeroI8.html#associatedconstant.MIN)
- [`BinaryHeap::retain`]
(https://doc.rust-lang.org/stable/std/collections/struct.BinaryHeap.html#method.retain)
- [`Default for std::collections::binary_heap::IntoIter`]
(https://doc.rust-lang.org/stable/std/collections/binary_heap/struct.IntoIter.html)
- [`Default for std::collections::btree_map::{IntoIter, Iter, IterMut}`]
(https://doc.rust-lang.org/stable/std/collections/btree_map/struct.IntoIter.html)
- [`Default for std::collections::btree_map::{IntoKeys, Keys}`]
(https://doc.rust-lang.org/stable/std/collections/btree_map/struct.IntoKeys.html)
- [`Default for std::collections::btree_map::{IntoValues, Values}`]
(https://doc.rust-lang.org/stable/std/collections/btree_map/struct.IntoKeys.html)
- [`Default for std::collections::btree_map::Range`]
(https://doc.rust-lang.org/stable/std/collections/btree_map/struct.Range.html)
- [`Default for std::collections::btree_set::{IntoIter, Iter}`]
(https://doc.rust-lang.org/stable/std/collections/btree_set/struct.IntoIter.html)
- [`Default for std::collections::btree_set::Range`]
(https://doc.rust-lang.org/stable/std/collections/btree_set/struct.Range.html)
- [`Default for std::collections::linked_list::{IntoIter, Iter, IterMut}`]
(https://doc.rust-lang.org/stable/alloc/collections/linked_list/struct.IntoIter.html)
- [`Default for std::vec::IntoIter`]
(https://doc.rust-lang.org/stable/alloc/vec/struct.IntoIter.html#impl-Default-for-IntoIter%3CT,+A%3E)
- [`Default for std::iter::Chain`]
(https://doc.rust-lang.org/stable/std/iter/struct.Chain.html)
- [`Default for std::iter::Cloned`]
(https://doc.rust-lang.org/stable/std/iter/struct.Cloned.html)
- [`Default for std::iter::Copied`]
(https://doc.rust-lang.org/stable/std/iter/struct.Copied.html)
- [`Default for std::iter::Enumerate`]
(https://doc.rust-lang.org/stable/std/iter/struct.Enumerate.html)
- [`Default for std::iter::Flatten`]
(https://doc.rust-lang.org/stable/std/iter/struct.Flatten.html)
- [`Default for std::iter::Fuse`]
(https://doc.rust-lang.org/stable/std/iter/struct.Fuse.html)
- [`Default for std::iter::Rev`]
(https://doc.rust-lang.org/stable/std/iter/struct.Rev.html)
- [`Default for std::slice::Iter`]
(https://doc.rust-lang.org/stable/std/slice/struct.Iter.html)
- [`Default for std::slice::IterMut`]
(https://doc.rust-lang.org/stable/std/slice/struct.IterMut.html)
- [`Rc::into_inner`]
(https://doc.rust-lang.org/stable/alloc/rc/struct.Rc.html#method.into_inner)
- [`Arc::into_inner`]
(https://doc.rust-lang.org/stable/alloc/sync/struct.Arc.html#method.into_inner)
- [`std::cell::OnceCell`]
(https://doc.rust-lang.org/stable/std/cell/struct.OnceCell.html)
- [`Option::is_some_and`]
(https://doc.rust-lang.org/stable/std/option/enum.Option.html#method.is_some_and)
- [`NonNull::slice_from_raw_parts`]
(https://doc.rust-lang.org/stable/std/ptr/struct.NonNull.html#method.slice_from_raw_parts)
- [`Result::is_ok_and`]
(https://doc.rust-lang.org/stable/std/result/enum.Result.html#method.is_ok_and)
- [`Result::is_err_and`]
(https://doc.rust-lang.org/stable/std/result/enum.Result.html#method.is_err_and)
- [`std::sync::atomic::Atomic*::as_ptr`]
(https://doc.rust-lang.org/stable/std/sync/atomic/struct.AtomicU8.html#method.as_ptr)
- [`std::io::IsTerminal`]
(https://doc.rust-lang.org/stable/std/io/trait.IsTerminal.html)
- [`std::os::linux::net::SocketAddrExt`]
(https://doc.rust-lang.org/stable/std/os/linux/net/trait.SocketAddrExt.html)
- [`std::os::unix::net::UnixDatagram::bind_addr`]
(https://doc.rust-lang.org/stable/std/os/unix/net/struct.UnixDatagram.html#method.bind_addr)
- [`std::os::unix::net::UnixDatagram::connect_addr`]
(https://doc.rust-lang.org/stable/std/os/unix/net/struct.UnixDatagram.html#method.connect_addr)
- [`std::os::unix::net::UnixDatagram::send_to_addr`]
(https://doc.rust-lang.org/stable/std/os/unix/net/struct.UnixDatagram.html#method.send_to_addr)
- [`std::os::unix::net::UnixListener::bind_addr`]
(https://doc.rust-lang.org/stable/std/os/unix/net/struct.UnixListener.html#method.bind_addr)
- [`std::path::Path::as_mut_os_str`]
(https://doc.rust-lang.org/stable/std/path/struct.Path.html#method.as_mut_os_str)
- [`std::sync::OnceLock`]
(https://doc.rust-lang.org/stable/std/sync/struct.OnceLock.html)
Cargo
-----
- [Add `CARGO_PKG_README`]
(rust-lang/cargo#11645)
- [Make `sparse` the default protocol for crates.io]
(rust-lang/cargo#11791)
- [Accurately show status when downgrading dependencies]
(rust-lang/cargo#11839)
- [Use registry.default for login/logout]
(rust-lang/cargo#11949)
- [Stabilize `cargo logout`]
(rust-lang/cargo#11950)
Misc
----
- [Stabilize rustdoc `--test-run-directory`]
(rust-lang/rust#103682)
Compatibility Notes
-------------------
- [Prevent stable `libtest` from supporting `-Zunstable-options`]
(rust-lang/rust#109044)
- [Perform const and unsafe checking for expressions in `let _ =
expr` position.]
(rust-lang/rust#102256)
- [WebAssembly targets enable `sign-ext` and `mutable-globals`
features in codegen]
(rust-lang/rust#109807)
This may cause incompatibility with older execution environments.
- [Insert alignment checks for pointer dereferences as debug assertions]
(rust-lang/rust#98112)
This catches undefined behavior at runtime, and may cause existing
code to fail.
Internal Changes
----------------
These changes do not affect any public interfaces of Rust, but they represent
significant improvements to the performance or internals of rustc and related
tools.
- [Upgrade to LLVM 16]
(rust-lang/rust#109474)
- [Use SipHash-1-3 instead of SipHash-2-4 for StableHasher]
(rust-lang/rust#107925)
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

disposition-mergeThis issue / PR is in PFCP or FCP with a disposition to merge it.finished-final-comment-periodThe final comment period is finished for this PR / Issue.needs-fcpThis change is insta-stable, or significant enough to need a team FCP to proceed.S-waiting-on-borsStatus: Waiting on bors to run and complete tests. Bors will change the label on completion.T-libs-api[DEPRECATED; DO NOT USE]

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Specify layout of Cell and UnsafeCell

8 participants

@madsmtm@rustbot@scottmcm@Amanieu@rfcbot@dtolnay@bors@apiraino