Skip to content

Use Option<Ident> for lowered param names. #138685

New issue

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

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

Already on GitHub? # to your account

Merged

Conversation

nnethercote
Copy link
Contributor

Parameter patterns are lowered to an Ident by lower_fn_params_to_names, which is used when lowering bare function types, trait methods, and foreign functions. Currently, there are two exceptional cases where the lowered param can become an empty Ident.

  • If the incoming pattern is an empty Ident. This occurs if the parameter is anonymous, e.g. in a bare function type.

  • If the incoming pattern is neither an ident nor an underscore. Any such parameter will have triggered a compile error (hence the span_delayed_bug), but lowering still occurs.

This commit replaces these empty Ident results with None, which eliminates a number of kw::Empty uses, and makes it impossible to fail to check for these exceptional cases.

Note: the FIXME comment in is_unwrap_or_empty_symbol is removed. It actually should have been removed in #138482, the precursor to this PR. That PR changed the lowering of wild patterns to _ symbols instead of empty symbols, which made the mentioned underscore check load-bearing.

r? @compiler-errors

@rustbot rustbot added S-waiting-on-review Status: Awaiting review from the assignee but also interested parties. T-compiler Relevant to the compiler team, which will review and decide on the PR/issue. T-rustdoc Relevant to the rustdoc team, which will review and decide on the PR/issue. labels Mar 19, 2025
@rustbot
Copy link
Collaborator

rustbot commented Mar 19, 2025

Some changes occurred in src/tools/clippy

cc @rust-lang/clippy

HIR ty lowering was modified

cc @fmease

@nnethercote
Copy link
Contributor Author

@compiler-errors: I requested your review because this is closely related to #138482, which you reviewed. Please re-roll for a different reviewer if you don't want to do it. Thanks.

Parameter patterns are lowered to an `Ident` by
`lower_fn_params_to_names`, which is used when lowering bare function
types, trait methods, and foreign functions. Currently, there are two
exceptional cases where the lowered param can become an empty `Ident`.

- If the incoming pattern is an empty `Ident`. This occurs if the
  parameter is anonymous, e.g. in a bare function type.

- If the incoming pattern is neither an ident nor an underscore. Any
  such parameter will have triggered a compile error (hence the
  `span_delayed_bug`), but lowering still occurs.

This commit replaces these empty `Ident` results with `None`, which
eliminates a number of `kw::Empty` uses, and makes it impossible to fail
to check for these exceptional cases.

Note: the `FIXME` comment in `is_unwrap_or_empty_symbol` is removed. It
actually should have been removed in rust-lang#138482, the precursor to this PR.
That PR changed the lowering of wild patterns to `_` symbols instead of
empty symbols, which made the mentioned underscore check load-bearing.
@nnethercote nnethercote force-pushed the use-Option-Ident-for-lowered-param-names branch from 621118b to f27cab8 Compare March 19, 2025 09:54
@compiler-errors
Copy link
Member

@bors r+ rollup

@bors
Copy link
Collaborator

bors commented Mar 19, 2025

📌 Commit f27cab8 has been approved by compiler-errors

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 Mar 19, 2025
jieyouxu added a commit to jieyouxu/rust that referenced this pull request Mar 20, 2025
…owered-param-names, r=compiler-errors

Use `Option<Ident>` for lowered param names.

Parameter patterns are lowered to an `Ident` by `lower_fn_params_to_names`, which is used when lowering bare function types, trait methods, and foreign functions. Currently, there are two exceptional cases where the lowered param can become an empty `Ident`.

- If the incoming pattern is an empty `Ident`. This occurs if the parameter is anonymous, e.g. in a bare function type.

- If the incoming pattern is neither an ident nor an underscore. Any such parameter will have triggered a compile error (hence the `span_delayed_bug`), but lowering still occurs.

This commit replaces these empty `Ident` results with `None`, which eliminates a number of `kw::Empty` uses, and makes it impossible to fail to check for these exceptional cases.

Note: the `FIXME` comment in `is_unwrap_or_empty_symbol` is removed. It actually should have been removed in rust-lang#138482, the precursor to this PR. That PR changed the lowering of wild patterns to `_` symbols instead of empty symbols, which made the mentioned underscore check load-bearing.

r? `@compiler-errors`
bors added a commit to rust-lang-ci/rust that referenced this pull request Mar 20, 2025
Rollup of 15 pull requests

Successful merges:

 - rust-lang#138321 ([bootstrap] Distribute split debuginfo if present)
 - rust-lang#138364 (ports the compiler test cases to new rust_intrinsic format)
 - rust-lang#138410 (Couple mir building cleanups)
 - rust-lang#138435 (Add support for postfix yield expressions)
 - rust-lang#138536 (stable_mir: Add `MutMirVisitor`)
 - rust-lang#138623 ([bootstrap] Use llvm_runtimes for compiler-rt)
 - rust-lang#138650 (Optimize `io::Write::write_fmt` for constant strings)
 - rust-lang#138652 (Reintroduce remote-test support in run-make tests)
 - rust-lang#138685 (Use `Option<Ident>` for lowered param names.)
 - rust-lang#138694 (Fix: add ohos target notes)
 - rust-lang#138700 (Suggest `-Whelp` when pass `--print lints` to rustc)
 - rust-lang#138709 (Update GCC submodule)
 - rust-lang#138724 (Check attrs: Don't try to retrieve the name of list stems)
 - rust-lang#138731 (coverage: Add LLVM plumbing for expansion regions)
 - rust-lang#138732 (Use `def_path_str` for def id arg in `UnsupportedOpInfo`)

r? `@ghost`
`@rustbot` modify labels: rollup
bors added a commit to rust-lang-ci/rust that referenced this pull request Mar 20, 2025
…iaskrgr

Rollup of 8 pull requests

Successful merges:

 - rust-lang#138435 (Add support for postfix yield expressions)
 - rust-lang#138685 (Use `Option<Ident>` for lowered param names.)
 - rust-lang#138700 (Suggest `-Whelp` when pass `--print lints` to rustc)
 - rust-lang#138727 (Do not rely on `type_var_origin` in `OrphanCheckErr::NonLocalInputType`)
 - rust-lang#138729 (Clean up `FnCtxt::resolve_coroutine_interiors`)
 - rust-lang#138731 (coverage: Add LLVM plumbing for expansion regions)
 - rust-lang#138732 (Use `def_path_str` for def id arg in `UnsupportedOpInfo`)
 - rust-lang#138735 (Remove `llvm` and `llvms` triagebot ping aliases for `icebreakers-llvm` ping group)

r? `@ghost`
`@rustbot` modify labels: rollup
matthiaskrgr added a commit to matthiaskrgr/rust that referenced this pull request Mar 20, 2025
…owered-param-names, r=compiler-errors

Use `Option<Ident>` for lowered param names.

Parameter patterns are lowered to an `Ident` by `lower_fn_params_to_names`, which is used when lowering bare function types, trait methods, and foreign functions. Currently, there are two exceptional cases where the lowered param can become an empty `Ident`.

- If the incoming pattern is an empty `Ident`. This occurs if the parameter is anonymous, e.g. in a bare function type.

- If the incoming pattern is neither an ident nor an underscore. Any such parameter will have triggered a compile error (hence the `span_delayed_bug`), but lowering still occurs.

This commit replaces these empty `Ident` results with `None`, which eliminates a number of `kw::Empty` uses, and makes it impossible to fail to check for these exceptional cases.

Note: the `FIXME` comment in `is_unwrap_or_empty_symbol` is removed. It actually should have been removed in rust-lang#138482, the precursor to this PR. That PR changed the lowering of wild patterns to `_` symbols instead of empty symbols, which made the mentioned underscore check load-bearing.

r? ```@compiler-errors```
bors added a commit to rust-lang-ci/rust that referenced this pull request Mar 20, 2025
…iaskrgr

Rollup of 8 pull requests

Successful merges:

 - rust-lang#138435 (Add support for postfix yield expressions)
 - rust-lang#138685 (Use `Option<Ident>` for lowered param names.)
 - rust-lang#138700 (Suggest `-Whelp` when pass `--print lints` to rustc)
 - rust-lang#138727 (Do not rely on `type_var_origin` in `OrphanCheckErr::NonLocalInputType`)
 - rust-lang#138729 (Clean up `FnCtxt::resolve_coroutine_interiors`)
 - rust-lang#138731 (coverage: Add LLVM plumbing for expansion regions)
 - rust-lang#138732 (Use `def_path_str` for def id arg in `UnsupportedOpInfo`)
 - rust-lang#138735 (Remove `llvm` and `llvms` triagebot ping aliases for `icebreakers-llvm` ping group)

r? `@ghost`
`@rustbot` modify labels: rollup
@bors bors merged commit 9155769 into rust-lang:master Mar 21, 2025
6 checks passed
@rustbot rustbot added this to the 1.87.0 milestone Mar 21, 2025
bors added a commit to rust-lang-ci/rust that referenced this pull request Mar 21, 2025
…iaskrgr

Rollup of 8 pull requests

Successful merges:

 - rust-lang#138435 (Add support for postfix yield expressions)
 - rust-lang#138685 (Use `Option<Ident>` for lowered param names.)
 - rust-lang#138700 (Suggest `-Whelp` when pass `--print lints` to rustc)
 - rust-lang#138727 (Do not rely on `type_var_origin` in `OrphanCheckErr::NonLocalInputType`)
 - rust-lang#138729 (Clean up `FnCtxt::resolve_coroutine_interiors`)
 - rust-lang#138731 (coverage: Add LLVM plumbing for expansion regions)
 - rust-lang#138732 (Use `def_path_str` for def id arg in `UnsupportedOpInfo`)
 - rust-lang#138735 (Remove `llvm` and `llvms` triagebot ping aliases for `icebreakers-llvm` ping group)

r? `@ghost`
`@rustbot` modify labels: rollup
rust-timer added a commit to rust-lang-ci/rust that referenced this pull request Mar 21, 2025
Rollup merge of rust-lang#138685 - nnethercote:use-Option-Ident-for-lowered-param-names, r=compiler-errors

Use `Option<Ident>` for lowered param names.

Parameter patterns are lowered to an `Ident` by `lower_fn_params_to_names`, which is used when lowering bare function types, trait methods, and foreign functions. Currently, there are two exceptional cases where the lowered param can become an empty `Ident`.

- If the incoming pattern is an empty `Ident`. This occurs if the parameter is anonymous, e.g. in a bare function type.

- If the incoming pattern is neither an ident nor an underscore. Any such parameter will have triggered a compile error (hence the `span_delayed_bug`), but lowering still occurs.

This commit replaces these empty `Ident` results with `None`, which eliminates a number of `kw::Empty` uses, and makes it impossible to fail to check for these exceptional cases.

Note: the `FIXME` comment in `is_unwrap_or_empty_symbol` is removed. It actually should have been removed in rust-lang#138482, the precursor to this PR. That PR changed the lowering of wild patterns to `_` symbols instead of empty symbols, which made the mentioned underscore check load-bearing.

r? ``@compiler-errors``
@nnethercote nnethercote deleted the use-Option-Ident-for-lowered-param-names branch March 21, 2025 02:05
flip1995 pushed a commit to flip1995/rust that referenced this pull request Apr 3, 2025
…owered-param-names, r=compiler-errors

Use `Option<Ident>` for lowered param names.

Parameter patterns are lowered to an `Ident` by `lower_fn_params_to_names`, which is used when lowering bare function types, trait methods, and foreign functions. Currently, there are two exceptional cases where the lowered param can become an empty `Ident`.

- If the incoming pattern is an empty `Ident`. This occurs if the parameter is anonymous, e.g. in a bare function type.

- If the incoming pattern is neither an ident nor an underscore. Any such parameter will have triggered a compile error (hence the `span_delayed_bug`), but lowering still occurs.

This commit replaces these empty `Ident` results with `None`, which eliminates a number of `kw::Empty` uses, and makes it impossible to fail to check for these exceptional cases.

Note: the `FIXME` comment in `is_unwrap_or_empty_symbol` is removed. It actually should have been removed in rust-lang#138482, the precursor to this PR. That PR changed the lowering of wild patterns to `_` symbols instead of empty symbols, which made the mentioned underscore check load-bearing.

r? ``@compiler-errors``
flip1995 pushed a commit to flip1995/rust that referenced this pull request Apr 3, 2025
…owered-param-names, r=compiler-errors

Use `Option<Ident>` for lowered param names.

Parameter patterns are lowered to an `Ident` by `lower_fn_params_to_names`, which is used when lowering bare function types, trait methods, and foreign functions. Currently, there are two exceptional cases where the lowered param can become an empty `Ident`.

- If the incoming pattern is an empty `Ident`. This occurs if the parameter is anonymous, e.g. in a bare function type.

- If the incoming pattern is neither an ident nor an underscore. Any such parameter will have triggered a compile error (hence the `span_delayed_bug`), but lowering still occurs.

This commit replaces these empty `Ident` results with `None`, which eliminates a number of `kw::Empty` uses, and makes it impossible to fail to check for these exceptional cases.

Note: the `FIXME` comment in `is_unwrap_or_empty_symbol` is removed. It actually should have been removed in rust-lang#138482, the precursor to this PR. That PR changed the lowering of wild patterns to `_` symbols instead of empty symbols, which made the mentioned underscore check load-bearing.

r? ```@compiler-errors```
flip1995 pushed a commit to flip1995/rust that referenced this pull request Apr 3, 2025
…iaskrgr

Rollup of 8 pull requests

Successful merges:

 - rust-lang#138435 (Add support for postfix yield expressions)
 - rust-lang#138685 (Use `Option<Ident>` for lowered param names.)
 - rust-lang#138700 (Suggest `-Whelp` when pass `--print lints` to rustc)
 - rust-lang#138727 (Do not rely on `type_var_origin` in `OrphanCheckErr::NonLocalInputType`)
 - rust-lang#138729 (Clean up `FnCtxt::resolve_coroutine_interiors`)
 - rust-lang#138731 (coverage: Add LLVM plumbing for expansion regions)
 - rust-lang#138732 (Use `def_path_str` for def id arg in `UnsupportedOpInfo`)
 - rust-lang#138735 (Remove `llvm` and `llvms` triagebot ping aliases for `icebreakers-llvm` ping group)

r? `@ghost`
`@rustbot` modify labels: rollup
flip1995 pushed a commit to flip1995/rust that referenced this pull request Apr 3, 2025
…iaskrgr

Rollup of 8 pull requests

Successful merges:

 - rust-lang#138435 (Add support for postfix yield expressions)
 - rust-lang#138685 (Use `Option<Ident>` for lowered param names.)
 - rust-lang#138700 (Suggest `-Whelp` when pass `--print lints` to rustc)
 - rust-lang#138727 (Do not rely on `type_var_origin` in `OrphanCheckErr::NonLocalInputType`)
 - rust-lang#138729 (Clean up `FnCtxt::resolve_coroutine_interiors`)
 - rust-lang#138731 (coverage: Add LLVM plumbing for expansion regions)
 - rust-lang#138732 (Use `def_path_str` for def id arg in `UnsupportedOpInfo`)
 - rust-lang#138735 (Remove `llvm` and `llvms` triagebot ping aliases for `icebreakers-llvm` ping group)

r? `@ghost`
`@rustbot` modify labels: rollup
# for free to join this conversation on GitHub. Already have an account? # to comment
Labels
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-rustdoc Relevant to the rustdoc team, which will review and decide on the PR/issue.
Projects
None yet
Development

Successfully merging this pull request may close these issues.

4 participants