Auto merge of #120092 - zetanumbers:pin_in_static_allocator, r=Amanieu

Add `A: 'static` bound for `Arc/Rc::pin_in`

Analogous to https://github.com/rust-lang/rust/pull/79327
Needed to preserve pin's [drop guarantee](https://doc.rust-lang.org/std/pin/index.html#drop-guarantee)
This commit is contained in:
bors 2024-04-12 00:03:43 +00:00
commit 46961d2407
2 changed files with 12 additions and 3 deletions

View file

@ -884,7 +884,10 @@ pub fn try_new_zeroed_in(alloc: A) -> Result<Rc<mem::MaybeUninit<T>, A>, AllocEr
#[cfg(not(no_global_oom_handling))]
#[unstable(feature = "allocator_api", issue = "32838")]
#[inline]
pub fn pin_in(value: T, alloc: A) -> Pin<Self> {
pub fn pin_in(value: T, alloc: A) -> Pin<Self>
where
A: 'static,
{
unsafe { Pin::new_unchecked(Rc::new_in(value, alloc)) }
}

View file

@ -807,7 +807,10 @@ pub fn new_zeroed_in(alloc: A) -> Arc<mem::MaybeUninit<T>, A> {
#[cfg(not(no_global_oom_handling))]
#[unstable(feature = "allocator_api", issue = "32838")]
#[inline]
pub fn pin_in(data: T, alloc: A) -> Pin<Arc<T, A>> {
pub fn pin_in(data: T, alloc: A) -> Pin<Arc<T, A>>
where
A: 'static,
{
unsafe { Pin::new_unchecked(Arc::new_in(data, alloc)) }
}
@ -815,7 +818,10 @@ pub fn pin_in(data: T, alloc: A) -> Pin<Arc<T, A>> {
/// fails.
#[inline]
#[unstable(feature = "allocator_api", issue = "32838")]
pub fn try_pin_in(data: T, alloc: A) -> Result<Pin<Arc<T, A>>, AllocError> {
pub fn try_pin_in(data: T, alloc: A) -> Result<Pin<Arc<T, A>>, AllocError>
where
A: 'static,
{
unsafe { Ok(Pin::new_unchecked(Arc::try_new_in(data, alloc)?)) }
}