Allow constraining opaque types during subtyping in the trait system by oli-obk · Pull Request #125447 · rust-lang/rust (original) (raw)
Conversation
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.Learn more about bidirectional Unicode characters
[ Show hidden characters]({{ revealButtonHref }})
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.
rustbot added S-waiting-on-review
Status: Awaiting review from the assignee but also interested parties.
Relevant to the compiler team, which will review and decide on the PR/issue.
labels
This comment has been minimized.
rustbot added A-testsuite
Area: The testsuite used to check the correctness of rustc
Relevant to the bootstrap subteam: Rust's build system (x.py and src/bootstrap)
labels
This comment was marked as resolved.
This comment has been minimized.
This comment was marked as resolved.
This comment was marked as resolved.
This comment was marked as resolved.
This comment was marked as resolved.
A minimized test:
fn foo() -> impl Default {
let x = Default::default();
// add Subtype(?x, ?y)
obligation
let 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
}
fn main() {}
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.
This comment was marked as resolved.
This comment was marked as resolved.
oli-obk changed the title
Remove assertion now that we have a test covering the code path Allow constraining opaque types during subtyping in the trait system
This comment was marked as resolved.
This comment was marked as resolved.
rustbot added the S-waiting-on-author
Status: This is awaiting some action (such as code changes or more information) from the author.
label
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.
Relevant to the bootstrap subteam: Rust's build system (x.py and src/bootstrap)
labels
📌 Commit 1e9cd07 has been approved by compiler-errors
It is now in the queue for this repository.
bors added S-waiting-on-bors
Status: Waiting on bors to run and complete tests. Bors will change the label on completion.
and removed S-waiting-on-review
Status: Awaiting review from the assignee but also interested parties.
labels
jieyouxu added a commit to jieyouxu/rust that referenced this pull request
…-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.
bors 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
📌 Commit ba4510e has been approved by compiler-errors
It is now in the queue for this repository.
bors added S-waiting-on-bors
Status: Waiting on bors to run and complete tests. Bors will change the label on completion.
and removed S-waiting-on-author
Status: This is awaiting some action (such as code changes or more information) from the author.
labels
bors added a commit to rust-lang-ci/rust that referenced this pull request
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
rust-timer added a commit to rust-lang-ci/rust that referenced this pull request
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.
It's already merged, bors. What the hell?
@bors r-
Edit: We currently have three full-build pending PRs, omg.
bors 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
tmeijn pushed a commit to tmeijn/dotfiles that referenced this pull request
This MR contains the following updates:
Package | Update | Change |
---|---|---|
rust | minor | 1.80.1 -> 1.81.0 |
MR created with the help of el-capitano/tools/renovate-bot.
Proposed changes to behavior should be submitted there as MRs.
Release Notes
rust-lang/rust (rust)
v1.81.0
==========================
Language
- Abort on uncaught panics in
extern "C"
functions. - Fix ambiguous cases of multiple
&
in elided self lifetimes. - Stabilize
#[expect]
for lints (RFC 2383), like#[allow]
with a warning if the lint is not fulfilled. - Change method resolution to constrain hidden types instead of rejecting method candidates.
- Bump
elided_lifetimes_in_associated_constant
to deny. offset_from
: always allow pointers to point to the same address.- Allow constraining opaque types during subtyping in the trait system.
- Allow constraining opaque types during various unsizing casts.
- Deny keyword lifetimes pre-expansion.
Compiler
- Make casts of pointers to trait objects stricter.
- Check alias args for well-formedness even if they have escaping bound vars.
- Deprecate no-op codegen option
-Cinline-threshold=...
. - Re-implement a type-size based limit.
- Properly account for alignment in
transmute
size checks. - Remove the
box_pointers
lint. - Ensure the interpreter checks bool/char for validity when they are used in a cast.
- Improve coverage instrumentation for functions containing nested items.
- Target changes:
- Add Tier 3
no_std
Xtensa targets:xtensa-esp32-none-elf
,xtensa-esp32s2-none-elf
,xtensa-esp32s3-none-elf
- Add Tier 3
std
Xtensa targets:xtensa-esp32-espidf
,xtensa-esp32s2-espidf
,xtensa-esp32s3-espidf
- Add Tier 3 i686 Redox OS target:
i686-unknown-redox
- Promote
arm64ec-pc-windows-msvc
to Tier 2. - Promote
loongarch64-unknown-linux-musl
to Tier 2 with host tools. - Enable full tools and profiler for LoongArch Linux targets.
- Unconditionally warn on usage of
wasm32-wasi
. (see compatibility note below) - Refer to Rust's [platform support page][platform-support-doc] for more information on Rust's tiered platform support.
- Add Tier 3
Libraries
- Split core's
PanicInfo
and std'sPanicInfo
. (see compatibility note below) - Generalize
{Rc,Arc}::make_mut()
to unsized types. - Replace sort implementations with stable
driftsort
and unstableipnsort
. Allslice::sort*
andslice::select_nth*
methods are expected to see significant performance improvements. See the research project for more details. - Document behavior of
create_dir_all
with respect to empty paths. - Fix interleaved output in the default panic hook when multiple threads panic simultaneously.
Stabilized APIs
core::error
hint::assert_unchecked
fs::exists
AtomicBool::fetch_not
Duration::abs_diff
IoSlice::advance
IoSlice::advance_slices
IoSliceMut::advance
IoSliceMut::advance_slices
PanicHookInfo
PanicInfo::message
PanicMessage
These APIs are now stable in const contexts:
char::from_u32_unchecked
(function)char::from_u32_unchecked
(method)CStr::count_bytes
CStr::from_ptr
Cargo
- Generated
.cargo_vcs_info.json
is always included, even when--allow-dirty
is passed. - Disallow
package.license-file
andpackage.readme
pointing to non-existent files during packaging. - Disallow passing
--release
/--debug
flag along with the--profile
flag. - Remove
lib.plugin
key support inCargo.toml
. Rust plugin support has been deprecated for four years and was removed in 1.75.0.
Compatibility Notes
Usage of the
wasm32-wasi
target will now issue a compiler warning and request users switch to thewasm32-wasip1
target instead. Both targets are the same,wasm32-wasi
is only being renamed, and this change to the WASI target is being done to enable removingwasm32-wasi
in January 2025.We have renamed
std::panic::PanicInfo
tostd::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 in std context (where panics can have an arbitrary payload), whilecore::panic::PanicInfo
is the argument to the#[panic_handler]
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 asstd::panic::PanicHookInfo::payload_as_str()
andcore::panic::PanicInfo::message()
.The new sort implementations may panic if a type's implementation of
Ord
(or the given comparison function) does not implement a total order as the trait requires.Ord
's supertraits (PartialOrd
,Eq
, andPartialEq
) 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.
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.
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.
- If you want to rebase/retry this MR, check this box
This MR has been generated by Renovate Bot.
wip-sync pushed a commit to NetBSD/pkgsrc-wip that referenced this pull request
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.
- [Add Tier 3
Libraries
- [Split core's
PanicInfo
and std'sPanicInfo
.] (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 unstableipnsort
.] (rust-lang/rust#124032) Allslice::sort*
andslice::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
andpackage.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 inCargo.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 thewasm32-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 removingwasm32-wasi
in January 2025.We have renamed
std::panic::PanicInfo
tostd::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 in std context (where panics can have an arbitrary payload), whilecore::panic::PanicInfo
is the argument to the#[panic_handler]
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 asstd::panic::PanicHookInfo::payload_as_str()
andcore::panic::PanicInfo::message()
.The new sort implementations may panic if a type's implementation of
Ord
(or the given comparison function) does not implement a total order as the trait requires.Ord
's supertraits (PartialOrd
,Eq
, andPartialEq
) 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
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.
- [Add Tier 3
Libraries
- [Split core's
PanicInfo
and std'sPanicInfo
.] (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 unstableipnsort
.] (rust-lang/rust#124032) Allslice::sort*
andslice::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
andpackage.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 inCargo.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 thewasm32-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 removingwasm32-wasi
in January 2025.We have renamed
std::panic::PanicInfo
tostd::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 in std context (where panics can have an arbitrary payload), whilecore::panic::PanicInfo
is the argument to the#[panic_handler]
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 asstd::panic::PanicHookInfo::payload_as_str()
andcore::panic::PanicInfo::message()
.The new sort implementations may panic if a type's implementation of
Ord
(or the given comparison function) does not implement a total order as the trait requires.Ord
's supertraits (PartialOrd
,Eq
, andPartialEq
) 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)
Labels
Area: The testsuite used to check the correctness of rustc
This issue / PR is in PFCP or FCP with a disposition to merge it.
The final comment period is finished for this PR / Issue.
Status: This is awaiting some action (such as code changes or more information) from the author.
Relevant to the types team, which will review and decide on the PR/issue.