Unnamed repository; edit this file 'description' to name the repository.
Diffstat (limited to 'crates/intern/src/symbol.rs')
-rw-r--r--crates/intern/src/symbol.rs37
1 files changed, 7 insertions, 30 deletions
diff --git a/crates/intern/src/symbol.rs b/crates/intern/src/symbol.rs
index 200b14027f..b3bf285edf 100644
--- a/crates/intern/src/symbol.rs
+++ b/crates/intern/src/symbol.rs
@@ -13,7 +13,6 @@ use std::{
use dashmap::{DashMap, SharedValue};
use hashbrown::{hash_map::RawEntryMut, HashMap};
use rustc_hash::FxHasher;
-use sptr::Strict;
use triomphe::Arc;
pub mod symbols;
@@ -84,7 +83,7 @@ impl TaggedArcPtr {
#[inline]
pub(crate) unsafe fn try_as_arc_owned(self) -> Option<ManuallyDrop<Arc<Box<str>>>> {
// Unpack the tag from the alignment niche
- let tag = Strict::addr(self.packed.as_ptr()) & Self::BOOL_BITS;
+ let tag = self.packed.as_ptr().addr() & Self::BOOL_BITS;
if tag != 0 {
// Safety: We checked that the tag is non-zero -> true, so we are pointing to the data offset of an `Arc`
Some(ManuallyDrop::new(unsafe {
@@ -99,40 +98,18 @@ impl TaggedArcPtr {
fn pack_arc(ptr: NonNull<*const str>) -> NonNull<*const str> {
let packed_tag = true as usize;
- // can't use this strict provenance stuff here due to trait methods not being const
- // unsafe {
- // // Safety: The pointer is derived from a non-null
- // NonNull::new_unchecked(Strict::map_addr(ptr.as_ptr(), |addr| {
- // // Safety:
- // // - The pointer is `NonNull` => it's address is `NonZero<usize>`
- // // - `P::BITS` least significant bits are always zero (`Pointer` contract)
- // // - `T::BITS <= P::BITS` (from `Self::ASSERTION`)
- // //
- // // Thus `addr >> T::BITS` is guaranteed to be non-zero.
- // //
- // // `{non_zero} | packed_tag` can't make the value zero.
-
- // (addr >> Self::BOOL_BITS) | packed_tag
- // }))
- // }
- // so what follows is roughly what the above looks like but inlined
-
- let self_addr = ptr.as_ptr() as *const *const str as usize;
- let addr = self_addr | packed_tag;
- let dest_addr = addr as isize;
- let offset = dest_addr.wrapping_sub(self_addr as isize);
-
- // SAFETY: The resulting pointer is guaranteed to be NonNull as we only modify the niche bytes
- unsafe { NonNull::new_unchecked(ptr.as_ptr().cast::<u8>().wrapping_offset(offset).cast()) }
+ unsafe {
+ // Safety: The pointer is derived from a non-null and bit-oring it with true (1) will
+ // not make it null.
+ NonNull::new_unchecked(ptr.as_ptr().map_addr(|addr| addr | packed_tag))
+ }
}
#[inline]
pub(crate) fn pointer(self) -> NonNull<*const str> {
// SAFETY: The resulting pointer is guaranteed to be NonNull as we only modify the niche bytes
unsafe {
- NonNull::new_unchecked(Strict::map_addr(self.packed.as_ptr(), |addr| {
- addr & !Self::BOOL_BITS
- }))
+ NonNull::new_unchecked(self.packed.as_ptr().map_addr(|addr| addr & !Self::BOOL_BITS))
}
}