From e19fc282624f914919f83e2746769b4ebebff42d Mon Sep 17 00:00:00 2001 From: Konrad Borowski Date: Thu, 17 Jan 2019 06:50:14 +0100 Subject: [PATCH 1/2] Make iter::Empty Send, Sync and Unpin for any T --- src/libcore/iter/sources.rs | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/src/libcore/iter/sources.rs b/src/libcore/iter/sources.rs index 2590fa6023a53..f6a3bdea40cab 100644 --- a/src/libcore/iter/sources.rs +++ b/src/libcore/iter/sources.rs @@ -198,7 +198,10 @@ pub fn repeat_with A>(repeater: F) -> RepeatWith { /// /// [`empty`]: fn.empty.html #[stable(feature = "iter_empty", since = "1.2.0")] -pub struct Empty(marker::PhantomData); +pub struct Empty(marker::PhantomData>); + +// Workaround for PhantomData T> not being allowed in const fn. +struct PhantomFnWorkaround(fn() -> T); #[stable(feature = "core_impl_debug", since = "1.9.0")] impl fmt::Debug for Empty { From 313c628592452b6e4072eaad41242f16aa303077 Mon Sep 17 00:00:00 2001 From: Konrad Borowski Date: Thu, 17 Jan 2019 00:07:22 +0100 Subject: [PATCH 2/2] Add a test for iter::empty::<*mut i32> being Sync and Send --- .../run-pass/threads-sendsync/sync-send-iterators-in-libcore.rs | 1 + 1 file changed, 1 insertion(+) diff --git a/src/test/run-pass/threads-sendsync/sync-send-iterators-in-libcore.rs b/src/test/run-pass/threads-sendsync/sync-send-iterators-in-libcore.rs index 903bbf5163443..3e9d1a8f702d8 100644 --- a/src/test/run-pass/threads-sendsync/sync-send-iterators-in-libcore.rs +++ b/src/test/run-pass/threads-sendsync/sync-send-iterators-in-libcore.rs @@ -91,6 +91,7 @@ fn main() { is_sync_send!((1..)); is_sync_send!(repeat(1)); is_sync_send!(empty::()); + is_sync_send!(empty::<*mut i32>()); is_sync_send!(once(1)); // for option.rs