about summary refs log tree commit diff
path: root/src/test/incremental
diff options
context:
space:
mode:
authorAaron Hill <aa1ronham@gmail.com>2020-12-04 18:37:21 -0500
committerAaron Hill <aa1ronham@gmail.com>2020-12-04 22:16:40 -0500
commitc2946402ffb5edde461b5047213e56b4e1500ec8 (patch)
tree6934b4679aa914e0633f30142979289e82f51032 /src/test/incremental
parent3ff10e74a74ed093fcabac1de27fe1cd65bbbb4a (diff)
downloadrust-c2946402ffb5edde461b5047213e56b4e1500ec8.tar.gz
rust-c2946402ffb5edde461b5047213e56b4e1500ec8.zip
Properly re-use def path hash in incremental mode
Fixes #79661

In incremental compilation mode, we update a `DefPathHash -> DefId`
mapping every time we create a `DepNode` for a foreign `DefId`.
This mapping is written out to the on-disk incremental cache, and is
read by the next compilation session to allow us to lazily decode
`DefId`s.

When we decode a `DepNode` from the current incremental cache, we need
to ensure that any previously-recorded `DefPathHash -> DefId` mapping
gets recorded in the new mapping that we write out. However, PR #74967
didn't do this in all cases, leading to us being unable to decode a
`DefPathHash` in certain circumstances.

This PR refactors some of the code around `DepNode` deserialization to
prevent this kind of mistake from happening again.
Diffstat (limited to 'src/test/incremental')
-rw-r--r--src/test/incremental/auxiliary/issue-79661.rs6
-rw-r--r--src/test/incremental/issue-79661-missing-def-path-hash.rs14
2 files changed, 20 insertions, 0 deletions
diff --git a/src/test/incremental/auxiliary/issue-79661.rs b/src/test/incremental/auxiliary/issue-79661.rs
new file mode 100644
index 00000000000..cd32a52ebfd
--- /dev/null
+++ b/src/test/incremental/auxiliary/issue-79661.rs
@@ -0,0 +1,6 @@
+#![feature(rustc_attrs)]
+
+#[cfg_attr(any(rpass2, rpass3), doc = "Some comment")]
+pub struct Foo;
+
+pub struct Wrapper(Foo);
diff --git a/src/test/incremental/issue-79661-missing-def-path-hash.rs b/src/test/incremental/issue-79661-missing-def-path-hash.rs
new file mode 100644
index 00000000000..f86fb33fbf6
--- /dev/null
+++ b/src/test/incremental/issue-79661-missing-def-path-hash.rs
@@ -0,0 +1,14 @@
+// aux-build:issue-79661.rs
+// revisions: rpass1 rpass2 rpass3
+
+// Regression test for issue #79661
+// We were failing to copy over a DefPathHash->DefId mapping
+// from the old incremental cache to the new incremental cache
+// when we ended up forcing a query. As a result, a subsequent
+// unchanged incremental run would crash due to the missing mapping
+
+extern crate issue_79661;
+use issue_79661::Wrapper;
+
+pub struct Outer(Wrapper);
+fn main() {}