summaryrefslogtreecommitdiffstats
path: root/src/test/ui/threads-sendsync/sync-send-iterators-in-libcore.rs
diff options
context:
space:
mode:
Diffstat (limited to 'src/test/ui/threads-sendsync/sync-send-iterators-in-libcore.rs')
-rw-r--r--src/test/ui/threads-sendsync/sync-send-iterators-in-libcore.rs105
1 files changed, 105 insertions, 0 deletions
diff --git a/src/test/ui/threads-sendsync/sync-send-iterators-in-libcore.rs b/src/test/ui/threads-sendsync/sync-send-iterators-in-libcore.rs
new file mode 100644
index 000000000..2f6d35f01
--- /dev/null
+++ b/src/test/ui/threads-sendsync/sync-send-iterators-in-libcore.rs
@@ -0,0 +1,105 @@
+// run-pass
+// pretty-expanded FIXME #23616
+
+#![allow(warnings)]
+
+use std::iter::{empty, once, repeat};
+
+fn is_sync<T>(_: T) where T: Sync {}
+fn is_send<T>(_: T) where T: Send {}
+
+macro_rules! all_sync_send {
+ ($ctor:expr, $iter:ident) => ({
+ let mut x = $ctor;
+ is_sync(x.$iter());
+ let mut y = $ctor;
+ is_send(y.$iter());
+ });
+ ($ctor:expr, $iter:ident($($param:expr),+)) => ({
+ let mut x = $ctor;
+ is_sync(x.$iter($( $param ),+));
+ let mut y = $ctor;
+ is_send(y.$iter($( $param ),+));
+ });
+ ($ctor:expr, $iter:ident, $($rest:tt)*) => ({
+ all_sync_send!($ctor, $iter);
+ all_sync_send!($ctor, $($rest)*);
+ });
+ ($ctor:expr, $iter:ident($($param:expr),+), $($rest:tt)*) => ({
+ all_sync_send!($ctor, $iter($( $param ),+));
+ all_sync_send!($ctor, $($rest)*);
+ });
+}
+
+macro_rules! all_sync_send_mutable_ref {
+ ($ctor:expr, $($iter:ident),+) => ({
+ $(
+ let mut x = $ctor;
+ is_sync((&mut x).$iter());
+ let mut y = $ctor;
+ is_send((&mut y).$iter());
+ )+
+ })
+}
+
+macro_rules! is_sync_send {
+ ($ctor:expr) => ({
+ let x = $ctor;
+ is_sync(x);
+ let y = $ctor;
+ is_send(y);
+ })
+}
+
+fn main() {
+ // for char.rs
+ all_sync_send!("Я", escape_debug, escape_default, escape_unicode);
+
+ // for iter.rs
+ all_sync_send_mutable_ref!([1], iter);
+
+ // Bytes implements DoubleEndedIterator
+ all_sync_send!("a".bytes(), rev);
+
+ let a = [1];
+ let b = [2];
+ all_sync_send!(a.iter(),
+ cloned,
+ cycle,
+ chain([2].iter()),
+ zip([2].iter()),
+ map(|_| 1),
+ filter(|_| true),
+ filter_map(|_| Some(1)),
+ enumerate,
+ peekable,
+ skip_while(|_| true),
+ take_while(|_| true),
+ skip(1),
+ take(1),
+ scan(1, |_, _| Some(1)),
+ flat_map(|_| b.iter()),
+ fuse,
+ inspect(|_| ()));
+
+ is_sync_send!((1..).step_by(2));
+ is_sync_send!((1..2).step_by(2));
+ is_sync_send!((1..2));
+ is_sync_send!((1..));
+ is_sync_send!(repeat(1));
+ is_sync_send!(empty::<usize>());
+ is_sync_send!(empty::<*mut i32>());
+ is_sync_send!(once(1));
+
+ // for option.rs
+ // FIXME
+
+ // for result.rs
+ // FIXME
+
+ // for slice.rs
+ // FIXME
+
+ // for str/mod.rs
+ // FIXME
+}