Rollup merge of #103702 - WaffleLapkin:lift-sized-bounds-from-pointer-methods-where-applicable, r=m-ou-se
Lift `T: Sized` bounds from some `strict_provenance` pointer methods This PR removes requirement for `T` (pointee type) to be `Sized` to call `pointer::{addr, expose_addr, with_addr, map_addr}`. These functions don't use `T`'s size, so there is no reason for them to require this. Updated public API: cc ``@Gankra,`` #95228 r? libs-api
This commit is contained in:
commit
d6ea99d2ed
3 changed files with 15 additions and 48 deletions
|
@ -208,14 +208,11 @@ impl<T: ?Sized> *mut T {
|
|||
#[must_use]
|
||||
#[inline(always)]
|
||||
#[unstable(feature = "strict_provenance", issue = "95228")]
|
||||
pub fn addr(self) -> usize
|
||||
where
|
||||
T: Sized,
|
||||
{
|
||||
pub fn addr(self) -> usize {
|
||||
// FIXME(strict_provenance_magic): I am magic and should be a compiler intrinsic.
|
||||
// SAFETY: Pointer-to-integer transmutes are valid (if you are okay with losing the
|
||||
// provenance).
|
||||
unsafe { mem::transmute(self) }
|
||||
unsafe { mem::transmute(self.cast::<()>()) }
|
||||
}
|
||||
|
||||
/// Gets the "address" portion of the pointer, and 'exposes' the "provenance" part for future
|
||||
|
@ -245,12 +242,9 @@ impl<T: ?Sized> *mut T {
|
|||
#[must_use]
|
||||
#[inline(always)]
|
||||
#[unstable(feature = "strict_provenance", issue = "95228")]
|
||||
pub fn expose_addr(self) -> usize
|
||||
where
|
||||
T: Sized,
|
||||
{
|
||||
pub fn expose_addr(self) -> usize {
|
||||
// FIXME(strict_provenance_magic): I am magic and should be a compiler intrinsic.
|
||||
self as usize
|
||||
self.cast::<()>() as usize
|
||||
}
|
||||
|
||||
/// Creates a new pointer with the given address.
|
||||
|
@ -268,10 +262,7 @@ impl<T: ?Sized> *mut T {
|
|||
#[must_use]
|
||||
#[inline]
|
||||
#[unstable(feature = "strict_provenance", issue = "95228")]
|
||||
pub fn with_addr(self, addr: usize) -> Self
|
||||
where
|
||||
T: Sized,
|
||||
{
|
||||
pub fn with_addr(self, addr: usize) -> Self {
|
||||
// FIXME(strict_provenance_magic): I am magic and should be a compiler intrinsic.
|
||||
//
|
||||
// In the mean-time, this operation is defined to be "as if" it was
|
||||
|
@ -294,10 +285,7 @@ impl<T: ?Sized> *mut T {
|
|||
#[must_use]
|
||||
#[inline]
|
||||
#[unstable(feature = "strict_provenance", issue = "95228")]
|
||||
pub fn map_addr(self, f: impl FnOnce(usize) -> usize) -> Self
|
||||
where
|
||||
T: Sized,
|
||||
{
|
||||
pub fn map_addr(self, f: impl FnOnce(usize) -> usize) -> Self {
|
||||
self.with_addr(f(self.addr()))
|
||||
}
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue