@@ -2091,10 +2091,10 @@ impl<T> From<*mut T> for AtomicPtr<T> {
2091
2091
}
2092
2092
2093
2093
#[ 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 ) * ) ? ) } ;
2098
2098
}
2099
2099
2100
2100
#[ cfg( target_has_atomic_load_store) ]
@@ -2116,18 +2116,24 @@ macro_rules! atomic_int {
2116
2116
$int_type: ident $atomic_type: ident) => {
2117
2117
/// An integer type which can be safely shared between threads.
2118
2118
///
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, [`
2121
2126
#[ doc = $s_int_type]
2122
2127
/// `].
2123
- #[ doc = if_not_8_bit ! {
2128
+ #[ doc = if_8_bit ! {
2124
2129
$int_type,
2125
- concat! (
2130
+ no = [
2126
2131
"However, the alignment of this type is always equal to its " ,
2127
2132
"size, even on targets where [`" , $s_int_type, "`] has a " ,
2128
2133
"lesser alignment."
2129
- )
2134
+ ] ,
2130
2135
} ]
2136
+ ///
2131
2137
/// For more about the differences between atomic types and
2132
2138
/// non-atomic types as well as information about the portability of
2133
2139
/// this type, please see the [module-level documentation].
@@ -2220,9 +2226,19 @@ macro_rules! atomic_int {
2220
2226
///
2221
2227
/// # Safety
2222
2228
///
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
+ } ]
2226
2242
/// * `ptr` must be [valid] for both reads and writes for the whole lifetime `'a`.
2227
2243
/// * You must adhere to the [Memory model for atomic accesses]. In particular, it is not
2228
2244
/// allowed to mix atomic and non-atomic accesses, or atomic accesses of different sizes,
@@ -2261,12 +2277,12 @@ macro_rules! atomic_int {
2261
2277
2262
2278
#[ doc = concat!( "Get atomic access to a `&mut " , stringify!( $int_type) , "`." ) ]
2263
2279
///
2264
- #[ doc = if_not_8_bit ! {
2280
+ #[ doc = if_8_bit ! {
2265
2281
$int_type,
2266
- concat! (
2282
+ no = [
2267
2283
"**Note:** This function is only available on targets where `" ,
2268
2284
stringify!( $int_type) , "` has an alignment of " , $align, " bytes."
2269
- )
2285
+ ] ,
2270
2286
} ]
2271
2287
///
2272
2288
/// # Examples
0 commit comments