Skip to content

Commit db74e1f

Browse files
committed
Add cfg(target_has_atomic_equal_alignment).
This is needed for Atomic::from_mut.
1 parent 4eff9b0 commit db74e1f

File tree

3 files changed

+21
-4
lines changed

3 files changed

+21
-4
lines changed

compiler/rustc_feature/src/builtin_attrs.rs

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,11 @@ const GATED_CFGS: &[GatedCfg] = &[
2626
(sym::target_thread_local, sym::cfg_target_thread_local, cfg_fn!(cfg_target_thread_local)),
2727
(sym::target_has_atomic, sym::cfg_target_has_atomic, cfg_fn!(cfg_target_has_atomic)),
2828
(sym::target_has_atomic_load_store, sym::cfg_target_has_atomic, cfg_fn!(cfg_target_has_atomic)),
29+
(
30+
sym::target_has_atomic_equal_alignment,
31+
sym::cfg_target_has_atomic,
32+
cfg_fn!(cfg_target_has_atomic),
33+
),
2934
(sym::sanitize, sym::cfg_sanitize, cfg_fn!(cfg_sanitize)),
3035
(sym::version, sym::cfg_version, cfg_fn!(cfg_version)),
3136
];

compiler/rustc_session/src/config.rs

Lines changed: 15 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@ use rustc_data_structures::fx::FxHashSet;
1212
use rustc_data_structures::impl_stable_hash_via_hash;
1313
use rustc_data_structures::stable_hasher::{HashStable, StableHasher};
1414

15+
use rustc_target::abi::{Align, TargetDataLayout};
1516
use rustc_target::spec::{Target, TargetTriple};
1617

1718
use crate::parse::CrateConfig;
@@ -748,6 +749,7 @@ pub fn default_configuration(sess: &Session) -> CrateConfig {
748749
let min_atomic_width = sess.target.target.min_atomic_width();
749750
let max_atomic_width = sess.target.target.max_atomic_width();
750751
let atomic_cas = sess.target.target.options.atomic_cas;
752+
let layout = TargetDataLayout::parse(&sess.target.target).unwrap();
751753

752754
let mut ret = FxHashSet::default();
753755
ret.reserve(6); // the minimum number of insertions
@@ -769,18 +771,27 @@ pub fn default_configuration(sess: &Session) -> CrateConfig {
769771
if sess.target.target.options.has_elf_tls {
770772
ret.insert((sym::target_thread_local, None));
771773
}
772-
for &i in &[8, 16, 32, 64, 128] {
774+
for &(i, align) in &[
775+
(8, layout.i8_align.abi),
776+
(16, layout.i16_align.abi),
777+
(32, layout.i32_align.abi),
778+
(64, layout.i64_align.abi),
779+
(128, layout.i128_align.abi),
780+
] {
773781
if i >= min_atomic_width && i <= max_atomic_width {
774-
let mut insert_atomic = |s| {
782+
let mut insert_atomic = |s, align: Align| {
775783
ret.insert((sym::target_has_atomic_load_store, Some(Symbol::intern(s))));
776784
if atomic_cas {
777785
ret.insert((sym::target_has_atomic, Some(Symbol::intern(s))));
778786
}
787+
if align.bits() == i {
788+
ret.insert((sym::target_has_atomic_equal_alignment, Some(Symbol::intern(s))));
789+
}
779790
};
780791
let s = i.to_string();
781-
insert_atomic(&s);
792+
insert_atomic(&s, align);
782793
if &s == wordsz {
783-
insert_atomic("ptr");
794+
insert_atomic("ptr", layout.pointer_align.abi);
784795
}
785796
}
786797
}

compiler/rustc_span/src/symbol.rs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1071,6 +1071,7 @@ symbols! {
10711071
target_feature,
10721072
target_feature_11,
10731073
target_has_atomic,
1074+
target_has_atomic_equal_alignment,
10741075
target_has_atomic_load_store,
10751076
target_os,
10761077
target_pointer_width,

0 commit comments

Comments
 (0)