]> git.lizzy.rs Git - rust.git/blob - src/test/ui/typeck/typeck-default-trait-impl-negation-sync.rs
Rollup merge of #100789 - compiler-errors:issue-99662, r=spastorino
[rust.git] / src / test / ui / typeck / typeck-default-trait-impl-negation-sync.rs
1 #![feature(negative_impls)]
2
3 struct Managed;
4 impl !Send for Managed {}
5 impl !Sync for Managed {}
6
7 use std::cell::UnsafeCell;
8
9 struct MySync {
10    t: *mut u8
11 }
12
13 unsafe impl Sync for MySync {}
14
15 struct MyNotSync {
16    t: *mut u8
17 }
18
19 impl !Sync for MyNotSync {}
20
21 struct MyTypeWUnsafe {
22    t: UnsafeCell<u8>
23 }
24
25 struct MyTypeManaged {
26    t: Managed
27 }
28
29 fn is_sync<T: Sync>() {}
30
31 fn main() {
32     is_sync::<MySync>();
33     is_sync::<MyNotSync>();
34     //~^ ERROR `MyNotSync` cannot be shared between threads safely [E0277]
35
36     is_sync::<MyTypeWUnsafe>();
37     //~^ ERROR `UnsafeCell<u8>` cannot be shared between threads safely [E0277]
38
39     is_sync::<MyTypeManaged>();
40     //~^ ERROR `Managed` cannot be shared between threads safely [E0277]
41 }