summary refs log tree commit diff
path: root/compiler/rustc_query_system/src/query
diff options
context:
space:
mode:
authorAaron Hill <aa1ronham@gmail.com>2021-12-21 16:31:35 -0500
committerAaron Hill <aa1ronham@gmail.com>2021-12-21 16:34:12 -0500
commitf1d682334d07e125595bb73735b6045bedfb30c4 (patch)
tree75b6c4b5469f4166668ab3c67721ee0a169240b0 /compiler/rustc_query_system/src/query
parente100ec5bc7cd768ec17d75448b29c9ab4a39272b (diff)
downloadrust-f1d682334d07e125595bb73735b6045bedfb30c4.tar.gz
rust-f1d682334d07e125595bb73735b6045bedfb30c4.zip
Add `#[rustc_clean(loaded_from_disk)]` to assert loading of query result
Currently, you can use `#[rustc_clean]` to assert to that a particular
query (technically, a `DepNode`) is green or red. However, a green
`DepNode` does not mean that the query result was actually deserialized
from disk - we might have never re-run a query that needed the result.

Some incremental tests are written as regression tests for ICEs that
occured during query result decoding. Using
`#[rustc_clean(loaded_from_disk="typeck")]`, you can now assert
that the result of a particular query (e.g. `typeck`) was actually
loaded from disk, in addition to being green.
Diffstat (limited to 'compiler/rustc_query_system/src/query')
-rw-r--r--compiler/rustc_query_system/src/query/plumbing.rs4
1 files changed, 4 insertions, 0 deletions
diff --git a/compiler/rustc_query_system/src/query/plumbing.rs b/compiler/rustc_query_system/src/query/plumbing.rs
index b08db39e245..33732f9df73 100644
--- a/compiler/rustc_query_system/src/query/plumbing.rs
+++ b/compiler/rustc_query_system/src/query/plumbing.rs
@@ -519,6 +519,10 @@ where
         prof_timer.finish_with_query_invocation_id(dep_node_index.into());
 
         if let Some(result) = result {
+            if unlikely!(tcx.dep_context().sess().opts.debugging_opts.query_dep_graph) {
+                dep_graph.mark_debug_loaded_from_disk(*dep_node)
+            }
+
             let prev_fingerprint = tcx
                 .dep_context()
                 .dep_graph()