about summary refs log tree commit diff
path: root/compiler
diff options
context:
space:
mode:
authorVadim Petrochenkov <vadim.petrochenkov@gmail.com>2023-03-23 20:44:48 +0400
committerVadim Petrochenkov <vadim.petrochenkov@gmail.com>2023-03-23 20:44:48 +0400
commit1cec923fbb9f5a71ff9664e9c8eba9d40ed02319 (patch)
treebdf1be9d99b89fd67ad8b06ccddacf2220e80fc6 /compiler
parent71927ad083f2cca93b8de388e2e3bac0cc7bd3f7 (diff)
downloadrust-1cec923fbb9f5a71ff9664e9c8eba9d40ed02319.tar.gz
rust-1cec923fbb9f5a71ff9664e9c8eba9d40ed02319.zip
rustc_metadata: Freeze cstore after the full crate list is queried
Diffstat (limited to 'compiler')
-rw-r--r--compiler/rustc_metadata/src/rmeta/decoder/cstore_impl.rs3
1 files changed, 3 insertions, 0 deletions
diff --git a/compiler/rustc_metadata/src/rmeta/decoder/cstore_impl.rs b/compiler/rustc_metadata/src/rmeta/decoder/cstore_impl.rs
index 0d54f292636..3a50d7c9363 100644
--- a/compiler/rustc_metadata/src/rmeta/decoder/cstore_impl.rs
+++ b/compiler/rustc_metadata/src/rmeta/decoder/cstore_impl.rs
@@ -490,6 +490,9 @@ pub(in crate::rmeta) fn provide(providers: &mut Providers) {
                 .alloc_slice(&CStore::from_tcx(tcx).crate_dependencies_in_postorder(LOCAL_CRATE))
         },
         crates: |tcx, ()| {
+            // The list of loaded crates is now frozen in query cache,
+            // so make sure cstore is not mutably accessed from here on.
+            tcx.untracked().cstore.leak();
             tcx.arena.alloc_from_iter(CStore::from_tcx(tcx).iter_crate_data().map(|(cnum, _)| cnum))
         },
         ..*providers