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
Copy link
Copy Markdown
Contributor

@JonathanBrouwer JonathanBrouwer commented Apr 12, 2026

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
Copy link
Copy Markdown
Collaborator

rustbot commented Apr 12, 2026

⚠️ #[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
Contributor 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
Contributor Author

@bors try cancel
@bors try

@rust-bors
Copy link
Copy Markdown
Contributor

rust-bors Bot commented Apr 12, 2026

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
Copy link
Copy Markdown
Contributor

rust-bors Bot commented Apr 12, 2026

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

@JonathanBrouwer
Copy link
Copy Markdown
Contributor 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
Copy link
Copy Markdown
Collaborator

rustbot commented May 31, 2026

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
Copy link
Copy Markdown
Contributor

rust-bors Bot commented Jun 1, 2026

📌 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)
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