Skip to content

Commit

Permalink
Rollup merge of rust-lang#120092 - zetanumbers:pin_in_static_allocato…
Browse files Browse the repository at this point in the history
…r, r=Amanieu

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

Analogous to rust-lang#79327
Needed to preserve pin's [drop guarantee](https://doc.rust-lang.org/std/pin/index.html#drop-guarantee)
  • Loading branch information
geektype authored Feb 13, 2024
2 parents fd9bb7f + 656a388 commit ab0508b
Show file tree
Hide file tree
Showing 2 changed files with 12 additions and 3 deletions.
5 changes: 4 additions & 1 deletion library/alloc/src/rc.rs
Original file line number Diff line number Diff line change
Expand Up @@ -884,7 +884,10 @@ impl<T, A: Allocator> Rc<T, A> {
#[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)) }
}

Expand Down
10 changes: 8 additions & 2 deletions library/alloc/src/sync.rs
Original file line number Diff line number Diff line change
Expand Up @@ -807,15 +807,21 @@ impl<T, A: Allocator> Arc<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)) }
}

/// Constructs a new `Pin<Arc<T, A>>` in the provided allocator, return an error if allocation
/// 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)?)) }
}

Expand Down

0 comments on commit ab0508b

Please sign in to comment.