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