Skip to content
New issue

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

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

Already on GitHub? Sign in to your account

Deny keyword lifetimes pre-expansion #126762

Merged
merged 1 commit into from
Jul 17, 2024
Merged

Conversation

compiler-errors
Copy link
Member

#126452 (comment)

Secondly, we confirmed that we're OK with moving the validation of keywords in lifetimes to pre-expansion from post-expansion. We similarly consider this a bug fix. While the breakage of the convenience feature of the with_locals crate that relies on this is unfortunate, and we wish we had not overlooked this earlier for that reason, we're fortunate that the breakage is contained to only one crate, and we're going to accept this breakage as the extra complexity we'd need to carry in the compiler to work around this isn't deemed worth it.

T-lang considers it to be a bugfix to deny 'keyword lifetimes in the parser, rather than during AST validation that only happens post-expansion. This has one breakage: #126452 (comment)

This probably should get lang FCP'd just for consistency.

@compiler-errors compiler-errors added the T-lang Relevant to the language team, which will review and decide on the PR/issue. label Jun 20, 2024
@rustbot
Copy link
Collaborator

rustbot commented Jun 20, 2024

r? @BoxyUwU

rustbot has assigned @BoxyUwU.
They will have a look at your PR within the next two weeks and either review your PR or reassign to another reviewer.

Use r? to explicitly pick a reviewer

@rustbot rustbot added the S-waiting-on-review Status: Awaiting review from the assignee but also interested parties. label Jun 20, 2024
@compiler-errors
Copy link
Member Author

r? compiler

@rustbot rustbot added the T-compiler Relevant to the compiler team, which will review and decide on the PR/issue. label Jun 24, 2024
@rustbot rustbot assigned michaelwoerister and unassigned BoxyUwU Jun 24, 2024
@BoxyUwU
Copy link
Member

BoxyUwU commented Jun 24, 2024

(was this not blocked on a Lang fcp?)

@compiler-errors
Copy link
Member Author

Ya, it does need an FCP. I just thought @BoxyUwU was busy travelling anyways. If you'd like to review it, feel free to claim it back :)

@compiler-errors compiler-errors added needs-fcp This change is insta-stable, so needs a completed FCP to proceed. and removed T-compiler Relevant to the compiler team, which will review and decide on the PR/issue. labels Jun 25, 2024
@joshtriplett
Copy link
Member

@rfcbot merge

@rfcbot
Copy link

rfcbot commented Jun 25, 2024

Team member @joshtriplett 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!

cc @rust-lang/lang-advisors: FCP proposed for lang, please feel free to register concerns.
See this document for info about what commands tagged team members can give me.

@rfcbot rfcbot 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 Jun 25, 2024
@traviscross traviscross added the I-lang-nominated Nominated for discussion during a lang team meeting. label Jun 25, 2024
@nikomatsakis
Copy link
Contributor

@rfcbot reviewed

@rfcbot rfcbot 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 Jun 26, 2024
@rfcbot
Copy link

rfcbot commented Jun 26, 2024

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

@traviscross
Copy link
Contributor

@rustbot labels -I-lang-nominated

We discussed this in the lang call today, and as we had recently decided to do this, it's now in FCP.

@rustbot rustbot removed the I-lang-nominated Nominated for discussion during a lang team meeting. label Jun 26, 2024
@rfcbot rfcbot added finished-final-comment-period The final comment period is finished for this PR / Issue. and removed final-comment-period In the final comment period and will be merged soon unless new substantive objections are raised. labels Jul 6, 2024
@rfcbot
Copy link

rfcbot commented Jul 6, 2024

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.

@rfcbot rfcbot added the to-announce Announce this issue on triage meeting label Jul 6, 2024
@apiraino apiraino removed the to-announce Announce this issue on triage meeting label Jul 11, 2024
@traviscross
Copy link
Contributor

@michaelwoerister: Heads-up that FCP completed, so this is OK to proceed as far as lang is concerned.

@michaelwoerister
Copy link
Member

Thanks, @traviscross! I'll take a closer look shortly.

@bors
Copy link
Contributor

bors commented Jul 15, 2024

☔ The latest upstream changes (presumably #127777) made this pull request unmergeable. Please resolve the merge conflicts.

Copy link
Member

@michaelwoerister michaelwoerister left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Looks good to me, thanks @compiler-errors!


f<'_>();
//~^ comparison operators cannot be chained
//~| HELP use `::<...>` instead of `<...>` to specify lifetime, type, or const arguments
//~| ERROR expected
//~| HELP add `'` to close the char literal
//~| ERROR invalid label name
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I find it slightly unexpected that the error is about labels instead of about lifetimes. I guess this is because it is not even trying to parse this as a path at this point.

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Yes, this is being parsed as "f is less than..."

@michaelwoerister
Copy link
Member

r=me after rebasing

@compiler-errors
Copy link
Member Author

@bors r=michaelwoerister

@bors
Copy link
Contributor

bors commented Jul 16, 2024

📌 Commit d0a1851 has been approved by michaelwoerister

It is now in the queue for this repository.

@bors bors added S-waiting-on-bors Status: Waiting on bors to run and complete tests. Bors will change the label on completion. and removed S-waiting-on-review Status: Awaiting review from the assignee but also interested parties. labels Jul 16, 2024
@ehuss
Copy link
Contributor

ehuss commented Jul 16, 2024

I was confused by this, since something didn't seem right. This was changed via #46497, which looks like it went without consulting the lang team at the time.

@ehuss
Copy link
Contributor

ehuss commented Jul 16, 2024

I just want to also note that from what I can tell this does not affect the lifetime macro_rules fragment matcher, which has always allowed keywords (which seems fine to me).

bors added a commit to rust-lang-ci/rust that referenced this pull request Jul 16, 2024
Rollup of 7 pull requests

Successful merges:

 - rust-lang#124033 (Sync ar_archive_writer to LLVM 18.1.3)
 - rust-lang#126699 (Delegation: support coercion for target expression)
 - rust-lang#126762 (Deny keyword lifetimes pre-expansion)
 - rust-lang#126967 (Promote the `wasm32-wasip2` target to Tier 2)
 - rust-lang#127390 (Migrate `raw-dylib-inline-cross-dylib` and `raw-dylib-custom-dlltool` `run-make` tests to rmake)
 - rust-lang#127501 (Invert infer `error_reporting` mod struture)
 - rust-lang#127816 (Update method name to reflect changes to its internals)

r? `@ghost`
`@rustbot` modify labels: rollup
@bors bors merged commit 9833e21 into rust-lang:master Jul 17, 2024
6 checks passed
@rustbot rustbot added this to the 1.81.0 milestone Jul 17, 2024
rust-timer added a commit to rust-lang-ci/rust that referenced this pull request Jul 17, 2024
Rollup merge of rust-lang#126762 - compiler-errors:kw-lt, r=michaelwoerister

Deny keyword lifetimes pre-expansion

rust-lang#126452 (comment)

> Secondly, we confirmed that we're OK with moving the validation of keywords in lifetimes to pre-expansion from post-expansion. We similarly consider this a bug fix. While the breakage of the convenience feature of the with_locals crate that relies on this is unfortunate, and we wish we had not overlooked this earlier for that reason, we're fortunate that the breakage is contained to only one crate, and we're going to accept this breakage as the extra complexity we'd need to carry in the compiler to work around this isn't deemed worth it.

T-lang considers it to be a bugfix to deny `'keyword` lifetimes in the parser, rather than during AST validation that only happens post-expansion. This has one breakage: rust-lang#126452 (comment)

This probably should get lang FCP'd just for consistency.
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)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
disposition-merge This issue / PR is in PFCP or FCP with a disposition to merge it. finished-final-comment-period The final comment period is finished for this PR / Issue. needs-fcp This change is insta-stable, so needs a completed FCP to proceed. S-waiting-on-bors Status: Waiting on bors to run and complete tests. Bors will change the label on completion. T-lang Relevant to the language team, which will review and decide on the PR/issue.
Projects
None yet
Development

Successfully merging this pull request may close these issues.