aboutsummaryrefslogtreecommitdiff
path: root/src/compile_fail/no_send_par_iter.rs
diff options
context:
space:
mode:
Diffstat (limited to 'src/compile_fail/no_send_par_iter.rs')
-rw-r--r--src/compile_fail/no_send_par_iter.rs64
1 files changed, 64 insertions, 0 deletions
diff --git a/src/compile_fail/no_send_par_iter.rs b/src/compile_fail/no_send_par_iter.rs
new file mode 100644
index 0000000..1362c98
--- /dev/null
+++ b/src/compile_fail/no_send_par_iter.rs
@@ -0,0 +1,64 @@
+// Check that `!Send` types fail early.
+
+/** ```compile_fail,E0277
+
+use rayon::prelude::*;
+use std::ptr::null;
+
+#[derive(Copy, Clone)]
+struct NoSend(*const ());
+
+unsafe impl Sync for NoSend {}
+
+fn main() {
+ let x = Some(NoSend(null()));
+
+ x.par_iter()
+ .map(|&x| x) //~ ERROR
+ .count(); //~ ERROR
+}
+
+``` */
+mod map {}
+
+/** ```compile_fail,E0277
+
+use rayon::prelude::*;
+use std::ptr::null;
+
+#[derive(Copy, Clone)]
+struct NoSend(*const ());
+
+unsafe impl Sync for NoSend {}
+
+fn main() {
+ let x = Some(NoSend(null()));
+
+ x.par_iter()
+ .filter_map(|&x| Some(x)) //~ ERROR
+ .count(); //~ ERROR
+}
+
+``` */
+mod filter_map {}
+
+/** ```compile_fail,E0277
+
+use rayon::prelude::*;
+use std::ptr::null;
+
+#[derive(Copy, Clone)]
+struct NoSend(*const ());
+
+unsafe impl Sync for NoSend {}
+
+fn main() {
+ let x = Some(NoSend(null()));
+
+ x.par_iter()
+ .cloned() //~ ERROR
+ .count(); //~ ERROR
+}
+
+``` */
+mod cloned {}