summaryrefslogtreecommitdiffstats
path: root/src/test/ui/typeck/typeck-default-trait-impl-negation-sync.rs
diff options
context:
space:
mode:
Diffstat (limited to '')
-rw-r--r--src/test/ui/typeck/typeck-default-trait-impl-negation-sync.rs41
1 files changed, 41 insertions, 0 deletions
diff --git a/src/test/ui/typeck/typeck-default-trait-impl-negation-sync.rs b/src/test/ui/typeck/typeck-default-trait-impl-negation-sync.rs
new file mode 100644
index 000000000..b9042188a
--- /dev/null
+++ b/src/test/ui/typeck/typeck-default-trait-impl-negation-sync.rs
@@ -0,0 +1,41 @@
+#![feature(negative_impls)]
+
+struct Managed;
+impl !Send for Managed {}
+impl !Sync for Managed {}
+
+use std::cell::UnsafeCell;
+
+struct MySync {
+ t: *mut u8
+}
+
+unsafe impl Sync for MySync {}
+
+struct MyNotSync {
+ t: *mut u8
+}
+
+impl !Sync for MyNotSync {}
+
+struct MyTypeWUnsafe {
+ t: UnsafeCell<u8>
+}
+
+struct MyTypeManaged {
+ t: Managed
+}
+
+fn is_sync<T: Sync>() {}
+
+fn main() {
+ is_sync::<MySync>();
+ is_sync::<MyNotSync>();
+ //~^ ERROR `MyNotSync` cannot be shared between threads safely [E0277]
+
+ is_sync::<MyTypeWUnsafe>();
+ //~^ ERROR `UnsafeCell<u8>` cannot be shared between threads safely [E0277]
+
+ is_sync::<MyTypeManaged>();
+ //~^ ERROR `Managed` cannot be shared between threads safely [E0277]
+}