mirror of
https://github.com/rust-lang/rust.git
synced 2026-04-27 18:57:42 +03:00
Remove an unhelpful assertion from force_from_dep_node_inner
This assertion and its comment are much visually heavier than the part of the function that actually performs important work. This assertion is also useless, because the `codegen_unit` query does not have a `force_from_dep_node_fn` in its DepKindVTable, so the assertion would never be reached even in the situation it is trying to guard against. This assertion is also redundant, because we have plenty of incremental tests that fail if the corresponding calls to `tcx.ensure_ok().codegen_unit(..)` are removed.
This commit is contained in:
@@ -6,7 +6,7 @@
|
||||
use rustc_middle::bug;
|
||||
#[expect(unused_imports, reason = "used by doc comments")]
|
||||
use rustc_middle::dep_graph::DepKindVTable;
|
||||
use rustc_middle::dep_graph::{DepKind, DepNode, DepNodeIndex, DepNodeKey, SerializedDepNodeIndex};
|
||||
use rustc_middle::dep_graph::{DepNode, DepNodeIndex, DepNodeKey, SerializedDepNodeIndex};
|
||||
use rustc_middle::query::erase::{Erasable, Erased};
|
||||
use rustc_middle::query::on_disk_cache::{
|
||||
AbsoluteBytePos, CacheDecoder, CacheEncoder, EncodedDepNodeIndex,
|
||||
@@ -230,24 +230,6 @@ pub(crate) fn force_from_dep_node_inner<'tcx, Q: GetQueryVTable<'tcx>>(
|
||||
) -> bool {
|
||||
let query = Q::query_vtable(tcx);
|
||||
|
||||
// We must avoid ever having to call `force_from_dep_node()` for a
|
||||
// `DepNode::codegen_unit`:
|
||||
// Since we cannot reconstruct the query key of a `DepNode::codegen_unit`, we
|
||||
// would always end up having to evaluate the first caller of the
|
||||
// `codegen_unit` query that *is* reconstructible. This might very well be
|
||||
// the `compile_codegen_unit` query, thus re-codegenning the whole CGU just
|
||||
// to re-trigger calling the `codegen_unit` query with the right key. At
|
||||
// that point we would already have re-done all the work we are trying to
|
||||
// avoid doing in the first place.
|
||||
// The solution is simple: Just explicitly call the `codegen_unit` query for
|
||||
// each CGU, right after partitioning. This way `try_mark_green` will always
|
||||
// hit the cache instead of having to go through `force_from_dep_node`.
|
||||
// This assertion makes sure, we actually keep applying the solution above.
|
||||
debug_assert!(
|
||||
dep_node.kind != DepKind::codegen_unit,
|
||||
"calling force_from_dep_node() on dep_kinds::codegen_unit"
|
||||
);
|
||||
|
||||
if let Some(key) = <Q::Cache as QueryCache>::Key::try_recover_key(tcx, &dep_node) {
|
||||
force_query(query, tcx, key, dep_node);
|
||||
true
|
||||
|
||||
Reference in New Issue
Block a user