diff options
| author | bors <bors@rust-lang.org> | 2019-04-26 01:51:05 +0000 |
|---|---|---|
| committer | bors <bors@rust-lang.org> | 2019-04-26 01:51:05 +0000 |
| commit | 180edc21eeca50d0d597de091c8eb712667b5dd2 (patch) | |
| tree | 9de980a6d79928bd00a4004d5587c6dc7582bbec /src/libcore | |
| parent | 3991285f55a4b7cd92b7ffcdc396a3023076f5cb (diff) | |
| parent | a133caab36b311a6c0812336698c817450184283 (diff) | |
| download | rust-180edc21eeca50d0d597de091c8eb712667b5dd2.tar.gz rust-180edc21eeca50d0d597de091c8eb712667b5dd2.zip | |
Auto merge of #60296 - Centril:rollup-qh9la7k, r=Centril
Rollup of 12 pull requests
Successful merges:
- #59734 (Prevent failure in case no space left on device in rustdoc)
- #59940 (Set cfg(test) when rustdoc is running with --test option)
- #60134 (Fix index-page generation)
- #60165 (Add Pin::{into_inner,into_inner_unchecked})
- #60183 (Chalkify: Add builtin Copy/Clone)
- #60225 (Introduce hir::ExprKind::Use and employ in for loop desugaring.)
- #60247 (Implement Debug for Place using Place::iterate)
- #60259 (Derive Default instead of new in applicable lint)
- #60267 (Add feature-gate for f16c target feature)
- #60284 (Do not allow const generics to depend on type parameters)
- #60285 (Do not ICE when checking types against foreign fn)
- #60289 (Make `-Z allow-features` work for stdlib features)
Failed merges:
r? @ghost
Diffstat (limited to 'src/libcore')
| -rw-r--r-- | src/libcore/pin.rs | 34 |
1 files changed, 34 insertions, 0 deletions
diff --git a/src/libcore/pin.rs b/src/libcore/pin.rs index dbf3dcf03a3..e74ed9b7889 100644 --- a/src/libcore/pin.rs +++ b/src/libcore/pin.rs @@ -349,6 +349,18 @@ where // around pinning. unsafe { Pin::new_unchecked(pointer) } } + + /// Unwraps this `Pin<P>` returning the underlying pointer. + /// + /// This requires that the data inside this `Pin` is [`Unpin`] so that we + /// can ignore the pinning invariants when unwrapping it. + /// + /// [`Unpin`]: ../../std/marker/trait.Unpin.html + #[unstable(feature = "pin_into_inner", issue = "60245")] + #[inline(always)] + pub fn into_inner(pin: Pin<P>) -> P { + pin.pointer + } } impl<P: Deref> Pin<P> { @@ -434,6 +446,28 @@ impl<P: Deref> Pin<P> { pub fn as_ref(self: &Pin<P>) -> Pin<&P::Target> { unsafe { Pin::new_unchecked(&*self.pointer) } } + + /// Unwraps this `Pin<P>` returning the underlying pointer. + /// + /// # Safety + /// + /// This function is unsafe. You must guarantee that you will continue to + /// treat the pointer `P` as pinned after you call this function, so that + /// the invariants on the `Pin` type can be upheld. If the code using the + /// resulting `P` does not continue to maintain the pinning invariants that + /// is a violation of the API contract and may lead to undefined behavior in + /// later (safe) operations. + /// + /// If the underlying data is [`Unpin`], [`Pin::into_inner`] should be used + /// instead. + /// + /// [`Unpin`]: ../../std/marker/trait.Unpin.html + /// [`Pin::into_inner`]: #method.into_inner + #[unstable(feature = "pin_into_inner", issue = "60245")] + #[inline(always)] + pub unsafe fn into_inner_unchecked(pin: Pin<P>) -> P { + pin.pointer + } } impl<P: DerefMut> Pin<P> { |
