Skip to content

Commit

Permalink
Auto merge of #51935 - cramertj:unpin-references, r=withoutboats
Browse files Browse the repository at this point in the history
Unpin references

I also considered adding an impl for raw pointers as well, but that makes it easy to accidentally have unsound owning-collections that might otherwise be able to project pinned-ness (e.g. `Box`).

cc @RalfJung

r? @withoutboats
  • Loading branch information
bors committed Jul 4, 2018
2 parents 8dd715e + a2b21e5 commit a22bcd8
Show file tree
Hide file tree
Showing 2 changed files with 9 additions and 0 deletions.
6 changes: 6 additions & 0 deletions src/libcore/marker.rs
Original file line number Diff line number Diff line change
Expand Up @@ -625,6 +625,12 @@ pub struct Pinned;
#[unstable(feature = "pin", issue = "49150")]
impl !Unpin for Pinned {}

#[unstable(feature = "pin", issue = "49150")]
impl<'a, T: ?Sized + 'a> Unpin for &'a T {}

#[unstable(feature = "pin", issue = "49150")]
impl<'a, T: ?Sized + 'a> Unpin for &'a mut T {}

/// Implementations of `Copy` for primitive types.
///
/// Implementations that cannot be described in Rust
Expand Down
3 changes: 3 additions & 0 deletions src/libcore/task/wake.rs
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,7 @@
issue = "50547")]

use fmt;
use marker::Unpin;
use ptr::NonNull;

/// A `Waker` is a handle for waking up a task by notifying its executor that it
Expand All @@ -25,6 +26,7 @@ pub struct Waker {
inner: NonNull<UnsafeWake>,
}

impl Unpin for Waker {}
unsafe impl Send for Waker {}
unsafe impl Sync for Waker {}

Expand Down Expand Up @@ -99,6 +101,7 @@ pub struct LocalWaker {
inner: NonNull<UnsafeWake>,
}

impl Unpin for LocalWaker {}
impl !Send for LocalWaker {}
impl !Sync for LocalWaker {}

Expand Down

0 comments on commit a22bcd8

Please sign in to comment.