Skip to content

Allow constraining opaque types during subtyping in the trait system - #125447

Merged
bors merged 1 commit into
rust-lang:masterfrom
oli-obk:eq_opaque_pred
Jun 19, 2024
Merged

Allow constraining opaque types during subtyping in the trait system#125447
bors merged 1 commit into
rust-lang:masterfrom
oli-obk:eq_opaque_pred

Conversation

@oli-obk

@oli-obkoli-obk commented May 23, 2024

Copy link
Copy Markdown
Contributor

Previous attempt: #123979

Sometimes we don't immediately perform subtyping, but instead register a subtyping obligation and solve that obligation when its inference variables become resolved. Unlike immediate subtyping, we currently do not allow registering hidden types for opaque types. This PR also allows that.

@rustbotrustbot added S-waiting-on-review Status: Awaiting review from the assignee but also interested parties. T-compiler Relevant to the compiler team, which will review and decide on the PR/issue. labels May 23, 2024
@rust-log-analyzer

This comment has been minimized.

@rustbotrustbot added A-testsuite Area: The testsuite used to check the correctness of rustc T-bootstrap Relevant to the bootstrap subteam: Rust's build system (x.py and src/bootstrap) labels May 23, 2024
@rustbot

This comment was marked as resolved.

@rust-log-analyzer

This comment has been minimized.

@compiler-errors

This comment was marked as resolved.

Comment threadtests/ui/type-alias-impl-trait/lazy_subtyping_of_opaques.rs Outdated
Comment threadtests/ui/impl-trait/lazy_subtyping_of_opaques.rs Outdated
@oli-obk

This comment was marked as resolved.

@compiler-errors

This comment was marked as resolved.

@oli-obk

This comment was marked as resolved.

@lcnr

lcnr commented May 24, 2024

Copy link
Copy Markdown
Contributor

A minimized test:

fnfoo() -> implDefault{let x = Default::default();// add `Subtype(?x, ?y)` obligationlet y = x;// Make a tuple `(?x, ?y)` and equate it with `(impl Default, u32)`.// For us to try and prove a `Subtype(impl Default, u32)` obligation,// we have to instantiate both `?x` and `?y` without any// `select_where_possible` calls inbetween.let tup = &mut(x, y);let assign_tup = &mut(foo(),1u32);
tup = assign_tup;1u32}fnmain(){}

I think this change is clearly desirable, even if it did no go through an FCP. From what I can tell it also doesn't block any other work, as I want us to convert all places to use DefineOpaqueTypes::Yes before stabilizing ATPIT. I would like us to FCP this.

While I think it would have been fine to FCP merge this without first reverting this PR, we would only have 1 week to go through the FCP to make it in time for its stabilization. Given that we're missing some existing uncertainty wrt the impact of this change, please revert #123979 and remerge it after a types FCP.

@oli-obk

This comment was marked as resolved.

@bors

This comment was marked as resolved.

@oli-obkoli-obk changed the title Remove assertion now that we have a test covering the code pathAllow constraining opaque types during subtyping in the trait systemMay 27, 2024
@rustbot

This comment was marked as resolved.

@rustbotrustbot added the has-merge-commits PR has merge commits, merge with caution. label May 27, 2024
@rustbot

This comment was marked as resolved.

@rustbotrustbot added the S-waiting-on-author Status: This is awaiting some action (such as code changes or more information) from the author. label May 27, 2024
@oli-obkoli-obk added T-types Relevant to the types team, which will review and decide on the PR/issue. and removed T-compiler Relevant to the compiler team, which will review and decide on the PR/issue. T-bootstrap Relevant to the bootstrap subteam: Rust's build system (x.py and src/bootstrap) labels May 27, 2024
@rustbotrustbot removed the has-merge-commits PR has merge commits, merge with caution. label May 27, 2024
@bors

bors commented Jun 18, 2024

Copy link
Copy Markdown
Collaborator

📌 Commit 1e9cd07 has been approved by compiler-errors

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 Jun 18, 2024
jieyouxu added a commit to jieyouxu/rust that referenced this pull request Jun 19, 2024
…-errors
Allow constraining opaque types during subtyping in the trait system
Previous attempt: rust-lang#123979
Sometimes we don't immediately perform subtyping, but instead register a subtyping obligation and solve that obligation when its inference variables become resolved. Unlike immediate subtyping, we currently do not allow registering hidden types for opaque types. This PR also allows that.
@jieyouxujieyouxu mentioned this pull request Jun 19, 2024
@jieyouxu

Copy link
Copy Markdown
Member

UI tests might need rebless #126653 (comment)
@bors r-

@borsbors added S-waiting-on-author Status: This is awaiting some action (such as code changes or more information) from the author. and removed S-waiting-on-bors Status: Waiting on bors to run and complete tests. Bors will change the label on completion. labels Jun 19, 2024
@oli-obk

Copy link
Copy Markdown
ContributorAuthor

@bors r=compiler-errors

@bors

bors commented Jun 19, 2024

Copy link
Copy Markdown
Collaborator

📌 Commit ba4510e has been approved by compiler-errors

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-author Status: This is awaiting some action (such as code changes or more information) from the author. labels Jun 19, 2024
@fmeasefmease mentioned this pull request Jun 19, 2024
bors added a commit to rust-lang-ci/rust that referenced this pull request Jun 19, 2024
Rollup of 6 pull requests
Successful merges:
- rust-lang#125447 (Allow constraining opaque types during subtyping in the trait system)
- rust-lang#125766 (MCDC Coverage: instrument last boolean RHS operands from condition coverage)
- rust-lang#125880 (Remove `src/tools/rust-demangler`)
- rust-lang#126154 (StorageLive: refresh storage (instead of UB) when local is already live)
- rust-lang#126572 (override user defined channel when using precompiled rustc)
- rust-lang#126662 (Unconditionally warn on usage of `wasm32-wasi`)
r? `@ghost`
`@rustbot` modify labels: rollup
@bors
bors merged commit 25d47fe into rust-lang:masterJun 19, 2024
@rustbotrustbot added this to the 1.81.0 milestone Jun 19, 2024
@bors

bors commented Jun 19, 2024

Copy link
Copy Markdown
Collaborator

⌛ Testing commit ba4510e with merge 3186d17...

rust-timer added a commit to rust-lang-ci/rust that referenced this pull request Jun 19, 2024
Rollup merge of rust-lang#125447 - oli-obk:eq_opaque_pred, r=compiler-errors
Allow constraining opaque types during subtyping in the trait system
Previous attempt: rust-lang#123979
Sometimes we don't immediately perform subtyping, but instead register a subtyping obligation and solve that obligation when its inference variables become resolved. Unlike immediate subtyping, we currently do not allow registering hidden types for opaque types. This PR also allows that.
@fmease

fmease commented Jun 19, 2024

Copy link
Copy Markdown
Member

It's already merged, bors. What the hell?
@bors r-

Edit: We currently have three full-build pending PRs, omg.

@fmease

Copy link
Copy Markdown
Member

@bors retry r-

@borsbors added S-waiting-on-author Status: This is awaiting some action (such as code changes or more information) from the author. and removed S-waiting-on-bors Status: Waiting on bors to run and complete tests. Bors will change the label on completion. labels Jun 19, 2024
@oli-obk
oli-obk deleted the eq_opaque_pred branch June 19, 2024 13:49
tmeijn pushed a commit to tmeijn/dotfiles that referenced this pull request Sep 11, 2024
This MR contains the following updates:
| Package | Update | Change |
|---|---|---|
| [rust](https://github.com/rust-lang/rust) | minor | `1.80.1` -> `1.81.0` |
MR created with the help of [el-capitano/tools/renovate-bot](https://gitlab.com/el-capitano/tools/renovate-bot).
**Proposed changes to behavior should be submitted there as MRs.**
---
### Release Notes
<details>
<summary>rust-lang/rust (rust)</summary>
### [`v1.81.0`](https://github.com/rust-lang/rust/blob/HEAD/RELEASES.md#Version-1810-2024-09-05)
[Compare Source](rust-lang/rust@1.80.1...1.81.0)
\==========================
<a id="1.81.0-Language"></a>
## Language
- [Abort on uncaught panics in `extern "C"` functions.](rust-lang/rust#116088)
- [Fix ambiguous cases of multiple `&` in elided self lifetimes.](rust-lang/rust#117967)
- [Stabilize `#[expect]` for lints (RFC 2383),](rust-lang/rust#120924) like `#[allow]` with a warning if the lint is *not* fulfilled.
- [Change method resolution to constrain hidden types instead of rejecting method candidates.](rust-lang/rust#123962)
- [Bump `elided_lifetimes_in_associated_constant` to deny.](rust-lang/rust#124211)
- [`offset_from`: always allow pointers to point to the same address.](rust-lang/rust#124921)
- [Allow constraining opaque types during subtyping in the trait system.](rust-lang/rust#125447)
- [Allow constraining opaque types during various unsizing casts.](rust-lang/rust#125610)
- [Deny keyword lifetimes pre-expansion.](rust-lang/rust#126762)
<a id="1.81.0-Compiler"></a>
## Compiler
- [Make casts of pointers to trait objects stricter.](rust-lang/rust#120248)
- [Check alias args for well-formedness even if they have escaping bound vars.](rust-lang/rust#123737)
- [Deprecate no-op codegen option `-Cinline-threshold=...`.](rust-lang/rust#124712)
- [Re-implement a type-size based limit.](rust-lang/rust#125507)
- [Properly account for alignment in `transmute` size checks.](rust-lang/rust#125740)
- [Remove the `box_pointers` lint.](rust-lang/rust#126018)
- [Ensure the interpreter checks bool/char for validity when they are used in a cast.](rust-lang/rust#126265)
- [Improve coverage instrumentation for functions containing nested items.](rust-lang/rust#127199)
- Target changes:
- [Add Tier 3 `no_std` Xtensa targets:](rust-lang/rust#125141) `xtensa-esp32-none-elf`, `xtensa-esp32s2-none-elf`, `xtensa-esp32s3-none-elf`
- [Add Tier 3 `std` Xtensa targets:](rust-lang/rust#126380) `xtensa-esp32-espidf`, `xtensa-esp32s2-espidf`, `xtensa-esp32s3-espidf`
- [Add Tier 3 i686 Redox OS target:](rust-lang/rust#126192) `i686-unknown-redox`
- [Promote `arm64ec-pc-windows-msvc` to Tier 2.](rust-lang/rust#126039)
- [Promote `loongarch64-unknown-linux-musl` to Tier 2 with host tools.](rust-lang/rust#126298)
- [Enable full tools and profiler for LoongArch Linux targets.](rust-lang/rust#127078)
- [Unconditionally warn on usage of `wasm32-wasi`.](rust-lang/rust#126662) (see compatibility note below)
- Refer to Rust's \[platform support page]\[platform-support-doc] for more information on Rust's tiered platform support.
<a id="1.81.0-Libraries"></a>
## Libraries
- [Split core's `PanicInfo` and std's `PanicInfo`.](rust-lang/rust#115974) (see compatibility note below)
- [Generalize `{Rc,Arc}::make_mut()` to unsized types.](rust-lang/rust#116113)
- [Replace sort implementations with stable `driftsort` and unstable `ipnsort`.](rust-lang/rust#124032) All `slice::sort*` and `slice::select_nth*` methods are expected to see significant performance improvements. See the [research project](https://github.com/Voultapher/sort-research-rs) for more details.
- [Document behavior of `create_dir_all` with respect to empty paths.](rust-lang/rust#125112)
- [Fix interleaved output in the default panic hook when multiple threads panic simultaneously.](rust-lang/rust#127397)
<a id="1.81.0-Stabilized-APIs"></a>
## Stabilized APIs
- [`core::error`](https://doc.rust-lang.org/stable/core/error/index.html)
- [`hint::assert_unchecked`](https://doc.rust-lang.org/stable/core/hint/fn.assert_unchecked.html)
- [`fs::exists`](https://doc.rust-lang.org/stable/std/fs/fn.exists.html)
- [`AtomicBool::fetch_not`](https://doc.rust-lang.org/stable/core/sync/atomic/struct.AtomicBool.html#method.fetch_not)
- [`Duration::abs_diff`](https://doc.rust-lang.org/stable/core/time/struct.Duration.html#method.abs_diff)
- [`IoSlice::advance`](https://doc.rust-lang.org/stable/std/io/struct.IoSlice.html#method.advance)
- [`IoSlice::advance_slices`](https://doc.rust-lang.org/stable/std/io/struct.IoSlice.html#method.advance_slices)
- [`IoSliceMut::advance`](https://doc.rust-lang.org/stable/std/io/struct.IoSliceMut.html#method.advance)
- [`IoSliceMut::advance_slices`](https://doc.rust-lang.org/stable/std/io/struct.IoSliceMut.html#method.advance_slices)
- [`PanicHookInfo`](https://doc.rust-lang.org/stable/std/panic/struct.PanicHookInfo.html)
- [`PanicInfo::message`](https://doc.rust-lang.org/stable/core/panic/struct.PanicInfo.html#method.message)
- [`PanicMessage`](https://doc.rust-lang.org/stable/core/panic/struct.PanicMessage.html)
These APIs are now stable in const contexts:
- [`char::from_u32_unchecked`](https://doc.rust-lang.org/stable/core/char/fn.from_u32\_unchecked.html) (function)
- [`char::from_u32_unchecked`](https://doc.rust-lang.org/stable/core/primitive.char.html#method.from_u32\_unchecked) (method)
- [`CStr::count_bytes`](https://doc.rust-lang.org/stable/core/ffi/c_str/struct.CStr.html#method.count_bytes)
- [`CStr::from_ptr`](https://doc.rust-lang.org/stable/core/ffi/c_str/struct.CStr.html#method.from_ptr)
<a id="1.81.0-Cargo"></a>
## Cargo
- [Generated `.cargo_vcs_info.json` is always included, even when `--allow-dirty` is passed.](rust-lang/cargo#13960)
- [Disallow `package.license-file` and `package.readme` pointing to non-existent files during packaging.](rust-lang/cargo#13921)
- [Disallow passing `--release`/`--debug` flag along with the `--profile` flag.](rust-lang/cargo#13971)
- [Remove `lib.plugin` key support in `Cargo.toml`. Rust plugin support has been deprecated for four years and was removed in 1.75.0.](rust-lang/cargo#13902)
<a id="1.81.0-Compatibility-Notes"></a>
## Compatibility Notes
- Usage of the `wasm32-wasi` target will now issue a compiler warning and request users switch to the `wasm32-wasip1` target instead. Both targets are the same, `wasm32-wasi` is only being renamed, and this [change to the WASI target](https://blog.rust-lang.org/2024/04/09/updates-to-rusts-wasi-targets.html) is being done to enable removing `wasm32-wasi` in January 2025.
- We have renamed `std::panic::PanicInfo` to `std::panic::PanicHookInfo`. The old name will continue to work as an alias, but will result in a deprecation warning starting in Rust 1.82.0.
`core::panic::PanicInfo` will remain unchanged, however, as this is now a *different type*.
The reason is that these types have different roles: `std::panic::PanicHookInfo` is the argument to the [panic hook](https://doc.rust-lang.org/stable/std/panic/fn.set_hook.html) in std context (where panics can have an arbitrary payload), while `core::panic::PanicInfo` is the argument to the [`#[panic_handler]`](https://doc.rust-lang.org/nomicon/panic-handler.html) in no_std context (where panics always carry a formatted *message*). Separating these types allows us to add more useful methods to these types, such as `std::panic::PanicHookInfo::payload_as_str()` and `core::panic::PanicInfo::message()`.
- The new sort implementations may panic if a type's implementation of [`Ord`](https://doc.rust-lang.org/std/cmp/trait.Ord.html) (or the given comparison function) does not implement a [total order](https://en.wikipedia.org/wiki/Total_order) as the trait requires. `Ord`'s supertraits (`PartialOrd`, `Eq`, and `PartialEq`) must also be consistent. The previous implementations would not "notice" any problem, but the new implementations have a good chance of detecting inconsistencies, throwing a panic rather than returning knowingly unsorted data.
- [In very rare cases, a change in the internal evaluation order of the trait
solver may result in new fatal overflow errors.](rust-lang/rust#126128)
<a id="1.81.0-Internal-Changes"></a>
## 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.
- [Add a Rust-for Linux `auto` CI job to check kernel builds.](rust-lang/rust#125209)
</details>
---
### Configuration
📅 **Schedule**: Branch creation - At any time (no schedule defined), Automerge - At any time (no schedule defined).
🚦 **Automerge**: Disabled by config. Please merge this manually once you are satisfied.
♻ **Rebasing**: Whenever MR becomes conflicted, or you tick the rebase/retry checkbox.
🔕 **Ignore**: Close this MR and you won't be reminded about this update again.
---
- [ ] <!-- rebase-check -->If you want to rebase/retry this MR, check this box
---
This MR has been generated by [Renovate Bot](https://github.com/renovatebot/renovate).
<!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiIzNy40NDAuNyIsInVwZGF0ZWRJblZlciI6IjM3LjQ0MC43IiwidGFyZ2V0QnJhbmNoIjoibWFpbiIsImxhYmVscyI6WyJSZW5vdmF0ZSBCb3QiXX0=-->
wip-sync pushed a commit to NetBSD/pkgsrc-wip that referenced this pull request Sep 22, 2024
Pkgsrc changes:
* Adapt patches, apply to new vendored crates where needed.
* Back-port rust pull request 130110, "make dist vendoring configurable"
* Disable "dist vendoring", otherwise cargo would try to access
the network during the build phase.
Upstream changes:
Version 1.81.0 (2024-09-05)
==========================
Language
--------
- [Abort on uncaught panics in `extern "C"` functions.]
(rust-lang/rust#116088)
- [Fix ambiguous cases of multiple `&` in elided self lifetimes.]
(rust-lang/rust#117967)
- [Stabilize `#[expect]` for lints (RFC 2383),]
(rust-lang/rust#120924) like `#[allow]`
with a warning if the lint is _not_ fulfilled.
- [Change method resolution to constrain hidden types instead of
rejecting method candidates.]
(rust-lang/rust#123962)
- [Bump `elided_lifetimes_in_associated_constant` to deny.]
(rust-lang/rust#124211)
- [`offset_from`: always allow pointers to point to the same
address.] (rust-lang/rust#124921)
- [Allow constraining opaque types during subtyping in the trait
system.] (rust-lang/rust#125447)
- [Allow constraining opaque types during various unsizing casts.]
(rust-lang/rust#125610)
- [Deny keyword lifetimes pre-expansion.]
(rust-lang/rust#126762)
Compiler
--------
- [Make casts of pointers to trait objects stricter.]
(rust-lang/rust#120248)
- [Check alias args for well-formedness even if they have escaping
bound vars.] (rust-lang/rust#123737)
- [Deprecate no-op codegen option `-Cinline-threshold=...`.]
(rust-lang/rust#124712)
- [Re-implement a type-size based limit.]
(rust-lang/rust#125507)
- [Properly account for alignment in `transmute` size checks.]
(rust-lang/rust#125740)
- [Remove the `box_pointers` lint.]
(rust-lang/rust#126018)
- [Ensure the interpreter checks bool/char for validity when they
are used in a cast.] (rust-lang/rust#126265)
- [Improve coverage instrumentation for functions containing nested
items.] (rust-lang/rust#127199)
- Target changes:
- [Add Tier 3 `no_std` Xtensa targets:]
(rust-lang/rust#125141) `xtensa-esp32-none-elf`,
`xtensa-esp32s2-none-elf`, `xtensa-esp32s3-none-elf`
- [Add Tier 3 `std` Xtensa targets:]
(rust-lang/rust#126380) `xtensa-esp32-espidf`,
`xtensa-esp32s2-espidf`, `xtensa-esp32s3-espidf`
- [Add Tier 3 i686 Redox OS target:]
(rust-lang/rust#126192) `i686-unknown-redox`
- [Promote `arm64ec-pc-windows-msvc` to Tier 2.]
(rust-lang/rust#126039)
- [Promote `wasm32-wasip2` to Tier 2.]
(rust-lang/rust#126967)
- [Promote `loongarch64-unknown-linux-musl` to Tier 2 with host
tools.] (rust-lang/rust#126298)
- [Enable full tools and profiler for LoongArch Linux targets.]
(rust-lang/rust#127078)
- [Unconditionally warn on usage of `wasm32-wasi`.]
(rust-lang/rust#126662) (see compatibility
note below)
- Refer to Rust's [platform support page][platform-support-doc]
for more information on Rust's tiered platform support.
Libraries
---------
- [Split core's `PanicInfo` and std's `PanicInfo`.]
(rust-lang/rust#115974) (see compatibility
note below)
- [Generalize `{Rc,Arc}::make_mut()` to unsized types.]
(rust-lang/rust#116113)
- [Replace sort implementations with stable `driftsort` and unstable
`ipnsort`.] (rust-lang/rust#124032) All
`slice::sort*` and `slice::select_nth*` methods are expected to
see significant performance improvements. See the [research
project] (https://github.com/Voultapher/sort-research-rs) for
more details.
- [Document behavior of `create_dir_all` with respect to empty
paths.] (rust-lang/rust#125112)
- [Fix interleaved output in the default panic hook when multiple
threads panic simultaneously.]
(rust-lang/rust#127397)
- Fix `Command`'s batch files argument escaping not working when
file name has trailing whitespace or periods (CVE-2024-43402).
Stabilized APIs
---------------
- [`core::error`] (https://doc.rust-lang.org/stable/core/error/index.html)
- [`hint::assert_unchecked`]
(https://doc.rust-lang.org/stable/core/hint/fn.assert_unchecked.html)
- [`fs::exists`] (https://doc.rust-lang.org/stable/std/fs/fn.exists.html)
- [`AtomicBool::fetch_not`]
(https://doc.rust-lang.org/stable/core/sync/atomic/struct.AtomicBool.html#method.fetch_not)
- [`Duration::abs_diff`]
(https://doc.rust-lang.org/stable/core/time/struct.Duration.html#method.abs_diff)
- [`IoSlice::advance`]
(https://doc.rust-lang.org/stable/std/io/struct.IoSlice.html#method.advance)
- [`IoSlice::advance_slices`]
(https://doc.rust-lang.org/stable/std/io/struct.IoSlice.html#method.advance_slices)
- [`IoSliceMut::advance`]
(https://doc.rust-lang.org/stable/std/io/struct.IoSliceMut.html#method.advance)
- [`IoSliceMut::advance_slices`]
(https://doc.rust-lang.org/stable/std/io/struct.IoSliceMut.html#method.advance_slices)
- [`PanicHookInfo`]
(https://doc.rust-lang.org/stable/std/panic/struct.PanicHookInfo.html)
- [`PanicInfo::message`]
(https://doc.rust-lang.org/stable/core/panic/struct.PanicInfo.html#method.message)
- [`PanicMessage`]
(https://doc.rust-lang.org/stable/core/panic/struct.PanicMessage.html)
These APIs are now stable in const contexts:
- [`char::from_u32_unchecked`]
(https://doc.rust-lang.org/stable/core/char/fn.from_u32_unchecked.html)
(function)
- [`char::from_u32_unchecked`]
(https://doc.rust-lang.org/stable/core/primitive.char.html#method.from_u32_unchecked)
(method)
- [`CStr::count_bytes`]
(https://doc.rust-lang.org/stable/core/ffi/c_str/struct.CStr.html#method.count_bytes)
- [`CStr::from_ptr`]
(https://doc.rust-lang.org/stable/core/ffi/c_str/struct.CStr.html#method.from_ptr)
Cargo
-----
- [Generated `.cargo_vcs_info.json` is always included, even when
`--allow-dirty` is passed.]
(rust-lang/cargo#13960)
- [Disallow `package.license-file` and `package.readme` pointing
to non-existent files during packaging.]
(rust-lang/cargo#13921)
- [Disallow passing `--release`/`--debug` flag along with the
`--profile` flag.] (rust-lang/cargo#13971)
- [Remove `lib.plugin` key support in `Cargo.toml`. Rust plugin
support has been deprecated for four years and was removed in
1.75.0.] (rust-lang/cargo#13902)
Compatibility Notes
-------------------
* Usage of the `wasm32-wasi` target will now issue a compiler
warning and request users switch to the `wasm32-wasip1` target
instead. Both targets are the same, `wasm32-wasi` is only being
renamed, and this [change to the WASI target]
(https://blog.rust-lang.org/2024/04/09/updates-to-rusts-wasi-targets.html)
is being done to enable removing `wasm32-wasi` in January 2025.
* We have renamed `std::panic::PanicInfo` to `std::panic::PanicHookInfo`.
The old name will continue to work as an alias, but will result in
a deprecation warning starting in Rust 1.82.0.
`core::panic::PanicInfo` will remain unchanged, however, as this
is now a *different type*.
The reason is that these types have different roles:
`std::panic::PanicHookInfo` is the argument to the [panic
hook](https://doc.rust-lang.org/stable/std/panic/fn.set_hook.html)
in std context (where panics can have an arbitrary payload),
while `core::panic::PanicInfo` is the argument to the
[`#[panic_handler]`](https://doc.rust-lang.org/nomicon/panic-handler.html)
in no_std context (where panics always carry a formatted *message*).
Separating these types allows us to add more useful methods to
these types, such as `std::panic::PanicHookInfo::payload_as_str()`
and `core::panic::PanicInfo::message()`.
* The new sort implementations may panic if a type's implementation
of [`Ord`](https://doc.rust-lang.org/std/cmp/trait.Ord.html) (or
the given comparison function) does not implement a [total
order](https://en.wikipedia.org/wiki/Total_order) as the trait
requires. `Ord`'s supertraits (`PartialOrd`, `Eq`, and `PartialEq`)
must also be consistent. The previous implementations would not
"notice" any problem, but the new implementations have a good chance
of detecting inconsistencies, throwing a panic rather than returning
knowingly unsorted data.
* [In very rare cases, a change in the internal evaluation order of the trait
solver may result in new fatal overflow errors.]
(rust-lang/rust#126128)
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.
- [Add a Rust-for Linux `auto` CI job to check kernel builds.]
(rust-lang/rust#125209)
netbsd-srcmastr pushed a commit to NetBSD/pkgsrc that referenced this pull request Nov 24, 2024
Pkgsrc changes:
* Adapt patches, apply to new vendored crates where needed.
* Back-port rust pull request 130110, "make dist vendoring configurable"
* Disable "dist vendoring", otherwise cargo would try to access
the network during the build phase.
Upstream changes:
Version 1.81.0 (2024-09-05)
==========================
Language
--------
- [Abort on uncaught panics in `extern "C"` functions.]
(rust-lang/rust#116088)
- [Fix ambiguous cases of multiple `&` in elided self lifetimes.]
(rust-lang/rust#117967)
- [Stabilize `#[expect]` for lints (RFC 2383),]
(rust-lang/rust#120924) like `#[allow]`
with a warning if the lint is _not_ fulfilled.
- [Change method resolution to constrain hidden types instead of
rejecting method candidates.]
(rust-lang/rust#123962)
- [Bump `elided_lifetimes_in_associated_constant` to deny.]
(rust-lang/rust#124211)
- [`offset_from`: always allow pointers to point to the same
address.] (rust-lang/rust#124921)
- [Allow constraining opaque types during subtyping in the trait
system.] (rust-lang/rust#125447)
- [Allow constraining opaque types during various unsizing casts.]
(rust-lang/rust#125610)
- [Deny keyword lifetimes pre-expansion.]
(rust-lang/rust#126762)
Compiler
--------
- [Make casts of pointers to trait objects stricter.]
(rust-lang/rust#120248)
- [Check alias args for well-formedness even if they have escaping
bound vars.] (rust-lang/rust#123737)
- [Deprecate no-op codegen option `-Cinline-threshold=...`.]
(rust-lang/rust#124712)
- [Re-implement a type-size based limit.]
(rust-lang/rust#125507)
- [Properly account for alignment in `transmute` size checks.]
(rust-lang/rust#125740)
- [Remove the `box_pointers` lint.]
(rust-lang/rust#126018)
- [Ensure the interpreter checks bool/char for validity when they
are used in a cast.] (rust-lang/rust#126265)
- [Improve coverage instrumentation for functions containing nested
items.] (rust-lang/rust#127199)
- Target changes:
- [Add Tier 3 `no_std` Xtensa targets:]
(rust-lang/rust#125141) `xtensa-esp32-none-elf`,
`xtensa-esp32s2-none-elf`, `xtensa-esp32s3-none-elf`
- [Add Tier 3 `std` Xtensa targets:]
(rust-lang/rust#126380) `xtensa-esp32-espidf`,
`xtensa-esp32s2-espidf`, `xtensa-esp32s3-espidf`
- [Add Tier 3 i686 Redox OS target:]
(rust-lang/rust#126192) `i686-unknown-redox`
- [Promote `arm64ec-pc-windows-msvc` to Tier 2.]
(rust-lang/rust#126039)
- [Promote `wasm32-wasip2` to Tier 2.]
(rust-lang/rust#126967)
- [Promote `loongarch64-unknown-linux-musl` to Tier 2 with host
tools.] (rust-lang/rust#126298)
- [Enable full tools and profiler for LoongArch Linux targets.]
(rust-lang/rust#127078)
- [Unconditionally warn on usage of `wasm32-wasi`.]
(rust-lang/rust#126662) (see compatibility
note below)
- Refer to Rust's [platform support page][platform-support-doc]
for more information on Rust's tiered platform support.
Libraries
---------
- [Split core's `PanicInfo` and std's `PanicInfo`.]
(rust-lang/rust#115974) (see compatibility
note below)
- [Generalize `{Rc,Arc}::make_mut()` to unsized types.]
(rust-lang/rust#116113)
- [Replace sort implementations with stable `driftsort` and unstable
`ipnsort`.] (rust-lang/rust#124032) All
`slice::sort*` and `slice::select_nth*` methods are expected to
see significant performance improvements. See the [research
project] (https://github.com/Voultapher/sort-research-rs) for
more details.
- [Document behavior of `create_dir_all` with respect to empty
paths.] (rust-lang/rust#125112)
- [Fix interleaved output in the default panic hook when multiple
threads panic simultaneously.]
(rust-lang/rust#127397)
- Fix `Command`'s batch files argument escaping not working when
file name has trailing whitespace or periods (CVE-2024-43402).
Stabilized APIs
---------------
- [`core::error`] (https://doc.rust-lang.org/stable/core/error/index.html)
- [`hint::assert_unchecked`]
(https://doc.rust-lang.org/stable/core/hint/fn.assert_unchecked.html)
- [`fs::exists`] (https://doc.rust-lang.org/stable/std/fs/fn.exists.html)
- [`AtomicBool::fetch_not`]
(https://doc.rust-lang.org/stable/core/sync/atomic/struct.AtomicBool.html#method.fetch_not)
- [`Duration::abs_diff`]
(https://doc.rust-lang.org/stable/core/time/struct.Duration.html#method.abs_diff)
- [`IoSlice::advance`]
(https://doc.rust-lang.org/stable/std/io/struct.IoSlice.html#method.advance)
- [`IoSlice::advance_slices`]
(https://doc.rust-lang.org/stable/std/io/struct.IoSlice.html#method.advance_slices)
- [`IoSliceMut::advance`]
(https://doc.rust-lang.org/stable/std/io/struct.IoSliceMut.html#method.advance)
- [`IoSliceMut::advance_slices`]
(https://doc.rust-lang.org/stable/std/io/struct.IoSliceMut.html#method.advance_slices)
- [`PanicHookInfo`]
(https://doc.rust-lang.org/stable/std/panic/struct.PanicHookInfo.html)
- [`PanicInfo::message`]
(https://doc.rust-lang.org/stable/core/panic/struct.PanicInfo.html#method.message)
- [`PanicMessage`]
(https://doc.rust-lang.org/stable/core/panic/struct.PanicMessage.html)
These APIs are now stable in const contexts:
- [`char::from_u32_unchecked`]
(https://doc.rust-lang.org/stable/core/char/fn.from_u32_unchecked.html)
(function)
- [`char::from_u32_unchecked`]
(https://doc.rust-lang.org/stable/core/primitive.char.html#method.from_u32_unchecked)
(method)
- [`CStr::count_bytes`]
(https://doc.rust-lang.org/stable/core/ffi/c_str/struct.CStr.html#method.count_bytes)
- [`CStr::from_ptr`]
(https://doc.rust-lang.org/stable/core/ffi/c_str/struct.CStr.html#method.from_ptr)
Cargo
-----
- [Generated `.cargo_vcs_info.json` is always included, even when
`--allow-dirty` is passed.]
(rust-lang/cargo#13960)
- [Disallow `package.license-file` and `package.readme` pointing
to non-existent files during packaging.]
(rust-lang/cargo#13921)
- [Disallow passing `--release`/`--debug` flag along with the
`--profile` flag.] (rust-lang/cargo#13971)
- [Remove `lib.plugin` key support in `Cargo.toml`. Rust plugin
support has been deprecated for four years and was removed in
1.75.0.] (rust-lang/cargo#13902)
Compatibility Notes
-------------------
* Usage of the `wasm32-wasi` target will now issue a compiler
warning and request users switch to the `wasm32-wasip1` target
instead. Both targets are the same, `wasm32-wasi` is only being
renamed, and this [change to the WASI target]
(https://blog.rust-lang.org/2024/04/09/updates-to-rusts-wasi-targets.html)
is being done to enable removing `wasm32-wasi` in January 2025.
* We have renamed `std::panic::PanicInfo` to `std::panic::PanicHookInfo`.
The old name will continue to work as an alias, but will result in
a deprecation warning starting in Rust 1.82.0.
`core::panic::PanicInfo` will remain unchanged, however, as this
is now a *different type*.
The reason is that these types have different roles:
`std::panic::PanicHookInfo` is the argument to the [panic
hook](https://doc.rust-lang.org/stable/std/panic/fn.set_hook.html)
in std context (where panics can have an arbitrary payload),
while `core::panic::PanicInfo` is the argument to the
[`#[panic_handler]`](https://doc.rust-lang.org/nomicon/panic-handler.html)
in no_std context (where panics always carry a formatted *message*).
Separating these types allows us to add more useful methods to
these types, such as `std::panic::PanicHookInfo::payload_as_str()`
and `core::panic::PanicInfo::message()`.
* The new sort implementations may panic if a type's implementation
of [`Ord`](https://doc.rust-lang.org/std/cmp/trait.Ord.html) (or
the given comparison function) does not implement a [total
order](https://en.wikipedia.org/wiki/Total_order) as the trait
requires. `Ord`'s supertraits (`PartialOrd`, `Eq`, and `PartialEq`)
must also be consistent. The previous implementations would not
"notice" any problem, but the new implementations have a good chance
of detecting inconsistencies, throwing a panic rather than returning
knowingly unsorted data.
* [In very rare cases, a change in the internal evaluation order of the trait
solver may result in new fatal overflow errors.]
(rust-lang/rust#126128)
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.
- [Add a Rust-for Linux `auto` CI job to check kernel builds.]
(rust-lang/rust#125209)
msk pushed a commit to msk/pkgsrc that referenced this pull request May 11, 2026
Pkgsrc changes:
* Adapt patches, apply to new vendored crates where needed.
* Back-port rust pull request 130110, "make dist vendoring configurable"
* Disable "dist vendoring", otherwise cargo would try to access
the network during the build phase.
Upstream changes:
Version 1.81.0 (2024-09-05)
==========================
Language
--------
- [Abort on uncaught panics in `extern "C"` functions.]
(rust-lang/rust#116088)
- [Fix ambiguous cases of multiple `&` in elided self lifetimes.]
(rust-lang/rust#117967)
- [Stabilize `#[expect]` for lints (RFC 2383),]
(rust-lang/rust#120924) like `#[allow]`
with a warning if the lint is _not_ fulfilled.
- [Change method resolution to constrain hidden types instead of
rejecting method candidates.]
(rust-lang/rust#123962)
- [Bump `elided_lifetimes_in_associated_constant` to deny.]
(rust-lang/rust#124211)
- [`offset_from`: always allow pointers to point to the same
address.] (rust-lang/rust#124921)
- [Allow constraining opaque types during subtyping in the trait
system.] (rust-lang/rust#125447)
- [Allow constraining opaque types during various unsizing casts.]
(rust-lang/rust#125610)
- [Deny keyword lifetimes pre-expansion.]
(rust-lang/rust#126762)
Compiler
--------
- [Make casts of pointers to trait objects stricter.]
(rust-lang/rust#120248)
- [Check alias args for well-formedness even if they have escaping
bound vars.] (rust-lang/rust#123737)
- [Deprecate no-op codegen option `-Cinline-threshold=...`.]
(rust-lang/rust#124712)
- [Re-implement a type-size based limit.]
(rust-lang/rust#125507)
- [Properly account for alignment in `transmute` size checks.]
(rust-lang/rust#125740)
- [Remove the `box_pointers` lint.]
(rust-lang/rust#126018)
- [Ensure the interpreter checks bool/char for validity when they
are used in a cast.] (rust-lang/rust#126265)
- [Improve coverage instrumentation for functions containing nested
items.] (rust-lang/rust#127199)
- Target changes:
- [Add Tier 3 `no_std` Xtensa targets:]
(rust-lang/rust#125141) `xtensa-esp32-none-elf`,
`xtensa-esp32s2-none-elf`, `xtensa-esp32s3-none-elf`
- [Add Tier 3 `std` Xtensa targets:]
(rust-lang/rust#126380) `xtensa-esp32-espidf`,
`xtensa-esp32s2-espidf`, `xtensa-esp32s3-espidf`
- [Add Tier 3 i686 Redox OS target:]
(rust-lang/rust#126192) `i686-unknown-redox`
- [Promote `arm64ec-pc-windows-msvc` to Tier 2.]
(rust-lang/rust#126039)
- [Promote `wasm32-wasip2` to Tier 2.]
(rust-lang/rust#126967)
- [Promote `loongarch64-unknown-linux-musl` to Tier 2 with host
tools.] (rust-lang/rust#126298)
- [Enable full tools and profiler for LoongArch Linux targets.]
(rust-lang/rust#127078)
- [Unconditionally warn on usage of `wasm32-wasi`.]
(rust-lang/rust#126662) (see compatibility
note below)
- Refer to Rust's [platform support page][platform-support-doc]
for more information on Rust's tiered platform support.
Libraries
---------
- [Split core's `PanicInfo` and std's `PanicInfo`.]
(rust-lang/rust#115974) (see compatibility
note below)
- [Generalize `{Rc,Arc}::make_mut()` to unsized types.]
(rust-lang/rust#116113)
- [Replace sort implementations with stable `driftsort` and unstable
`ipnsort`.] (rust-lang/rust#124032) All
`slice::sort*` and `slice::select_nth*` methods are expected to
see significant performance improvements. See the [research
project] (https://github.com/Voultapher/sort-research-rs) for
more details.
- [Document behavior of `create_dir_all` with respect to empty
paths.] (rust-lang/rust#125112)
- [Fix interleaved output in the default panic hook when multiple
threads panic simultaneously.]
(rust-lang/rust#127397)
- Fix `Command`'s batch files argument escaping not working when
file name has trailing whitespace or periods (CVE-2024-43402).
Stabilized APIs
---------------
- [`core::error`] (https://doc.rust-lang.org/stable/core/error/index.html)
- [`hint::assert_unchecked`]
(https://doc.rust-lang.org/stable/core/hint/fn.assert_unchecked.html)
- [`fs::exists`] (https://doc.rust-lang.org/stable/std/fs/fn.exists.html)
- [`AtomicBool::fetch_not`]
(https://doc.rust-lang.org/stable/core/sync/atomic/struct.AtomicBool.html#method.fetch_not)
- [`Duration::abs_diff`]
(https://doc.rust-lang.org/stable/core/time/struct.Duration.html#method.abs_diff)
- [`IoSlice::advance`]
(https://doc.rust-lang.org/stable/std/io/struct.IoSlice.html#method.advance)
- [`IoSlice::advance_slices`]
(https://doc.rust-lang.org/stable/std/io/struct.IoSlice.html#method.advance_slices)
- [`IoSliceMut::advance`]
(https://doc.rust-lang.org/stable/std/io/struct.IoSliceMut.html#method.advance)
- [`IoSliceMut::advance_slices`]
(https://doc.rust-lang.org/stable/std/io/struct.IoSliceMut.html#method.advance_slices)
- [`PanicHookInfo`]
(https://doc.rust-lang.org/stable/std/panic/struct.PanicHookInfo.html)
- [`PanicInfo::message`]
(https://doc.rust-lang.org/stable/core/panic/struct.PanicInfo.html#method.message)
- [`PanicMessage`]
(https://doc.rust-lang.org/stable/core/panic/struct.PanicMessage.html)
These APIs are now stable in const contexts:
- [`char::from_u32_unchecked`]
(https://doc.rust-lang.org/stable/core/char/fn.from_u32_unchecked.html)
(function)
- [`char::from_u32_unchecked`]
(https://doc.rust-lang.org/stable/core/primitive.char.html#method.from_u32_unchecked)
(method)
- [`CStr::count_bytes`]
(https://doc.rust-lang.org/stable/core/ffi/c_str/struct.CStr.html#method.count_bytes)
- [`CStr::from_ptr`]
(https://doc.rust-lang.org/stable/core/ffi/c_str/struct.CStr.html#method.from_ptr)
Cargo
-----
- [Generated `.cargo_vcs_info.json` is always included, even when
`--allow-dirty` is passed.]
(rust-lang/cargo#13960)
- [Disallow `package.license-file` and `package.readme` pointing
to non-existent files during packaging.]
(rust-lang/cargo#13921)
- [Disallow passing `--release`/`--debug` flag along with the
`--profile` flag.] (rust-lang/cargo#13971)
- [Remove `lib.plugin` key support in `Cargo.toml`. Rust plugin
support has been deprecated for four years and was removed in
1.75.0.] (rust-lang/cargo#13902)
Compatibility Notes
-------------------
* Usage of the `wasm32-wasi` target will now issue a compiler
warning and request users switch to the `wasm32-wasip1` target
instead. Both targets are the same, `wasm32-wasi` is only being
renamed, and this [change to the WASI target]
(https://blog.rust-lang.org/2024/04/09/updates-to-rusts-wasi-targets.html)
is being done to enable removing `wasm32-wasi` in January 2025.
* We have renamed `std::panic::PanicInfo` to `std::panic::PanicHookInfo`.
The old name will continue to work as an alias, but will result in
a deprecation warning starting in Rust 1.82.0.
`core::panic::PanicInfo` will remain unchanged, however, as this
is now a *different type*.
The reason is that these types have different roles:
`std::panic::PanicHookInfo` is the argument to the [panic
hook](https://doc.rust-lang.org/stable/std/panic/fn.set_hook.html)
in std context (where panics can have an arbitrary payload),
while `core::panic::PanicInfo` is the argument to the
[`#[panic_handler]`](https://doc.rust-lang.org/nomicon/panic-handler.html)
in no_std context (where panics always carry a formatted *message*).
Separating these types allows us to add more useful methods to
these types, such as `std::panic::PanicHookInfo::payload_as_str()`
and `core::panic::PanicInfo::message()`.
* The new sort implementations may panic if a type's implementation
of [`Ord`](https://doc.rust-lang.org/std/cmp/trait.Ord.html) (or
the given comparison function) does not implement a [total
order](https://en.wikipedia.org/wiki/Total_order) as the trait
requires. `Ord`'s supertraits (`PartialOrd`, `Eq`, and `PartialEq`)
must also be consistent. The previous implementations would not
"notice" any problem, but the new implementations have a good chance
of detecting inconsistencies, throwing a panic rather than returning
knowingly unsorted data.
* [In very rare cases, a change in the internal evaluation order of the trait
solver may result in new fatal overflow errors.]
(rust-lang/rust#126128)
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.
- [Add a Rust-for Linux `auto` CI job to check kernel builds.]
(rust-lang/rust#125209)
netbsd-srcmastr pushed a commit to NetBSD/pkgsrc that referenced this pull request May 13, 2026
Pkgsrc changes:
* Adapt patches, apply to new vendored crates where needed.
* Back-port rust pull request 130110, "make dist vendoring configurable"
* Disable "dist vendoring", otherwise cargo would try to access
the network during the build phase.
Upstream changes:
Version 1.81.0 (2024-09-05)
==========================
Language
--------
- [Abort on uncaught panics in `extern "C"` functions.]
(rust-lang/rust#116088)
- [Fix ambiguous cases of multiple `&` in elided self lifetimes.]
(rust-lang/rust#117967)
- [Stabilize `#[expect]` for lints (RFC 2383),]
(rust-lang/rust#120924) like `#[allow]`
with a warning if the lint is _not_ fulfilled.
- [Change method resolution to constrain hidden types instead of
rejecting method candidates.]
(rust-lang/rust#123962)
- [Bump `elided_lifetimes_in_associated_constant` to deny.]
(rust-lang/rust#124211)
- [`offset_from`: always allow pointers to point to the same
address.] (rust-lang/rust#124921)
- [Allow constraining opaque types during subtyping in the trait
system.] (rust-lang/rust#125447)
- [Allow constraining opaque types during various unsizing casts.]
(rust-lang/rust#125610)
- [Deny keyword lifetimes pre-expansion.]
(rust-lang/rust#126762)
Compiler
--------
- [Make casts of pointers to trait objects stricter.]
(rust-lang/rust#120248)
- [Check alias args for well-formedness even if they have escaping
bound vars.] (rust-lang/rust#123737)
- [Deprecate no-op codegen option `-Cinline-threshold=...`.]
(rust-lang/rust#124712)
- [Re-implement a type-size based limit.]
(rust-lang/rust#125507)
- [Properly account for alignment in `transmute` size checks.]
(rust-lang/rust#125740)
- [Remove the `box_pointers` lint.]
(rust-lang/rust#126018)
- [Ensure the interpreter checks bool/char for validity when they
are used in a cast.] (rust-lang/rust#126265)
- [Improve coverage instrumentation for functions containing nested
items.] (rust-lang/rust#127199)
- Target changes:
- [Add Tier 3 `no_std` Xtensa targets:]
(rust-lang/rust#125141) `xtensa-esp32-none-elf`,
`xtensa-esp32s2-none-elf`, `xtensa-esp32s3-none-elf`
- [Add Tier 3 `std` Xtensa targets:]
(rust-lang/rust#126380) `xtensa-esp32-espidf`,
`xtensa-esp32s2-espidf`, `xtensa-esp32s3-espidf`
- [Add Tier 3 i686 Redox OS target:]
(rust-lang/rust#126192) `i686-unknown-redox`
- [Promote `arm64ec-pc-windows-msvc` to Tier 2.]
(rust-lang/rust#126039)
- [Promote `wasm32-wasip2` to Tier 2.]
(rust-lang/rust#126967)
- [Promote `loongarch64-unknown-linux-musl` to Tier 2 with host
tools.] (rust-lang/rust#126298)
- [Enable full tools and profiler for LoongArch Linux targets.]
(rust-lang/rust#127078)
- [Unconditionally warn on usage of `wasm32-wasi`.]
(rust-lang/rust#126662) (see compatibility
note below)
- Refer to Rust's [platform support page][platform-support-doc]
for more information on Rust's tiered platform support.
Libraries
---------
- [Split core's `PanicInfo` and std's `PanicInfo`.]
(rust-lang/rust#115974) (see compatibility
note below)
- [Generalize `{Rc,Arc}::make_mut()` to unsized types.]
(rust-lang/rust#116113)
- [Replace sort implementations with stable `driftsort` and unstable
`ipnsort`.] (rust-lang/rust#124032) All
`slice::sort*` and `slice::select_nth*` methods are expected to
see significant performance improvements. See the [research
project] (https://github.com/Voultapher/sort-research-rs) for
more details.
- [Document behavior of `create_dir_all` with respect to empty
paths.] (rust-lang/rust#125112)
- [Fix interleaved output in the default panic hook when multiple
threads panic simultaneously.]
(rust-lang/rust#127397)
- Fix `Command`'s batch files argument escaping not working when
file name has trailing whitespace or periods (CVE-2024-43402).
Stabilized APIs
---------------
- [`core::error`] (https://doc.rust-lang.org/stable/core/error/index.html)
- [`hint::assert_unchecked`]
(https://doc.rust-lang.org/stable/core/hint/fn.assert_unchecked.html)
- [`fs::exists`] (https://doc.rust-lang.org/stable/std/fs/fn.exists.html)
- [`AtomicBool::fetch_not`]
(https://doc.rust-lang.org/stable/core/sync/atomic/struct.AtomicBool.html#method.fetch_not)
- [`Duration::abs_diff`]
(https://doc.rust-lang.org/stable/core/time/struct.Duration.html#method.abs_diff)
- [`IoSlice::advance`]
(https://doc.rust-lang.org/stable/std/io/struct.IoSlice.html#method.advance)
- [`IoSlice::advance_slices`]
(https://doc.rust-lang.org/stable/std/io/struct.IoSlice.html#method.advance_slices)
- [`IoSliceMut::advance`]
(https://doc.rust-lang.org/stable/std/io/struct.IoSliceMut.html#method.advance)
- [`IoSliceMut::advance_slices`]
(https://doc.rust-lang.org/stable/std/io/struct.IoSliceMut.html#method.advance_slices)
- [`PanicHookInfo`]
(https://doc.rust-lang.org/stable/std/panic/struct.PanicHookInfo.html)
- [`PanicInfo::message`]
(https://doc.rust-lang.org/stable/core/panic/struct.PanicInfo.html#method.message)
- [`PanicMessage`]
(https://doc.rust-lang.org/stable/core/panic/struct.PanicMessage.html)
These APIs are now stable in const contexts:
- [`char::from_u32_unchecked`]
(https://doc.rust-lang.org/stable/core/char/fn.from_u32_unchecked.html)
(function)
- [`char::from_u32_unchecked`]
(https://doc.rust-lang.org/stable/core/primitive.char.html#method.from_u32_unchecked)
(method)
- [`CStr::count_bytes`]
(https://doc.rust-lang.org/stable/core/ffi/c_str/struct.CStr.html#method.count_bytes)
- [`CStr::from_ptr`]
(https://doc.rust-lang.org/stable/core/ffi/c_str/struct.CStr.html#method.from_ptr)
Cargo
-----
- [Generated `.cargo_vcs_info.json` is always included, even when
`--allow-dirty` is passed.]
(rust-lang/cargo#13960)
- [Disallow `package.license-file` and `package.readme` pointing
to non-existent files during packaging.]
(rust-lang/cargo#13921)
- [Disallow passing `--release`/`--debug` flag along with the
`--profile` flag.] (rust-lang/cargo#13971)
- [Remove `lib.plugin` key support in `Cargo.toml`. Rust plugin
support has been deprecated for four years and was removed in
1.75.0.] (rust-lang/cargo#13902)
Compatibility Notes
-------------------
* Usage of the `wasm32-wasi` target will now issue a compiler
warning and request users switch to the `wasm32-wasip1` target
instead. Both targets are the same, `wasm32-wasi` is only being
renamed, and this [change to the WASI target]
(https://blog.rust-lang.org/2024/04/09/updates-to-rusts-wasi-targets.html)
is being done to enable removing `wasm32-wasi` in January 2025.
* We have renamed `std::panic::PanicInfo` to `std::panic::PanicHookInfo`.
The old name will continue to work as an alias, but will result in
a deprecation warning starting in Rust 1.82.0.
`core::panic::PanicInfo` will remain unchanged, however, as this
is now a *different type*.
The reason is that these types have different roles:
`std::panic::PanicHookInfo` is the argument to the [panic
hook](https://doc.rust-lang.org/stable/std/panic/fn.set_hook.html)
in std context (where panics can have an arbitrary payload),
while `core::panic::PanicInfo` is the argument to the
[`#[panic_handler]`](https://doc.rust-lang.org/nomicon/panic-handler.html)
in no_std context (where panics always carry a formatted *message*).
Separating these types allows us to add more useful methods to
these types, such as `std::panic::PanicHookInfo::payload_as_str()`
and `core::panic::PanicInfo::message()`.
* The new sort implementations may panic if a type's implementation
of [`Ord`](https://doc.rust-lang.org/std/cmp/trait.Ord.html) (or
the given comparison function) does not implement a [total
order](https://en.wikipedia.org/wiki/Total_order) as the trait
requires. `Ord`'s supertraits (`PartialOrd`, `Eq`, and `PartialEq`)
must also be consistent. The previous implementations would not
"notice" any problem, but the new implementations have a good chance
of detecting inconsistencies, throwing a panic rather than returning
knowingly unsorted data.
* [In very rare cases, a change in the internal evaluation order of the trait
solver may result in new fatal overflow errors.]
(rust-lang/rust#126128)
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.
- [Add a Rust-for Linux `auto` CI job to check kernel builds.]
(rust-lang/rust#125209)
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

A-testsuiteArea: The testsuite used to check the correctness of rustcdisposition-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.S-waiting-on-authorStatus: This is awaiting some action (such as code changes or more information) from the author.T-typesRelevant to the types team, which will review and decide on the PR/issue.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

11 participants

@oli-obk@rust-log-analyzer@rustbot@compiler-errors@lcnr@bors@rfcbot@nikomatsakis@jieyouxu@fmease@apiraino