about summary refs log tree commit diff
path: root/compiler/rustc_metadata/src
diff options
context:
space:
mode:
authorMichael Howell <michael@notriddle.com>2023-05-09 13:46:54 -0700
committerMichael Howell <michael@notriddle.com>2023-05-25 08:15:05 -0700
commit6a358960da438efca794020bf5497b41ce3ffe17 (patch)
tree0b6fd5c2a87ba3b993e5f83b2356b38e0d963d28 /compiler/rustc_metadata/src
parentbd90868b3f7458fa00dbd6b12927153f28556467 (diff)
downloadrust-6a358960da438efca794020bf5497b41ce3ffe17.tar.gz
rust-6a358960da438efca794020bf5497b41ce3ffe17.zip
rustc_metadata: specialize private_dep flag with `fetch_and`
Diffstat (limited to 'compiler/rustc_metadata/src')
-rw-r--r--compiler/rustc_metadata/src/creader.rs2
-rw-r--r--compiler/rustc_metadata/src/rmeta/decoder.rs7
2 files changed, 3 insertions, 6 deletions
diff --git a/compiler/rustc_metadata/src/creader.rs b/compiler/rustc_metadata/src/creader.rs
index 63a2dc5aa62..4c872664c3d 100644
--- a/compiler/rustc_metadata/src/creader.rs
+++ b/compiler/rustc_metadata/src/creader.rs
@@ -570,7 +570,7 @@ impl<'a, 'tcx> CrateLoader<'a, 'tcx> {
                 }
                 data.update_dep_kind(|data_dep_kind| cmp::max(data_dep_kind, dep_kind));
                 if let Some(private_dep) = private_dep {
-                    data.update_private_dep(|p_d| p_d && private_dep);
+                    data.update_and_private_dep(private_dep);
                 }
                 Ok(cnum)
             }
diff --git a/compiler/rustc_metadata/src/rmeta/decoder.rs b/compiler/rustc_metadata/src/rmeta/decoder.rs
index 325ffcae7e9..d2995b198f6 100644
--- a/compiler/rustc_metadata/src/rmeta/decoder.rs
+++ b/compiler/rustc_metadata/src/rmeta/decoder.rs
@@ -1668,11 +1668,8 @@ impl CrateMetadata {
         self.dep_kind.with_lock(|dep_kind| *dep_kind = f(*dep_kind))
     }
 
-    /// `f` must not perform any I/O or take any locks. It may be called more than once.
-    pub(crate) fn update_private_dep(&self, mut f: impl FnMut(bool) -> bool) {
-        self.private_dep
-            .fetch_update(Ordering::Release, Ordering::Acquire, |private_dep| Some(f(private_dep)))
-            .expect("fetch_update only returns Err if `f` returns None`, which it doesn't");
+    pub(crate) fn update_and_private_dep(&self, private_dep: bool) {
+        self.private_dep.fetch_and(private_dep, Ordering::SeqCst);
     }
 
     pub(crate) fn required_panic_strategy(&self) -> Option<PanicStrategy> {