Update docs for AtomicU8/I8. · rust-lang/rust@2d4cb7a

@@ -2091,10 +2091,10 @@ impl<T> From<*mut T> for AtomicPtr<T> {

20912091

}

2092209220932093

#[allow(unused_macros)] // This macro ends up being unused on some architectures.

2094-

macro_rules! if_not_8_bit {

2095-

(u8, $($tt:tt)*) => { "" };

2096-

(i8, $($tt:tt)*) => { "" };

2097-

($_:ident, $($tt:tt)*) => { $($tt)* };

2094+

macro_rules! if_8_bit {

2095+

(u8, $( yes = [$($yes:tt)*], )? $( no = [$($no:tt)*], )? ) => { concat!("", $($($yes)*)?) };

2096+

(i8, $( yes = [$($yes:tt)*], )? $( no = [$($no:tt)*], )? ) => { concat!("", $($($yes)*)?) };

2097+

($_:ident, $( yes = [$($yes:tt)*], )? $( no = [$($no:tt)*], )? ) => { concat!("", $($($no)*)?) };

20982098

}

2099209921002100

#[cfg(target_has_atomic_load_store)]

@@ -2116,18 +2116,24 @@ macro_rules! atomic_int {

21162116

$int_type:ident $atomic_type:ident) => {

21172117

/// An integer type which can be safely shared between threads.

21182118

///

2119-

/// This type has the same size and bit validity as the underlying

2120-

/// integer type, [`

2119+

/// This type has the same

2120+

#[doc = if_8_bit!(

2121+

$int_type,

2122+

yes = ["size, alignment, and bit validity"],

2123+

no = ["size and bit validity"],

2124+

)]

2125+

/// as the underlying integer type, [`

21212126

#[doc = $s_int_type]

21222127

/// `].

2123-

#[doc = if_not_8_bit! {

2128+

#[doc = if_8_bit! {

21242129

$int_type,

2125-

concat!(

2130+

no = [

21262131

"However, the alignment of this type is always equal to its ",

21272132

"size, even on targets where [`", $s_int_type, "`] has a ",

21282133

"lesser alignment."

2129-

)

2134+

],

21302135

}]

2136+

///

21312137

/// For more about the differences between atomic types and

21322138

/// non-atomic types as well as information about the portability of

21332139

/// this type, please see the [module-level documentation].

@@ -2220,9 +2226,19 @@ macro_rules! atomic_int {

22202226

///

22212227

/// # Safety

22222228

///

2223-

#[doc = concat!(" * `ptr` must be aligned to \

2224-

`align_of::<", stringify!($atomic_type), ">()` (note that on some platforms this \

2225-

can be bigger than `align_of::<", stringify!($int_type), ">()`).")]

2229+

/// * `ptr` must be aligned to

2230+

#[doc = concat!(" `align_of::<", stringify!($atomic_type), ">()`")]

2231+

#[doc = if_8_bit!{

2232+

$int_type,

2233+

yes = [

2234+

" (note that this is always true, since `align_of::<",

2235+

stringify!($atomic_type), ">() == 1`)."

2236+

],

2237+

no = [

2238+

" (note that on some platforms this can be bigger than `align_of::<",

2239+

stringify!($int_type), ">()`)."

2240+

],

2241+

}]

22262242

/// * `ptr` must be [valid] for both reads and writes for the whole lifetime `'a`.

22272243

/// * You must adhere to the [Memory model for atomic accesses]. In particular, it is not

22282244

/// allowed to mix atomic and non-atomic accesses, or atomic accesses of different sizes,

@@ -2261,12 +2277,12 @@ macro_rules! atomic_int {

2261227722622278

#[doc = concat!("Get atomic access to a `&mut ", stringify!($int_type), "`.")]

22632279

///

2264-

#[doc = if_not_8_bit! {

2280+

#[doc = if_8_bit! {

22652281

$int_type,

2266-

concat!(

2282+

no = [

22672283

"**Note:** This function is only available on targets where `",

22682284

stringify!($int_type), "` has an alignment of ", $align, " bytes."

2269-

)

2285+

],

22702286

}]

22712287

///

22722288

/// # Examples