Skip to content

Forbid lowering the same NodeId multiple times #96346

Closed
@cjgillot

Description

@cjgillot
Contributor

During AST->HIR lowering, the method lower_node_id is tasked to transform NodeIds that identify AST nodes into HirIds that identify HIR nodes. This method maintains a node_id_to_local_id: FxHashMap<NodeId, hir::ItemLocalId> to remember this mapping.

However, this mapping is not entirely useful, and mostly exists (1) to make the developer's life easier, (2) to lower resolutions to local bindings Res::Local in lower_res. The mapping node_id_to_local_id should be removed, and multiple calls to local_node_id with the same NodeId should be forbidden. For usage (2), Res::Local only appears for ident patterns (PatKind::Ident) which are lowered by lower_pat_ident. Hence, lower_res should use a dedicated hash-map filled by lower_pat_ident.

Furthermore, next_id calls lower_node_id with a node_id: NodeId which is entirely local to that function, and will never be known to any other code. Manipulations of node_id_to_local_id there are entirely useless.

Instructions:

  • inline lower_node_id into next_id and skip manipulations of node_id_to_local_id;
  • replace the Entry::Occupied branch in lower_node_id by a panic!, and fix all the ICEs;
  • create another mapping node_id_to_local_id_for_res (name to bikeshed) which is only filled by lower_pat_ident and read by lower_res; this mapping should be saved by with_hir_id_owner like node_id_to_local_id is;
  • remove node_id_to_local_id, or eventually keep it only to debug-assert that we don't call lower_node_id twice on the same NodeId.

Activity

added
E-mentorCall for participation: This issue has a mentor. Use #t-compiler/help on Zulip for discussion.
E-help-wantedCall for participation: Help is requested to fix this issue.
E-mediumCall for participation: Medium difficulty. Experience needed to fix: Intermediate.
on Apr 23, 2022
kckeiks

kckeiks commented on Apr 23, 2022

@kckeiks
Contributor

@rustbot claim

raiyansayeed

raiyansayeed commented on Jun 7, 2022

@raiyansayeed
Contributor

Hey @kckeiks , are you still working on this task by chance?

kckeiks

kckeiks commented on Jun 7, 2022

@kckeiks
Contributor

@raiyansayeed I was but I have a couple of other issues that I'm working on so you can take this one if you want.

spastorino

spastorino commented on Jun 8, 2022

@spastorino
Member

@raiyansayeed feel free to ping me too on Zulip if you need help or something.

raiyansayeed

raiyansayeed commented on Jun 9, 2022

@raiyansayeed
Contributor

@rustbot claim

trevyn

trevyn commented on Sep 6, 2022

@trevyn
Contributor

@raiyansayeed are you still working on this?

Noratrieb

Noratrieb commented on Jan 19, 2023

@Noratrieb
Member

No activity, feel free to claim it again. @rustbot release-assignment

azadnn

azadnn commented on Jan 26, 2023

@azadnn

@rustbot claim

14 remaining items

Loading
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

Labels

E-help-wantedCall for participation: Help is requested to fix this issue.E-mediumCall for participation: Medium difficulty. Experience needed to fix: Intermediate.E-mentorCall for participation: This issue has a mentor. Use #t-compiler/help on Zulip for discussion.T-compilerRelevant to the compiler team, which will review and decide on the PR/issue.

Type

No type

Projects

No projects

Milestone

No milestone

Relationships

None yet

    Development

    Participants

    @spastorino@Enselic@trevyn@cjgillot@kckeiks

    Issue actions

      Forbid lowering the same `NodeId` multiple times · Issue #96346 · rust-lang/rust