2 // pretty-expanded FIXME #23616
6 use std::iter::{empty, once, repeat};
8 fn is_sync<T>(_: T) where T: Sync {}
9 fn is_send<T>(_: T) where T: Send {}
11 macro_rules! all_sync_send {
12 ($ctor:expr, $iter:ident) => ({
18 ($ctor:expr, $iter:ident($($param:expr),+)) => ({
20 is_sync(x.$iter($( $param ),+));
22 is_send(y.$iter($( $param ),+));
24 ($ctor:expr, $iter:ident, $($rest:tt)*) => ({
25 all_sync_send!($ctor, $iter);
26 all_sync_send!($ctor, $($rest)*);
28 ($ctor:expr, $iter:ident($($param:expr),+), $($rest:tt)*) => ({
29 all_sync_send!($ctor, $iter($( $param ),+));
30 all_sync_send!($ctor, $($rest)*);
34 macro_rules! all_sync_send_mutable_ref {
35 ($ctor:expr, $($iter:ident),+) => ({
38 is_sync((&mut x).$iter());
40 is_send((&mut y).$iter());
45 macro_rules! is_sync_send {
56 all_sync_send!("Я", escape_debug, escape_default, escape_unicode);
59 all_sync_send_mutable_ref!([1], iter);
61 // Bytes implements DoubleEndedIterator
62 all_sync_send!("a".bytes(), rev);
66 all_sync_send!(a.iter(),
73 filter_map(|_| Some(1)),
80 scan(1, |_, _| Some(1)),
81 flat_map(|_| b.iter()),
85 is_sync_send!((1..).step_by(2));
86 is_sync_send!((1..2).step_by(2));
87 is_sync_send!((1..2));
89 is_sync_send!(repeat(1));
90 is_sync_send!(empty::<usize>());
91 is_sync_send!(empty::<*mut i32>());
92 is_sync_send!(once(1));