Skip to content

Commit e036cc2

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 cfc9ad7 commit e036cc2

2 files changed

Lines changed: 36 additions & 31 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_delayed_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 & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -4,48 +4,69 @@
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_delayed_bug` query modifier
2737
///
2838
/// A cycle error results in a delay_bug call
39+
/// If a dependency cycle is detected, emit a delayed bug instead of a normal error.
2940
pub(crate) struct cycle_delayed_bug;
3041

3142
/// # `cycle_stash` query modifier
3243
///
33-
/// A cycle error results in a stashed cycle error that can be unstashed and canceled later
44+
/// If a dependency cycle is detected, stash the error for later handling.
3445
pub(crate) struct cycle_stash;
3546

3647
/// # `depth_limit` query modifier
3748
///
38-
/// Whether the query has a call depth limit
49+
/// Impose a recursion call depth limit on the query to prevent stack overflow.
3950
pub(crate) struct depth_limit;
4051

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

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

5172
/// # `feedable` query modifier
@@ -55,12 +76,12 @@ pub(crate) struct feedable;
5576

5677
/// # `no_hash` query modifier
5778
///
58-
/// Don't hash the result, instead just mark a query red if it runs
79+
/// Do not hash the query result for incremental compilation; just mark it as dirty if recomputed.
5980
pub(crate) struct no_hash;
6081

6182
/// # `separate_provide_extern` query modifier
6283
///
63-
/// Use a separate query provider for local and extern crates
84+
/// Use separate query provider functions for local and extern crates.
6485
pub(crate) struct separate_provide_extern;
6586

6687
// tidy-alphabetical-end

0 commit comments

Comments
 (0)