Skip to content

Commit bbc9674

Browse files
committed
rustc_metadata: specialize private_dep flag with fetch_and
1 parent 1b1c787 commit bbc9674

File tree

3 files changed

+7
-19
lines changed

3 files changed

+7
-19
lines changed

compiler/rustc_data_structures/src/sync.rs

Lines changed: 4 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -106,19 +106,10 @@ cfg_if! {
106106
self.0.set(val);
107107
result
108108
}
109-
pub fn fetch_update(
110-
&self,
111-
_order_set: Ordering,
112-
_order_get: Ordering,
113-
mut f: impl FnMut(bool) -> Option<bool>,
114-
) -> Result<bool, bool> {
115-
let prev = self.0.get();
116-
if let Some(next) = f(prev) {
117-
self.0.set(next);
118-
Ok(prev)
119-
} else {
120-
Err(prev)
121-
}
109+
pub fn fetch_and(&self, val: bool, _: Ordering) -> bool {
110+
let result = self.0.get() & val;
111+
self.0.set(val);
112+
result
122113
}
123114
}
124115

compiler/rustc_metadata/src/creader.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -566,7 +566,7 @@ impl<'a, 'tcx> CrateLoader<'a, 'tcx> {
566566
}
567567
data.update_dep_kind(|data_dep_kind| cmp::max(data_dep_kind, dep_kind));
568568
if let Some(private_dep) = private_dep {
569-
data.update_private_dep(|p_d| p_d && private_dep);
569+
data.update_and_private_dep(private_dep);
570570
}
571571
Ok(cnum)
572572
}

compiler/rustc_metadata/src/rmeta/decoder.rs

Lines changed: 2 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1661,11 +1661,8 @@ impl CrateMetadata {
16611661
self.dep_kind.with_lock(|dep_kind| *dep_kind = f(*dep_kind))
16621662
}
16631663

1664-
/// `f` must not perform any I/O or take any locks. It may be called more than once.
1665-
pub(crate) fn update_private_dep(&self, mut f: impl FnMut(bool) -> bool) {
1666-
self.private_dep
1667-
.fetch_update(Ordering::Release, Ordering::Acquire, |private_dep| Some(f(private_dep)))
1668-
.expect("fetch_update only returns Err if `f` returns None`, which it doesn't");
1664+
pub(crate) fn update_and_private_dep(&self, private_dep: bool) {
1665+
self.private_dep.fetch_and(private_dep, Ordering::SeqCst);
16691666
}
16701667

16711668
pub(crate) fn required_panic_strategy(&self) -> Option<PanicStrategy> {

0 commit comments

Comments
 (0)