Rollup merge of #106856 - vadorovsky:fix-atomic-annotations, r=joshtriplett
core: Support variety of atomic widths in width-agnostic functions Before this change, the following functions and macros were annotated with `#[cfg(target_has_atomic = "8")]` or `#[cfg(target_has_atomic_load_store = "8")]`: * `atomic_int` * `strongest_failure_ordering` * `atomic_swap` * `atomic_add` * `atomic_sub` * `atomic_compare_exchange` * `atomic_compare_exchange_weak` * `atomic_and` * `atomic_nand` * `atomic_or` * `atomic_xor` * `atomic_max` * `atomic_min` * `atomic_umax` * `atomic_umin` However, none of those functions and macros actually depend on 8-bit width and they are needed for all atomic widths (16-bit, 32-bit, 64-bit etc.). Some targets might not support 8-bit atomics (i.e. BPF, if we would enable atomic CAS for it). This change fixes that by removing the `"8"` argument from annotations, which results in accepting the whole variety of widths. Fixes #106845 Fixes #106795 Signed-off-by: Michal Rostecki <vadorovsky@gmail.com>
This commit is contained in:
commit
bf321ece1e
2 changed files with 38 additions and 15 deletions
|
@ -945,6 +945,7 @@ fn default_configuration(sess: &Session) -> CrateConfig {
|
|||
if sess.target.has_thread_local {
|
||||
ret.insert((sym::target_thread_local, None));
|
||||
}
|
||||
let mut has_atomic = false;
|
||||
for (i, align) in [
|
||||
(8, layout.i8_align.abi),
|
||||
(16, layout.i16_align.abi),
|
||||
|
@ -953,6 +954,7 @@ fn default_configuration(sess: &Session) -> CrateConfig {
|
|||
(128, layout.i128_align.abi),
|
||||
] {
|
||||
if i >= min_atomic_width && i <= max_atomic_width {
|
||||
has_atomic = true;
|
||||
let mut insert_atomic = |s, align: Align| {
|
||||
ret.insert((sym::target_has_atomic_load_store, Some(Symbol::intern(s))));
|
||||
if atomic_cas {
|
||||
|
@ -969,6 +971,12 @@ fn default_configuration(sess: &Session) -> CrateConfig {
|
|||
}
|
||||
}
|
||||
}
|
||||
if sess.is_nightly_build() && has_atomic {
|
||||
ret.insert((sym::target_has_atomic_load_store, None));
|
||||
if atomic_cas {
|
||||
ret.insert((sym::target_has_atomic, None));
|
||||
}
|
||||
}
|
||||
|
||||
let panic_strategy = sess.panic_strategy();
|
||||
ret.insert((sym::panic, Some(panic_strategy.desc_symbol())));
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue