diff options
| author | bors <bors@rust-lang.org> | 2019-01-05 17:39:59 +0000 |
|---|---|---|
| committer | bors <bors@rust-lang.org> | 2019-01-05 17:39:59 +0000 |
| commit | 68fe5182c967259ef89dbe313e4bf80f45a53e7e (patch) | |
| tree | 65c485adc2dcccde552b1a7e24f467f94fa15fa7 /src/liballoc | |
| parent | 8c2d0f4a1da300cb34d77fbcdd9f7209cc556582 (diff) | |
| parent | d9885c41de48145c6177ed4dd7d24a10e350f1d1 (diff) | |
| download | rust-68fe5182c967259ef89dbe313e4bf80f45a53e7e.tar.gz rust-68fe5182c967259ef89dbe313e4bf80f45a53e7e.zip | |
Auto merge of #57354 - kennytm:rollup, r=kennytm
Rollup of 17 pull requests Successful merges: - #57219 (Remove some unused code) - #57229 (Fix #56806 by using `delay_span_bug` in object safety layout sanity checks) - #57233 (Rename and fix nolink-with-link-args test) - #57238 (Fix backtraces for inlined functions on Windows) - #57249 (Fix broken links to second edition TRPL.) - #57267 (src/jemalloc is gone, remove its mention from COPYRIGHT) - #57273 (Update the stdsimd submodule) - #57278 (Add Clippy to config.toml.example) - #57295 (Fix 'be be' constructs) - #57311 (VaList::copy should not require a mutable ref) - #57312 (`const fn` is no longer coming soon (const keyword docs)) - #57313 (Improve Box<T> -> Pin<Box<T>> conversion) - #57314 (Fix repeated word typos) - #57326 (Doc rewording, use the same name `writer`) - #57338 (rustdoc: force binary filename for compiled doctests) - #57342 (librustc_mir: Make qualify_min_const_fn module public) - #57343 (Calculate privacy access only via query) Failed merges: - #57340 (Use correct tracking issue for c_variadic) r? @ghost
Diffstat (limited to 'src/liballoc')
| -rw-r--r-- | src/liballoc/boxed.rs | 20 |
1 files changed, 15 insertions, 5 deletions
diff --git a/src/liballoc/boxed.rs b/src/liballoc/boxed.rs index fbd0b948b82..1c459f5c425 100644 --- a/src/liballoc/boxed.rs +++ b/src/liballoc/boxed.rs @@ -257,6 +257,19 @@ impl<T: ?Sized> Box<T> { { unsafe { &mut *Box::into_raw(b) } } + + /// Converts a `Box<T>` into a `Pin<Box<T>>` + /// + /// This conversion does not allocate on the heap and happens in place. + /// + /// This is also available via [`From`]. + #[unstable(feature = "box_into_pin", issue = "0")] + pub fn into_pin(boxed: Box<T>) -> Pin<Box<T>> { + // It's not possible to move or replace the insides of a `Pin<Box<T>>` + // when `T: !Unpin`, so it's safe to pin it directly without any + // additional requirements. + unsafe { Pin::new_unchecked(boxed) } + } } #[stable(feature = "rust1", since = "1.0.0")] @@ -451,15 +464,12 @@ impl<T> From<T> for Box<T> { } #[stable(feature = "pin", since = "1.33.0")] -impl<T> From<Box<T>> for Pin<Box<T>> { +impl<T: ?Sized> From<Box<T>> for Pin<Box<T>> { /// Converts a `Box<T>` into a `Pin<Box<T>>` /// /// This conversion does not allocate on the heap and happens in place. fn from(boxed: Box<T>) -> Self { - // It's not possible to move or replace the insides of a `Pin<Box<T>>` - // when `T: !Unpin`, so it's safe to pin it directly without any - // additional requirements. - unsafe { Pin::new_unchecked(boxed) } + Box::into_pin(boxed) } } |
