Skip to content

Commit dfb80a8

Browse files
committed
Avoid duplicated query modifier comments.
By removing the ones in `compiler/rustc_middle/src/queries.rs`, and making `compiler/rustc_middle/src/query/modifiers.rs` the single source of truth.
1 parent b49ecc9 commit dfb80a8

2 files changed

Lines changed: 36 additions & 32 deletions

File tree

compiler/rustc_middle/src/queries.rs

Lines changed: 3 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -23,27 +23,11 @@
2323
//! ## Query Modifiers
2424
//!
2525
//! Query modifiers are special flags that alter the behavior of a query. They are parsed and processed by the `rustc_macros`
26-
//! The main modifiers are:
2726
//!
28-
//! - `desc { ... }`: Sets the human-readable description for diagnostics and profiling. Required
29-
//! for every query. The block should contain a `format!`-style string literal followed by
30-
//! optional arguments. The query key identifier is available for use within the block, as is
31-
//! `tcx`.
32-
//! - `arena_cache`: Use an arena for in-memory caching of the query result.
33-
//! - `cache_on_disk_if { ... }`: Cache the query result to disk if the provided block evaluates to
34-
//! true. The query key identifier is available for use within the block, as is `tcx`.
35-
//! - `cycle_delay_bug`: If a dependency cycle is detected, emit a delayed bug instead of aborting immediately.
36-
//! - `cycle_stash`: If a dependency cycle is detected, stash the error for later handling.
37-
//! - `no_hash`: Do not hash the query result for incremental compilation; just mark as dirty if recomputed.
38-
//! - `anon`: Make the query anonymous in the dependency graph (no dep node is created).
39-
//! - `eval_always`: Always evaluate the query, ignoring its dependencies and cached results.
40-
//! - `depth_limit`: Impose a recursion depth limit on the query to prevent stack overflows.
41-
//! - `separate_provide_extern`: Use separate provider functions for local and external crates.
42-
//! - `feedable`: Allow the query result to be set from another query ("fed" externally).
27+
//! For the list of modifiers, see
28+
//! [`rustc_middle/src/query/modifiers.rs`](https://github.com/rust-lang/rust/blob/HEAD/compiler/rustc_middle/src/query/modifiers.rs).
4329
//!
44-
//! For the up-to-date list, see the `QueryModifiers` struct in
45-
//! [`rustc_macros/src/query.rs`](https://github.com/rust-lang/rust/blob/HEAD/compiler/rustc_macros/src/query.rs)
46-
//! and for more details in incremental compilation, see the
30+
//! For more details on incremental compilation, see the
4731
//! [Query modifiers in incremental compilation](https://rustc-dev-guide.rust-lang.org/queries/incremental-compilation-in-detail.html#query-modifiers) section of the rustc-dev-guide.
4832
//!
4933
//! ## Query Expansion and Code Generation

compiler/rustc_middle/src/query/modifiers.rs

Lines changed: 33 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -4,48 +4,68 @@
44
//! modifier names in the query list, and to allow find-all-references to list
55
//! all queries that use a particular modifier.
66
#![allow(unused, non_camel_case_types)]
7-
// FIXME: Update and clarify documentation for these modifiers.
87

98
// tidy-alphabetical-start
109
//
1110
/// # `anon` query modifier
1211
///
13-
/// Generate a dep node based on the dependencies of the query
12+
/// Generate a dep node based not on the query key, but on the query's dependencies.
1413
pub(crate) struct anon;
1514

1615
/// # `arena_cache` query modifier
1716
///
18-
/// Use this type for the in-memory cache.
17+
/// Query return values must impl `Copy` and be small, but some queries must return values that
18+
/// doesn't meet those criteria. Queries marked with this modifier have their values allocated in
19+
/// an arena and the query returns a reference to the value. There are two cases.
20+
/// - If the provider function returns `T` then the query will return `&'tcx T`.
21+
/// - If the provider function returns `Option<T>` then the query will return `Option<&'tcx T>`.
22+
///
23+
/// The query plumbing takes care of the arenas and the type manipulations.
1924
pub(crate) struct arena_cache;
2025

21-
/// # `cache_on_disk_if` query modifier
26+
/// # `cache_on_disk_if { ... }` query modifier
27+
///
28+
/// Cache the query result to disk if the provided block evaluates to true. The query key
29+
/// identifier is available for use within the block, as is `tcx`.
2230
///
23-
/// Cache the query to disk if the `Block` returns true.
31+
/// The decision to use this modifier comes down to whether it helps performance. Not all query
32+
/// results need to be saved to disk. In particular, caching values from upstream crates is
33+
/// pointless because they are already available in the upstream crate’s metadata.
2434
pub(crate) struct cache_on_disk_if;
2535

2636
/// # `cycle_delay_bug` query modifier
2737
///
28-
/// A cycle error results in a delay_bug call
38+
/// If a dependency cycle is detected, emit a delayed bug instead of a normal error.
2939
pub(crate) struct cycle_delay_bug;
3040

3141
/// # `cycle_stash` query modifier
3242
///
33-
/// A cycle error results in a stashed cycle error that can be unstashed and canceled later
43+
/// If a dependency cycle is detected, stash the error for later handling.
3444
pub(crate) struct cycle_stash;
3545

3646
/// # `depth_limit` query modifier
3747
///
38-
/// Whether the query has a call depth limit
48+
/// Impose a recursion call depth limit on the query to prevent stack overflow.
3949
pub(crate) struct depth_limit;
4050

41-
/// # `desc` query modifier
51+
/// # `desc { ... }` query modifier
4252
///
43-
/// The description of the query. This modifier is required on every query.
53+
/// The human-readable description of the query, for diagnostics and profiling. Required for every
54+
/// query. The block should contain a `format!`-style string literal followed by optional
55+
/// arguments. The query key identifier is available for use within the block, as is `tcx`.
4456
pub(crate) struct desc;
4557

4658
/// # `eval_always` query modifier
4759
///
48-
/// Always evaluate the query, ignoring its dependencies
60+
/// Queries with this modifier do not track their dependencies, and are treated as always having a
61+
/// red (dirty) dependency instead. This is necessary for queries that interact with state that
62+
/// isn't tracked by the query system.
63+
///
64+
/// It can also improve performance for queries that are so likely to be dirtied by any change that
65+
/// it's not worth tracking their actual dependencies at all.
66+
///
67+
/// As with all queries, the return value is still cached in memory for the rest of the compiler
68+
/// session.
4969
pub(crate) struct eval_always;
5070

5171
/// # `feedable` query modifier
@@ -55,12 +75,12 @@ pub(crate) struct feedable;
5575

5676
/// # `no_hash` query modifier
5777
///
58-
/// Don't hash the result, instead just mark a query red if it runs
78+
/// Do not hash the query result for incremental compilation; just mark it as dirty if recomputed.
5979
pub(crate) struct no_hash;
6080

6181
/// # `separate_provide_extern` query modifier
6282
///
63-
/// Use a separate query provider for local and extern crates
83+
/// Use separate query provider functions for local and extern crates.
6484
pub(crate) struct separate_provide_extern;
6585

6686
// tidy-alphabetical-end

0 commit comments

Comments
 (0)