]> git.lizzy.rs Git - rust.git/blob - src/test/compile-fail/typeck-unsafe-always-share.rs
Merge pull request #20674 from jbcrail/fix-misspelled-comments
[rust.git] / src / test / compile-fail / typeck-unsafe-always-share.rs
1 // Copyright 2014 The Rust Project Developers. See the COPYRIGHT
2 // file at the top-level directory of this distribution and at
3 // http://rust-lang.org/COPYRIGHT.
4 //
5 // Licensed under the Apache License, Version 2.0 <LICENSE-APACHE or
6 // http://www.apache.org/licenses/LICENSE-2.0> or the MIT license
7 // <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your
8 // option. This file may not be copied, modified, or distributed
9 // except according to those terms.
10
11 // Verify that UnsafeCell is *always* sync regardless if `T` is sync.
12
13 // ignore-tidy-linelength
14
15 use std::cell::UnsafeCell;
16 use std::marker;
17
18 struct MySync<T> {
19     u: UnsafeCell<T>
20 }
21
22 struct NoSync {
23     m: marker::NoSync
24 }
25
26 fn test<T: Sync>(s: T){
27
28 }
29
30 fn main() {
31     let us = UnsafeCell::new(MySync{u: UnsafeCell::new(0i)});
32     test(us);
33     //~^ ERROR `core::marker::Sync` is not implemented
34
35     let uns = UnsafeCell::new(NoSync{m: marker::NoSync});
36     test(uns);
37     //~^ ERROR `core::marker::Sync` is not implemented
38
39     let ms = MySync{u: uns};
40     test(ms);
41     //~^ ERROR `core::marker::Sync` is not implemented
42
43     let ns = NoSync{m: marker::NoSync};
44     test(ns);
45     //~^ ERROR `core::marker::Sync` is not implemented
46 }