Skip to content

Start cutting down rustc_query_system#152160

Open
nnethercote wants to merge 3 commits intorust-lang:mainfrom
nnethercote:start-cutting-down-rustc_query_system
Open

Start cutting down rustc_query_system#152160
nnethercote wants to merge 3 commits intorust-lang:mainfrom
nnethercote:start-cutting-down-rustc_query_system

Conversation

@nnethercote
Copy link
Contributor

The query system is implemented in rustc_query_system, rustc_middle, and rustc_query_impl. rustc_query_system is hamstrung by not having access to TyCtxt, and there seems to be consensus to eliminate it. It's contents can be moved into the other two crates. Moving as much stuff as possible to rustc_query_impl is preferred, because rustc_middle is already so big.

This PR starts this process. It moves one small function to rustc_middle and a good chunk of code to rustc_query_impl.

Once rustc_query_system is gone (or at least shrunk down a lot more) some of the traits like DepContext, QueryContext, and QueryDispatcher will be removable.

r? @Zalathar

That's the only place it's used, so it no longer needs to be `pub`.
Instead of writing it by hand.
…umbing`.

We are in the process of eliminating `rustc_query_system`. Chunks of it
are unused by `rustc_middle`, and so can be moved into
`rustc_query_info`. This commit does some of that.

Mostly it's just moving code from one file to another. There are a
couple of non-trivial changes.

- `QueryState` and `ActiveKeyStatus` must remain in `rustc_query_system`
  because they are used by `rustc_middle`. But their inherent methods
  are not used by `rustc_middle`. So these methods are moved and
  converted to free functions.

- The visibility of some things must increase. This includes `DepGraphData`
  and some of its methods, which are now used in `rustc_query_impl`.
  This is a bit annoying but seems hard to avoid.

What little is left behind in
`compiler/rustc_query_system/src/query/plumbing.rs` will be able to
moved into `rustc_query_impl` or `rustc_middle` in the future.
@rustbot rustbot added A-query-system Area: The rustc query system (https://rustc-dev-guide.rust-lang.org/query.html) 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 Feb 5, 2026
@nnethercote
Copy link
Contributor Author

cc @cjgillot @Zoxc

@Zoxc
Copy link
Contributor

Zoxc commented Feb 5, 2026

I'd prefer to apply the rustc_query_system::query::plumbing -> execution renaming in #151977 and then probably move the entire file, instead of growing rustc_query_impl's plumbing module.

@nnethercote
Copy link
Contributor Author

You can't move the entire file. Some parts of it are used by rustc_middle, some aren't, so it needs to be split up accordingly.

@Zoxc
Copy link
Contributor

Zoxc commented Feb 5, 2026

Not enough moved for git to pick up a rename? It could be moved to a execution module in rustc_query_impl at least.

@Zalathar
Copy link
Member

Zalathar commented Feb 5, 2026

Adding a few hundred more lines to rustc_query_impl::plumbing is a bit unfortunate.

I'm not sure whether this will work out in practice, but here's a potential approach:

  • Take the parts of rustc_query_system::query::plumbing that are not moving, and extract them into a separate module to remain in rustc_query_system.
  • Move and rename rustc_query_system::query::plumbing, making it a submodule of rustc_query_impl::plumbing to minimize visibility headaches.

That would produce an end result similar to the current state of this PR, but with the migrated code still in its own separate file, and preserving as much line history as possible.

@rust-log-analyzer
Copy link
Collaborator

The job x86_64-gnu-tools failed! Check out the build log: (web) (plain enhanced) (plain)

Click to see the possible cause of the failure (guessed by this bot)
REPOSITORY                                   TAG       IMAGE ID       CREATED      SIZE
ghcr.io/dependabot/dependabot-updater-core   latest    bcec0b4e062b   9 days ago   783MB
=> Removing docker images...
Deleted Images:
untagged: ghcr.io/dependabot/dependabot-updater-core:latest
untagged: ghcr.io/dependabot/dependabot-updater-core@sha256:b662be51f7b8ef7e2c8464428f14e49cb79c36aa9afb7ecb9221dfe0f507050c
deleted: sha256:bcec0b4e062b5ffe11cc1c2729558c0cd96621c0271ab5e97ff3a56e0c25045a
deleted: sha256:64e147d5e54d9be8b8aa322e511cda02296eda4b8b8d063c6a314833aca50e29
deleted: sha256:5cba409bb463f4e7fa1a19f695450170422582c1bc7c0e934d893b4e5f558bc6
deleted: sha256:cddc6ebd344b0111eaab170ead1dfda24acdfe865ed8a12599a34d338fa8e28b
deleted: sha256:2412c3f334d79134573cd45e657fb6cc0abd75bef3881458b0d498d936545c8d
---
tests/ui/drain_collect.fixed ... ok
tests/ui/drop_non_drop.rs ... ok
tests/ui/duplicate_underscore_argument.rs ... ok
tests/ui/duplicated_attributes.rs ... ok
tests/ui/duration_suboptimal_units_days_weeks.rs ... ok
tests/ui/duration_suboptimal_units.rs ... ok
tests/ui/double_parens.fixed ... ok
tests/ui/duration_subsec.rs ... ok
tests/ui/duration_suboptimal_units_days_weeks.fixed ... ok
tests/ui/duration_suboptimal_units.fixed ... ok
tests/ui/duration_subsec.fixed ... ok
tests/ui/eager_transmute.rs ... ok
tests/ui/elidable_lifetime_names.rs ... ok
tests/ui/else_if_without_else.rs ... ok
tests/ui/empty_docs.rs ... ok
---
...............................................    (147/147)

======== tests/rustdoc-gui/search-filter.goml ========

[ERROR] line 48: Error: The CSS selector "#search-tabs .count.loading" still exists: for command `wait-for-false: "#search-tabs .count.loading"`
    at <file:///checkout/obj/build/x86_64-unknown-linux-gnu/test/rustdoc-gui/doc/test_docs/index.html?search=test>

======== tests/rustdoc-gui/search-result-display.goml ========

[WARNING] line 39: Delta is 0 for "x", maybe try to use `compare-elements-position` instead?

@nnethercote
Copy link
Contributor Author

Adding a few hundred more lines to rustc_query_impl::plumbing is a bit unfortunate.

Why? The same few hundred lines are removed from .rustc_query_system.

That would produce an end result similar to the current state of this PR, but with the migrated code still in its own separate file, and preserving as much line history as possible.

It would also result in an odd module structure that reflects historical evolution rather than what makes sense today. rustc_query_system is 5,000 lines of code. If we split it across two other modules there's going to be some churn. I am a firm believer that the current version of the code is the most important, and good code structure shouldn't be held hostage by concerns about version control history.

@rust-bors
Copy link
Contributor

rust-bors bot commented Feb 5, 2026

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

@Zalathar
Copy link
Member

Zalathar commented Feb 5, 2026

I tried prototyping my proposal, and while I still like it on paper, I came away with the distinct impression that it's probably not better enough to justify the extra fiddling and delay, compared to just moving forward with this PR.

Ultimately, what's most important is unlocking the sorts of simplification and improvement that are impossible with the current module split.

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

Labels

A-query-system Area: The rustc query system (https://rustc-dev-guide.rust-lang.org/query.html) 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.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

5 participants