Skip to content

Check arguments of attributes where no arguments are expected - #155193

Merged
rust-bors[bot] merged 14 commits into
rust-lang:mainfrom
JonathanBrouwer:args_used_check
Jun 2, 2026
Merged

Check arguments of attributes where no arguments are expected#155193
rust-bors[bot] merged 14 commits into
rust-lang:mainfrom
JonathanBrouwer:args_used_check

Conversation

@JonathanBrouwer

@JonathanBrouwer JonathanBrouwer commented Apr 12, 2026

Copy link
Copy Markdown
Member

View all comments

This PR does the following:

  • Add a debug assertion to rustc_attr_parsing, to ensure we never forget to check the arguments of a meta item again
  • Removes the unused #[derive(Clone)] from ArgParser as that would break this debug assertion
  • [BREAKING] Properly check that #[inline(always(...))] gets no arguments
  • [BREAKING] Properly check that #[instruction_set(arm::a32(...))] gets no arguments
  • [BREAKING] Properly check that #[macro_export(local_inner_macros(...))] gets no arguments.
    Fixes Invalid value accepted for #[macro_export(local_inner_macros)] #154977
  • [BREAKING] Properly check that #[used(compiler(...))] gets no arguments.
  • Properly check that #[optimize(size(...))] gets no arguments.
  • Properly check that #[coverage(on(...))] gets no arguments.
  • Properly check that #[rustc_dump_layout(debug(...))] gets no arguments.
  • Properly check that #[rustc_abi(debug(...))] gets no arguments.
  • Properly check that #![test_runner(arg(...))] gets no arguments.
  • Properly check that #[rustc_must_implement_one_of(arg(...))] gets no arguments.
  • Properly check that #[allow_internal_unstable(arg(...))] gets no arguments.
  • Properly check that #[unstable_feature_bound(arg(...))] gets no arguments.
  • Properly check that #[rustc_allow_const_fn_unstable(arg(...))] gets no arguments.
  • Properly check that #[rustc_if_this_changed(arg(...))] gets no arguments.
  • Properly check that #[rustc_then_this_would_need(arg(...))] gets no arguments.

r? @jdonszelmann

@rustbot

rustbot commented Apr 12, 2026

Copy link
Copy Markdown
Collaborator

⚠️ #[rustc_allow_const_fn_unstable] needs careful audit to avoid accidentally exposing unstable
implementation details on stable.

cc @rust-lang/wg-const-eval

Some changes occurred in compiler/rustc_attr_parsing

cc @jdonszelmann

@rustbot rustbot added A-attributes Area: Attributes (`#[…]`, `#![…]`) 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 Apr 12, 2026
@JonathanBrouwer

Copy link
Copy Markdown
Member Author

@bors try

@rust-bors

This comment has been minimized.

rust-bors Bot pushed a commit that referenced this pull request Apr 12, 2026
Check arguments of attributes where no arguments are expected
@JonathanBrouwer JonathanBrouwer added S-blocked Status: Blocked on something else such as an RFC or other implementation work. needs-crater This change needs a crater run to check for possible breakage in the ecosystem. labels Apr 12, 2026
@rust-log-analyzer

This comment has been minimized.

@JonathanBrouwer
JonathanBrouwer force-pushed the args_used_check branch 2 times, most recently from 3231b2a to 15b2265 Compare April 12, 2026 11:18
@JonathanBrouwer

Copy link
Copy Markdown
Member Author

@bors try cancel
@bors try

@rust-bors

rust-bors Bot commented Apr 12, 2026

Copy link
Copy Markdown
Contributor

Try build cancelled. Cancelled workflows:

rust-bors Bot pushed a commit that referenced this pull request Apr 12, 2026
Check arguments of attributes where no arguments are expected
@rust-bors

This comment has been minimized.

@rust-bors

rust-bors Bot commented Apr 12, 2026

Copy link
Copy Markdown
Contributor

☀️ Try build successful (CI)
Build commit: b98202a (b98202ad067d72e45cec8be3d5c15d86ef0fd086, parent: 540f43a224317d894a9a0710a8d67704f179a33c)

@JonathanBrouwer

Copy link
Copy Markdown
Member Author

@craterbot check

@craterbot

Copy link
Copy Markdown
Collaborator

👌 Experiment pr-155193 created and queued.
🤖 Automatically detected try build b98202a
🔍 You can check out the queue and this experiment's details.

ℹ️ Crater is a tool to run experiments across parts of the Rust ecosystem. Learn more

@craterbot craterbot added S-waiting-on-crater Status: Waiting on a crater run to be completed. and removed S-waiting-on-review Status: Awaiting review from the assignee but also interested parties. S-blocked Status: Blocked on something else such as an RFC or other implementation work. labels Apr 12, 2026
Comment thread compiler/rustc_attr_parsing/src/interface.rs Outdated
@rust-bors

This comment has been minimized.

@rustbot

This comment has been minimized.

@rust-bors

This comment has been minimized.

@rustbot

rustbot commented May 31, 2026

Copy link
Copy Markdown
Collaborator

This PR was rebased onto a different main commit. Here's a range-diff highlighting what actually changed.

Rebasing is a normal part of keeping PRs up to date, so no action is needed—this note is just to help reviewers.

@jdonszelmann

Copy link
Copy Markdown
Contributor

I think this is good to go! Did a final check :)

@bors r+

@rust-bors

rust-bors Bot commented Jun 1, 2026

Copy link
Copy Markdown
Contributor

📌 Commit 3fcbca4 has been approved by jdonszelmann

It is now in the queue for this repository.

@rust-bors rust-bors Bot 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 1, 2026
JonathanBrouwer added a commit to JonathanBrouwer/rust that referenced this pull request Jun 1, 2026
…=jdonszelmann

Check arguments of attributes where no arguments are expected

This PR does the following:
- Add a debug assertion to `rustc_attr_parsing`, to ensure we never forget to check the arguments of a meta item again
- Removes the unused `#[derive(Clone)]` from `ArgParser` as that would break this debug assertion
- **[BREAKING]** Properly check that `#[inline(always(...))]` gets no arguments
- **[BREAKING]** Properly check that `#[instruction_set(arm::a32(...))]` gets no arguments
- **[BREAKING]** Properly check that `#[macro_export(local_inner_macros(...))]` gets no arguments.
  Fixes rust-lang#154977
- **[BREAKING]** Properly check that `#[used(compiler(...))]` gets no arguments.
- Properly check that `#[optimize(size(...))]` gets no arguments.
- Properly check that `#[coverage(on(...))]` gets no arguments.
- Properly check that `#[rustc_dump_layout(debug(...))]` gets no arguments.
- Properly check that `#[rustc_abi(debug(...))]` gets no arguments.
- Properly check that `#![test_runner(arg(...))]` gets no arguments.
- Properly check that `#[rustc_must_implement_one_of(arg(...))]` gets no arguments.
- Properly check that `#[allow_internal_unstable(arg(...))]` gets no arguments.
- Properly check that `#[unstable_feature_bound(arg(...))]` gets no arguments.
- Properly check that `#[rustc_allow_const_fn_unstable(arg(...))]` gets no arguments.
- Properly check that `#[rustc_if_this_changed(arg(...))]` gets no arguments.
- Properly check that `#[rustc_then_this_would_need(arg(...))]` gets no arguments.

r? @jdonszelmann
JonathanBrouwer added a commit to JonathanBrouwer/rust that referenced this pull request Jun 1, 2026
…=jdonszelmann

Check arguments of attributes where no arguments are expected

This PR does the following:
- Add a debug assertion to `rustc_attr_parsing`, to ensure we never forget to check the arguments of a meta item again
- Removes the unused `#[derive(Clone)]` from `ArgParser` as that would break this debug assertion
- **[BREAKING]** Properly check that `#[inline(always(...))]` gets no arguments
- **[BREAKING]** Properly check that `#[instruction_set(arm::a32(...))]` gets no arguments
- **[BREAKING]** Properly check that `#[macro_export(local_inner_macros(...))]` gets no arguments.
  Fixes rust-lang#154977
- **[BREAKING]** Properly check that `#[used(compiler(...))]` gets no arguments.
- Properly check that `#[optimize(size(...))]` gets no arguments.
- Properly check that `#[coverage(on(...))]` gets no arguments.
- Properly check that `#[rustc_dump_layout(debug(...))]` gets no arguments.
- Properly check that `#[rustc_abi(debug(...))]` gets no arguments.
- Properly check that `#![test_runner(arg(...))]` gets no arguments.
- Properly check that `#[rustc_must_implement_one_of(arg(...))]` gets no arguments.
- Properly check that `#[allow_internal_unstable(arg(...))]` gets no arguments.
- Properly check that `#[unstable_feature_bound(arg(...))]` gets no arguments.
- Properly check that `#[rustc_allow_const_fn_unstable(arg(...))]` gets no arguments.
- Properly check that `#[rustc_if_this_changed(arg(...))]` gets no arguments.
- Properly check that `#[rustc_then_this_would_need(arg(...))]` gets no arguments.

r? @jdonszelmann
JonathanBrouwer added a commit to JonathanBrouwer/rust that referenced this pull request Jun 1, 2026
…=jdonszelmann

Check arguments of attributes where no arguments are expected

This PR does the following:
- Add a debug assertion to `rustc_attr_parsing`, to ensure we never forget to check the arguments of a meta item again
- Removes the unused `#[derive(Clone)]` from `ArgParser` as that would break this debug assertion
- **[BREAKING]** Properly check that `#[inline(always(...))]` gets no arguments
- **[BREAKING]** Properly check that `#[instruction_set(arm::a32(...))]` gets no arguments
- **[BREAKING]** Properly check that `#[macro_export(local_inner_macros(...))]` gets no arguments.
  Fixes rust-lang#154977
- **[BREAKING]** Properly check that `#[used(compiler(...))]` gets no arguments.
- Properly check that `#[optimize(size(...))]` gets no arguments.
- Properly check that `#[coverage(on(...))]` gets no arguments.
- Properly check that `#[rustc_dump_layout(debug(...))]` gets no arguments.
- Properly check that `#[rustc_abi(debug(...))]` gets no arguments.
- Properly check that `#![test_runner(arg(...))]` gets no arguments.
- Properly check that `#[rustc_must_implement_one_of(arg(...))]` gets no arguments.
- Properly check that `#[allow_internal_unstable(arg(...))]` gets no arguments.
- Properly check that `#[unstable_feature_bound(arg(...))]` gets no arguments.
- Properly check that `#[rustc_allow_const_fn_unstable(arg(...))]` gets no arguments.
- Properly check that `#[rustc_if_this_changed(arg(...))]` gets no arguments.
- Properly check that `#[rustc_then_this_would_need(arg(...))]` gets no arguments.

r? @jdonszelmann
@traviscross traviscross added the waived-reference-pr This language change does not need a Reference PR. label Jun 1, 2026
rust-bors Bot pushed a commit that referenced this pull request Jun 1, 2026
…uwer

Rollup of 13 pull requests

Successful merges:

 - #156085 (miri: require (almost) all 1-ZST arguments to be actually passed)
 - #155193 (Check arguments of attributes where no arguments are expected)
 - #156516 (nix: remove some unneeded variables)
 - #156562 (Resolving Windows environment test failures)
 - #156588 (Don't drop uninit memory when `MapWindows::clone` panics)
 - #156673 (Privacy: small cleanups)
 - #156817 (Add `#[unsafe_eii]` to unsafe EII UI tests)
 - #156924 (Use #[panic_handler] rather than #[lang = "panic_impl"])
 - #157055 (LLVM 23: Run AssignGUIDPass in some places)
 - #157108 (Add Xtensa va_arg assembly coverage)
 - #157220 (cg_ssa: a bit less `immediate_or_packed_pair`)
 - #157241 (Trace `?id.local_def_index` instead of `id` in `def_path_hash`)
 - #157242 (Tune backport Zulip messages)
rust-bors Bot pushed a commit that referenced this pull request Jun 1, 2026
…uwer

Rollup of 13 pull requests

Successful merges:

 - #156085 (miri: require (almost) all 1-ZST arguments to be actually passed)
 - #155193 (Check arguments of attributes where no arguments are expected)
 - #156516 (nix: remove some unneeded variables)
 - #156562 (Resolving Windows environment test failures)
 - #156588 (Don't drop uninit memory when `MapWindows::clone` panics)
 - #156673 (Privacy: small cleanups)
 - #156817 (Add `#[unsafe_eii]` to unsafe EII UI tests)
 - #156924 (Use #[panic_handler] rather than #[lang = "panic_impl"])
 - #157055 (LLVM 23: Run AssignGUIDPass in some places)
 - #157108 (Add Xtensa va_arg assembly coverage)
 - #157220 (cg_ssa: a bit less `immediate_or_packed_pair`)
 - #157241 (Trace `?id.local_def_index` instead of `id` in `def_path_hash`)
 - #157242 (Tune backport Zulip messages)
rust-bors Bot pushed a commit that referenced this pull request Jun 1, 2026
…uwer

Rollup of 13 pull requests

Successful merges:

 - #156085 (miri: require (almost) all 1-ZST arguments to be actually passed)
 - #155193 (Check arguments of attributes where no arguments are expected)
 - #156516 (nix: remove some unneeded variables)
 - #156562 (Resolving Windows environment test failures)
 - #156588 (Don't drop uninit memory when `MapWindows::clone` panics)
 - #156673 (Privacy: small cleanups)
 - #156817 (Add `#[unsafe_eii]` to unsafe EII UI tests)
 - #156924 (Use #[panic_handler] rather than #[lang = "panic_impl"])
 - #157055 (LLVM 23: Run AssignGUIDPass in some places)
 - #157108 (Add Xtensa va_arg assembly coverage)
 - #157220 (cg_ssa: a bit less `immediate_or_packed_pair`)
 - #157241 (Trace `?id.local_def_index` instead of `id` in `def_path_hash`)
 - #157242 (Tune backport Zulip messages)
@rust-bors
rust-bors Bot merged commit bdb51ea into rust-lang:main Jun 2, 2026
12 checks passed
@rustbot rustbot added this to the 1.98.0 milestone Jun 2, 2026
rust-timer added a commit that referenced this pull request Jun 2, 2026
Rollup merge of #155193 - JonathanBrouwer:args_used_check, r=jdonszelmann

Check arguments of attributes where no arguments are expected

This PR does the following:
- Add a debug assertion to `rustc_attr_parsing`, to ensure we never forget to check the arguments of a meta item again
- Removes the unused `#[derive(Clone)]` from `ArgParser` as that would break this debug assertion
- **[BREAKING]** Properly check that `#[inline(always(...))]` gets no arguments
- **[BREAKING]** Properly check that `#[instruction_set(arm::a32(...))]` gets no arguments
- **[BREAKING]** Properly check that `#[macro_export(local_inner_macros(...))]` gets no arguments.
  Fixes #154977
- **[BREAKING]** Properly check that `#[used(compiler(...))]` gets no arguments.
- Properly check that `#[optimize(size(...))]` gets no arguments.
- Properly check that `#[coverage(on(...))]` gets no arguments.
- Properly check that `#[rustc_dump_layout(debug(...))]` gets no arguments.
- Properly check that `#[rustc_abi(debug(...))]` gets no arguments.
- Properly check that `#![test_runner(arg(...))]` gets no arguments.
- Properly check that `#[rustc_must_implement_one_of(arg(...))]` gets no arguments.
- Properly check that `#[allow_internal_unstable(arg(...))]` gets no arguments.
- Properly check that `#[unstable_feature_bound(arg(...))]` gets no arguments.
- Properly check that `#[rustc_allow_const_fn_unstable(arg(...))]` gets no arguments.
- Properly check that `#[rustc_if_this_changed(arg(...))]` gets no arguments.
- Properly check that `#[rustc_then_this_would_need(arg(...))]` gets no arguments.

r? @jdonszelmann
pull Bot pushed a commit to xtqqczze/rust-lang-miri that referenced this pull request Jun 2, 2026
…uwer

Rollup of 13 pull requests

Successful merges:

 - rust-lang/rust#156085 (miri: require (almost) all 1-ZST arguments to be actually passed)
 - rust-lang/rust#155193 (Check arguments of attributes where no arguments are expected)
 - rust-lang/rust#156516 (nix: remove some unneeded variables)
 - rust-lang/rust#156562 (Resolving Windows environment test failures)
 - rust-lang/rust#156588 (Don't drop uninit memory when `MapWindows::clone` panics)
 - rust-lang/rust#156673 (Privacy: small cleanups)
 - rust-lang/rust#156817 (Add `#[unsafe_eii]` to unsafe EII UI tests)
 - rust-lang/rust#156924 (Use #[panic_handler] rather than #[lang = "panic_impl"])
 - rust-lang/rust#157055 (LLVM 23: Run AssignGUIDPass in some places)
 - rust-lang/rust#157108 (Add Xtensa va_arg assembly coverage)
 - rust-lang/rust#157220 (cg_ssa: a bit less `immediate_or_packed_pair`)
 - rust-lang/rust#157241 (Trace `?id.local_def_index` instead of `id` in `def_path_hash`)
 - rust-lang/rust#157242 (Tune backport Zulip messages)
tmeijn pushed a commit to tmeijn/dotfiles that referenced this pull request Aug 21, 2026
This MR contains the following updates:

| Package | Type | Update | Change |
|---|---|---|---|
| [rust](https://github.com/rust-lang/rust) | tools | minor | `1.97.1` → `1.98.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.98.0`](https://github.com/rust-lang/rust/blob/HEAD/RELEASES.md#Version-1980-2026-08-20)

[Compare Source](rust-lang/rust@1.97.1...1.98.0)

\==========================

<a id="1.98.0-Language"></a>

## Language

- [Allow shortening lifetime of `&mut` when unsize-coercing, even in an invariant position.](rust-lang/rust#149219) For example, you can now coerce a `Cell<&'long mut i32>` to a `Cell<&'short mut dyn Send>`. Such shortenings were already previously allowed when coercing a `&mut` to a `&`, or coercing a `&` to a `&`.
- [Add deny-by-default `invalid_runtime_symbol_definitions` lint and warn-by-default `suspicious_runtime_symbol_definitions` lint](rust-lang/rust#155521)
  - The lints currently specifically targets `core` runtime symbols like `memcmp`, `memset`, `strlen`, ... and is planned to be expanded in the next few releases.
- [Add warn-by-default `c_void_returns` lint to check `core::ffi::c_void` as a return type](rust-lang/rust#156379)

<a id="1.98.0-Platform-Support"></a>

## Platform Support

- [Add `powerpc64-unknown-linux-gnuelfv2` as Tier 3](rust-lang/rust#144220)
- [Add `aarch64-unknown-linux-pauthtest` as Tier 3 target](rust-lang/rust#155722)
- [Promote `thumbv7a-none-eabi` to Tier 2](rust-lang/rust#155763)
- [Promote `thumbv7a-none-eabihf` to Tier 2](rust-lang/rust#155763)
- [Promote `thumbv7r-none-eabi` to Tier 2](rust-lang/rust#155763)
- [Promote `thumbv7r-none-eabihf` to Tier 2](rust-lang/rust#155763)
- [Promote `thumbv8r-none-eabihf` to Tier 2](rust-lang/rust#155763)

Refer to Rust's [platform support page][platform-support-doc]
for more information on Rust's tiered platform support.

[platform-support-doc]: https://doc.rust-lang.org/rustc/platform-support.html

<a id="1.98.0-Libraries"></a>

## Libraries

- [Change `Location<'_>` lifetime to `'static` in `Panic[Hook]Info`](rust-lang/rust#146561)
- [Document panic in `RangeInclusive::from(legacy::RangeInclusive)`](rust-lang/rust#155421)
- [Document that `ManuallyDrop`'s `Box` interaction has been fixed](rust-lang/rust#155750)
- [Stabilize LoongArch CRC Intrinsics](rust-lang/rust#156908)
- [The `derive` macro is available at `{core,std}::derive`.](rust-lang/rust#154645) This was previously [unintentionally stabilized in 1.96](rust-lang/rust#159856), but is now [explicitly accepted](rust-lang/rust#154645) as a stabilized API.
  - Please note that the MSRV for `{core,std}::derive` will be 1.96, and not 1.98.

<a id="1.98.0-Stabilized-APIs"></a>

## Stabilized APIs

- [`str::substr_range`](https://doc.rust-lang.org/stable/std/primitive.str.html#method.substr_range)
- [`[T]::subslice_range`](https://doc.rust-lang.org/stable/std/primitive.slice.html#method.subslice_range)
- [`core::fmt::NumBuffer`](https://doc.rust-lang.org/stable/core/fmt/struct.NumBuffer.html)
- [`<{integer}>::format_into`](https://doc.rust-lang.org/stable/core/primitive.usize.html#method.format_into)
- [`Send/Sync for std::process::CommandArgs`](https://doc.rust-lang.org/stable/std/process/struct.CommandArgs.html#impl-Send-for-CommandArgs%3C'a%3E)
- [`{fN}::algebraic_add`](https://doc.rust-lang.org/stable/core/primitive.f32.html#method.algebraic_add)
- [`{fN}::algebraic_sub`](https://doc.rust-lang.org/stable/core/primitive.f32.html#method.algebraic_sub)
- [`{fN}::algebraic_mul`](https://doc.rust-lang.org/stable/core/primitive.f32.html#method.algebraic_mul)
- [`{fN}::algebraic_div`](https://doc.rust-lang.org/stable/core/primitive.f32.html#method.algebraic_div)
- [`{fN}::algebraic_rem`](https://doc.rust-lang.org/stable/core/primitive.f32.html#method.algebraic_rem)
- [`NonZero<{integer}>::from_str_radix`](https://doc.rust-lang.org/stable/core/num/struct.NonZero.html#method.from_str_radix-4)
- [`String::from_utf16le`](https://doc.rust-lang.org/stable/std/string/struct.String.html#method.from_utf16le)
- [`String::from_utf16le_lossy`](https://doc.rust-lang.org/stable/std/string/struct.String.html#method.from_utf16le_lossy)
- [`String::from_utf16be`](https://doc.rust-lang.org/stable/std/string/struct.String.html#method.from_utf16be)
- [`String::from_utf16be_lossy`](https://doc.rust-lang.org/stable/std/string/struct.String.html#method.from_utf16be_lossy)
- [`[T]::strip_circumfix`](https://doc.rust-lang.org/stable/core/primitive.slice.html#method.strip_circumfix)
- [`str::strip_circumfix`](https://doc.rust-lang.org/stable/core/primitive.str.html#method.strip_circumfix)
- [`Atomic<T>::from_mut`](https://doc.rust-lang.org/stable/core/sync/atomic/struct.Atomic.html#method.from_mut)
- [`Atomic<T>::get_mut_slice`](https://doc.rust-lang.org/stable/core/sync/atomic/struct.Atomic.html#method.get_mut_slice)
- [`Atomic<T>::from_mut_slice`](https://doc.rust-lang.org/stable/core/sync/atomic/struct.Atomic.html#method.from_mut_slice)
- [`std::range::legacy`](https://doc.rust-lang.org/stable/std/range/legacy/index.html)

<a id="1.98.0-Compatibility-Notes"></a>

## Compatibility Notes

- [If fully elided, lifetime bounds of trait object types may now resolve differently or even get rejected in very specific niche scenarios](rust-lang/rust#129543)
- [Error in more cases of ambiguous imports](rust-lang/rust#145108)
- [Switch the destructors implementation for thread locals on Windows to use Fiber Local Storage (FLS)](rust-lang/rust#148799)
- [Convert some cases of the `ambiguous_glob_imports` lint into a hard error](rust-lang/rust#149195)
- [Where-bounds of the form `Type = Type` and `Type == Type` are no longer syntactically allowed](rust-lang/rust#153513)
- [Ensure Send/Sync is not implemented for std::env::Vars{,Os}](rust-lang/rust#155153)
- [Fix that in some attributes, arguments were not properly rejected](rust-lang/rust#155193)
- [`repr(transparent)` is now more strict about which fields have "trivial" layout and hence can be ignored: `repr(C)` types, types with private fields, and `#[non_exhaustive]` types are no longer considered "trivial"](rust-lang/rust#155299)
- [Correctly check whether types have equal size in `transmute()` when some `repr` attributes are involved.](rust-lang/rust#155418)
- [More characters are escaped when printing strings and chars](rust-lang/rust#155527)
- [Implement fast path for `derive(PartialOrd)` when deriving `Ord`](rust-lang/rust#155598)
  This can break crates in practice where a type's PartialOrd and Ord impls were inconsistent with each other.
- [Add temporary scope to `assert_eq` and `assert_ne`](rust-lang/rust#155739)
- Closed a hole in the pattern matching [structural equality](https://doc.rust-lang.org/reference/patterns.html#constant-patterns) check, preventing cases where a match of a constant would be allowed, despite disagreeing with a manually written `PartialEq` implementation, when a `derive(PartialEq)` implementation for that type also exists.
- [On Emscripten the WASM exception handling ABI is now unconditionally used](rust-lang/rust#156928) The `-Zemscripten-wasm-eh=false` flag to switch back to JS exceptions has been removed.
- [The UNSAFE\_CODE lint is now consistently emitted for all unsafe attributes](rust-lang/rust#157201)
- [Solaris: remove `File::lock` implementation, it has the wrong semantics (return "unsupported" instead)](rust-lang/rust#157509)
- [Windows-gnu targets now specify baseline tools versions](rust-lang/rust#158020)
- [rustfmt now discovers module files that are defined in `cfg_select!`](rust-lang/rust#158372)
  This may cause more code to be formatted which was previously ignored.

</details>

---

### Configuration

📅 **Schedule**: (UTC)

- 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 [Mend Renovate](https://github.com/renovatebot/renovate).
<!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiI0My4yODguMCIsInVwZGF0ZWRJblZlciI6IjQzLjI4OC4wIiwidGFyZ2V0QnJhbmNoIjoibWFpbiIsImxhYmVscyI6WyJSZW5vdmF0ZSBCb3QiLCJhdXRvbWF0aW9uOmJvdC1hdXRob3JlZCIsImRlcGVuZGVuY3ktdHlwZTo6bWlub3IiXX0=-->
wip-sync pushed a commit to NetBSD/pkgsrc-wip that referenced this pull request Aug 24, 2026
Pkgsrc changes:
 * Update patches to match new vendored versions.
 * Associated checksum changes.
 * Add cargo option to permit linker warnings (NetBSD compat code)
   (taken from rust-beta wip package)

Upstream changes:

Version 1.98.0 (2026-08-20)
==========================

Language
--------
- [Allow shortening lifetime of `&mut` when unsize-coercing, even
  in an invariant position.]
  (rust-lang/rust#149219) For example, you
  can now coerce a `Cell<&'long mut i32>` to a `Cell<&'short mut
  dyn Send>`. Such shortenings were already previously allowed when
  coercing a `&mut` to a `&`, or coercing a `&` to a `&`.
- [Add deny-by-default `invalid_runtime_symbol_definitions` lint
  and warn-by-default `suspicious_runtime_symbol_definitions` lint]
  (rust-lang/rust#155521)
    - The lints currently specifically targets `core` runtime
      symbols like `memcmp`, `memset`, `strlen`, ... and is planned
      to be expanded in the next few releases.
- [Add warn-by-default `c_void_returns` lint to check `core::ffi::c_void`
  as a return type] (rust-lang/rust#156379)

Platform Support
----------------
- [Add `powerpc64-unknown-linux-gnuelfv2` as Tier 3]
  (rust-lang/rust#144220)
- [Add `aarch64-unknown-linux-pauthtest` as Tier 3 target]
  (rust-lang/rust#155722)
- [Promote `thumbv7a-none-eabi` to Tier 2]
  (rust-lang/rust#155763)
- [Promote `thumbv7a-none-eabihf` to Tier 2]
  (rust-lang/rust#155763)
- [Promote `thumbv7r-none-eabi` to Tier 2]
  (rust-lang/rust#155763)
- [Promote `thumbv7r-none-eabihf` to Tier 2]
  (rust-lang/rust#155763)
- [Promote `thumbv8r-none-eabihf` to Tier 2]
  (rust-lang/rust#155763)

Refer to Rust's [platform support page][platform-support-doc]
for more information on Rust's tiered platform support.

[platform-support-doc]: https://doc.rust-lang.org/rustc/platform-support.html

Libraries
---------
- [Change `Location<'_>` lifetime to `'static` in `Panic[Hook]Info`]
  (rust-lang/rust#146561)
- [Document panic in `RangeInclusive::from(legacy::RangeInclusive)`]
  (rust-lang/rust#155421)
- [Document that `ManuallyDrop`'s `Box` interaction has been fixed]
  (rust-lang/rust#155750)
- [Stabilize LoongArch CRC Intrinsics]
  (rust-lang/rust#156908)
- [The `derive` macro is available at `{core,std}::derive`.]
  (rust-lang/rust#154645) This was
  previously [unintentionally stabilized in 1.96]
  (rust-lang/rust#159856), but is now
  [explicitly accepted] (rust-lang/rust#154645)
  as a stabilized API.
- Please note that the MSRV for
  `{core,std}::derive` will be 1.96, and not 1.98.

Stabilized APIs
---------------
- [`str::substr_range`]
  (https://doc.rust-lang.org/stable/std/primitive.str.html#method.substr_range)
- [`[T]::subslice_range`]
  (https://doc.rust-lang.org/stable/std/primitive.slice.html#method.subslice_range)
- [`core::fmt::NumBuffer`]
  (https://doc.rust-lang.org/stable/core/fmt/struct.NumBuffer.html)
- [`<{integer}>::format_into`]
  (https://doc.rust-lang.org/stable/core/primitive.usize.html#method.format_into)
- [`Send/Sync for std::process::CommandArgs`]
  (https://doc.rust-lang.org/stable/std/process/struct.CommandArgs.html#impl-Send-for-CommandArgs%3C'a%3E)
- [`{fN}::algebraic_add`]
  (https://doc.rust-lang.org/stable/core/primitive.f32.html#method.algebraic_add)
- [`{fN}::algebraic_sub`]
  (https://doc.rust-lang.org/stable/core/primitive.f32.html#method.algebraic_sub)
- [`{fN}::algebraic_mul`]
  (https://doc.rust-lang.org/stable/core/primitive.f32.html#method.algebraic_mul)
- [`{fN}::algebraic_div`]
  (https://doc.rust-lang.org/stable/core/primitive.f32.html#method.algebraic_div)
- [`{fN}::algebraic_rem`]
  (https://doc.rust-lang.org/stable/core/primitive.f32.html#method.algebraic_rem)
- [`NonZero<{integer}>::from_str_radix`]
  (https://doc.rust-lang.org/stable/core/num/struct.NonZero.html#method.from_str_radix-4)
- [`String::from_utf16le`]
  (https://doc.rust-lang.org/stable/std/string/struct.String.html#method.from_utf16le)
- [`String::from_utf16le_lossy`]
  (https://doc.rust-lang.org/stable/std/string/struct.String.html#method.from_utf16le_lossy)
- [`String::from_utf16be`]
  (https://doc.rust-lang.org/stable/std/string/struct.String.html#method.from_utf16be)
- [`String::from_utf16be_lossy`]
  (https://doc.rust-lang.org/stable/std/string/struct.String.html#method.from_utf16be_lossy)
- [`[T]::strip_circumfix`]
  (https://doc.rust-lang.org/stable/core/primitive.slice.html#method.strip_circumfix)
- [`str::strip_circumfix`]
  (https://doc.rust-lang.org/stable/core/primitive.str.html#method.strip_circumfix)
- [`Atomic<T>::from_mut`]
  (https://doc.rust-lang.org/stable/core/sync/atomic/struct.Atomic.html#method.from_mut)
- [`Atomic<T>::get_mut_slice`]
  (https://doc.rust-lang.org/stable/core/sync/atomic/struct.Atomic.html#method.get_mut_slice)
- [`Atomic<T>::from_mut_slice`]
  (https://doc.rust-lang.org/stable/core/sync/atomic/struct.Atomic.html#method.from_mut_slice)
- [`std::range::legacy`]
  (https://doc.rust-lang.org/stable/std/range/legacy/index.html)

Compatibility Notes
-------------------
- [If fully elided, lifetime bounds of trait object types may now
  resolve differently or even get rejected in very specific niche
  scenarios] (rust-lang/rust#129543)
- [Error in more cases of ambiguous imports]
  (rust-lang/rust#145108)
- [Switch the destructors implementation for thread locals on
  Windows to use Fiber Local Storage (FLS)]
  (rust-lang/rust#148799)
- [Convert some cases of the `ambiguous_glob_imports` lint into a hard error]
  (rust-lang/rust#149195)
- [Where-bounds of the form `Type = Type` and `Type == Type` are
  no longer syntactically allowed]
  (rust-lang/rust#153513)
- [Ensure Send/Sync is not implemented for std::env::Vars{,Os}]
  (rust-lang/rust#155153)
- [Fix that in some attributes, arguments were not properly rejected]
  (rust-lang/rust#155193)
- [`repr(transparent)` is now more strict about which fields have
  "trivial" layout and hence can be ignored: `repr(C)` types, types
  with private fields, and `#[non_exhaustive]` types are no longer
  considered "trivial"] (rust-lang/rust#155299)
- [Correctly check whether types have equal size in `transmute()`
  when some `repr` attributes are involved.]
  (rust-lang/rust#155418)
- [More characters are escaped when printing strings and chars]
  (rust-lang/rust#155527)
- [Implement fast path for `derive(PartialOrd)` when deriving `Ord`]
  (rust-lang/rust#155598)
  This can break crates in practice where a type's PartialOrd and
  Ord impls were inconsistent with each other.
- [Add temporary scope to `assert_eq` and `assert_ne`]
  (rust-lang/rust#155739)
- Closed a hole in the pattern matching [structural equality]
  (https://doc.rust-lang.org/reference/patterns.html#constant-patterns)
  check, preventing cases where a match of a constant would be
  allowed, despite disagreeing with a manually written `PartialEq`
  implementation, when a `derive(PartialEq)` implementation for
  that type also exists.
- [On Emscripten the WASM exception handling ABI is now unconditionally used]
  (rust-lang/rust#156928) The
  `-Zemscripten-wasm-eh=false` flag to switch back to JS exceptions
  has been removed.
- [The UNSAFE_CODE lint is now consistently emitted for all unsafe attributes]
  (rust-lang/rust#157201)
- [Solaris: remove `File::lock` implementation, it has the wrong
  semantics (return "unsupported" instead)]
  (rust-lang/rust#157509)
- [Windows-gnu targets now specify baseline tools versions]
  (rust-lang/rust#158020)
- [rustfmt now discovers module files that are defined in `cfg_select!`]
  (rust-lang/rust#158372)
  This may cause more code to be formatted which was previously ignored.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

A-attributes Area: Attributes (`#[…]`, `#![…]`) 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. I-lang-radar Items that are on lang's radar and will need eventual work or consideration. needs-crater This change needs a crater run to check for possible breakage in the ecosystem. S-waiting-on-bors Status: Waiting on bors to run and complete tests. Bors will change the label on completion. T-compiler Relevant to the compiler team, which will review and decide on the PR/issue. T-lang Relevant to the language team to-announce Announce this issue on triage meeting waived-reference-pr This language change does not need a Reference PR.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Invalid value accepted for #[macro_export(local_inner_macros)]

10 participants