Skip to content

Commit

Permalink
use portable AtomicU64 for powerPC and MIPS
Browse files Browse the repository at this point in the history
  • Loading branch information
SparrowLii committed Nov 6, 2023
1 parent 248dd14 commit f2a40e9
Show file tree
Hide file tree
Showing 5 changed files with 28 additions and 4 deletions.
5 changes: 3 additions & 2 deletions Cargo.lock
Expand Up @@ -2982,9 +2982,9 @@ dependencies = [

[[package]]
name = "portable-atomic"
version = "1.4.2"
version = "1.5.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "f32154ba0af3a075eefa1eda8bb414ee928f62303a54ea85b8d6638ff1a6ee9e"
checksum = "3bccab0e7fd7cc19f820a1c8c91720af652d0c88dc9664dd72aef2614f04af3b"

[[package]]
name = "ppv-lite86"
Expand Down Expand Up @@ -3712,6 +3712,7 @@ dependencies = [
"measureme",
"memmap2",
"parking_lot 0.12.1",
"portable-atomic",
"rustc-hash",
"rustc-rayon",
"rustc-rayon-core",
Expand Down
3 changes: 3 additions & 0 deletions compiler/rustc_data_structures/Cargo.toml
Expand Up @@ -47,6 +47,9 @@ features = [
memmap2 = "0.2.1"
# tidy-alphabetical-end

[target.'cfg(any(target_arch = "powerpc", target_arch = "mips"))'.dependencies]
portable-atomic = "1.5.1"

[features]
# tidy-alphabetical-start
rustc_use_parallel_compiler = ["indexmap/rustc-rayon", "rustc-rayon", "rustc-rayon-core"]
Expand Down
13 changes: 12 additions & 1 deletion compiler/rustc_data_structures/src/marker.rs
Expand Up @@ -138,7 +138,6 @@ cfg_match! {
[std::sync::atomic::AtomicUsize]
[std::sync::atomic::AtomicU8]
[std::sync::atomic::AtomicU32]
[std::sync::atomic::AtomicU64]
[std::backtrace::Backtrace]
[std::io::Error]
[std::fs::File]
Expand All @@ -148,6 +147,18 @@ cfg_match! {
[crate::owned_slice::OwnedSlice]
);

// PowerPC and MIPS platforms with 32-bit pointers do not
// have AtomicU64 type.
#[cfg(not(any(target_arch = "powerpc", target_arch = "mips")))]
already_sync!(
[std::sync::atomic::AtomicU64]
);

#[cfg(any(target_arch = "powerpc", target_arch = "mips"))]
already_sync!(
[portable_atomic::AtomicU64]
);

macro_rules! impl_dyn_sync {
($($($attr: meta)* [$ty: ty where $($generics2: tt)*])*) => {
$(unsafe impl<$($generics2)*> DynSync for $ty {})*
Expand Down
10 changes: 9 additions & 1 deletion compiler/rustc_data_structures/src/sync.rs
Expand Up @@ -265,7 +265,15 @@ cfg_match! {

pub use std::sync::OnceLock;

pub use std::sync::atomic::{AtomicBool, AtomicUsize, AtomicU32, AtomicU64};
pub use std::sync::atomic::{AtomicBool, AtomicUsize, AtomicU32};

// PowerPC and MIPS platforms with 32-bit pointers do not
// have AtomicU64 type.
#[cfg(not(any(target_arch = "powerpc", target_arch = "mips")))]
pub use std::sync::atomic::AtomicU64;

#[cfg(any(target_arch = "powerpc", target_arch = "mips"))]
pub use portable_atomic::AtomicU64;

pub use std::sync::Arc as Lrc;
pub use std::sync::Weak as Weak;
Expand Down
1 change: 1 addition & 0 deletions src/tools/tidy/src/deps.rs
Expand Up @@ -211,6 +211,7 @@ const PERMITTED_RUSTC_DEPENDENCIES: &[&str] = &[
"perf-event-open-sys",
"pin-project-lite",
"polonius-engine",
"portable-atomic", // dependency for platforms doesn't support `AtomicU64` in std
"ppv-lite86",
"proc-macro-hack",
"proc-macro2",
Expand Down

0 comments on commit f2a40e9

Please sign in to comment.