summaryrefslogtreecommitdiffstats
path: root/vendor/portable-atomic/src/gen/utils.rs
diff options
context:
space:
mode:
Diffstat (limited to 'vendor/portable-atomic/src/gen/utils.rs')
-rw-r--r--vendor/portable-atomic/src/gen/utils.rs16
1 files changed, 15 insertions, 1 deletions
diff --git a/vendor/portable-atomic/src/gen/utils.rs b/vendor/portable-atomic/src/gen/utils.rs
index 1067e8821..61f6c99bf 100644
--- a/vendor/portable-atomic/src/gen/utils.rs
+++ b/vendor/portable-atomic/src/gen/utils.rs
@@ -1,3 +1,4 @@
+// SPDX-License-Identifier: Apache-2.0 OR MIT
// This file is @generated by target_spec.sh.
// It is not intended for manual editing.
@@ -45,7 +46,20 @@
macro_rules! ptr_reg {
($ptr:ident) => {{
let _: *const _ = $ptr; // ensure $ptr is a pointer (*mut _ or *const _)
- $ptr as u64
+ #[cfg(not(portable_atomic_no_asm_maybe_uninit))]
+ #[allow(clippy::ptr_as_ptr)]
+ {
+ // If we cast to u64 here, the provenance will be lost,
+ // so we convert to MaybeUninit<u64> via zero extend helper.
+ crate::utils::zero_extend64_ptr($ptr as *mut ())
+ }
+ #[cfg(portable_atomic_no_asm_maybe_uninit)]
+ {
+ // Use cast on old rustc because it does not support MaybeUninit
+ // registers. This is still permissive-provenance compatible and
+ // is sound.
+ $ptr as u64
+ }
}};
}
#[cfg(not(all(