Simplify control flow.

This commit is contained in:
Camille GILLOT 2021-05-12 08:50:03 +02:00
parent 0edc775b90
commit cd1cb3449e

View file

@ -528,7 +528,8 @@ where
debug_assert!(tcx.dep_context().dep_graph().is_green(dep_node)); debug_assert!(tcx.dep_context().dep_graph().is_green(dep_node));
// First we try to load the result from the on-disk cache. // First we try to load the result from the on-disk cache.
let result = if query.cache_on_disk(tcx, key, None) { // Some things are never cached on disk.
if query.cache_on_disk(tcx, key, None) {
let prof_timer = tcx.dep_context().profiler().incr_cache_loading(); let prof_timer = tcx.dep_context().profiler().incr_cache_loading();
let result = query.try_load_from_disk(tcx, prev_dep_node_index); let result = query.try_load_from_disk(tcx, prev_dep_node_index);
prof_timer.finish_with_query_invocation_id(dep_node_index.into()); prof_timer.finish_with_query_invocation_id(dep_node_index.into());
@ -540,44 +541,38 @@ where
"missing on-disk cache entry for {:?}", "missing on-disk cache entry for {:?}",
dep_node dep_node
); );
result
} else {
// Some things are never cached on disk.
None
};
let result = if let Some(result) = result { if let Some(result) = result {
// If `-Zincremental-verify-ich` is specified, re-hash results from // If `-Zincremental-verify-ich` is specified, re-hash results from
// the cache and make sure that they have the expected fingerprint. // the cache and make sure that they have the expected fingerprint.
if unlikely!(tcx.dep_context().sess().opts.debugging_opts.incremental_verify_ich) { if unlikely!(tcx.dep_context().sess().opts.debugging_opts.incremental_verify_ich) {
incremental_verify_ich(*tcx.dep_context(), &result, dep_node, query); incremental_verify_ich(*tcx.dep_context(), &result, dep_node, query);
}
return Some((result, dep_node_index));
} }
}
result // We could not load a result from the on-disk cache, so
} else { // recompute.
// We could not load a result from the on-disk cache, so let prof_timer = tcx.dep_context().profiler().query_provider();
// recompute.
let prof_timer = tcx.dep_context().profiler().query_provider();
// The dep-graph for this computation is already in-place. // The dep-graph for this computation is already in-place.
let result = let result =
tcx.dep_context().dep_graph().with_ignore(|| compute(*tcx.dep_context(), key.clone())); tcx.dep_context().dep_graph().with_ignore(|| compute(*tcx.dep_context(), key.clone()));
prof_timer.finish_with_query_invocation_id(dep_node_index.into()); prof_timer.finish_with_query_invocation_id(dep_node_index.into());
// Verify that re-running the query produced a result with the expected hash // Verify that re-running the query produced a result with the expected hash
// This catches bugs in query implementations, turning them into ICEs. // This catches bugs in query implementations, turning them into ICEs.
// For example, a query might sort its result by `DefId` - since `DefId`s are // For example, a query might sort its result by `DefId` - since `DefId`s are
// not stable across compilation sessions, the result could get up getting sorted // not stable across compilation sessions, the result could get up getting sorted
// in a different order when the query is re-run, even though all of the inputs // in a different order when the query is re-run, even though all of the inputs
// (e.g. `DefPathHash` values) were green. // (e.g. `DefPathHash` values) were green.
// //
// See issue #82920 for an example of a miscompilation that would get turned into // See issue #82920 for an example of a miscompilation that would get turned into
// an ICE by this check // an ICE by this check
incremental_verify_ich(*tcx.dep_context(), &result, dep_node, query); incremental_verify_ich(*tcx.dep_context(), &result, dep_node, query);
result
};
Some((result, dep_node_index)) Some((result, dep_node_index))
} }