]> git.proxmox.com Git - rustc.git/blame - src/test/compile-fail/phantom-oibit.rs
Imported Upstream version 1.9.0+dfsg1
[rustc.git] / src / test / compile-fail / phantom-oibit.rs
CommitLineData
c34b1796
AL
1// Copyright 2015 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// Ensure that OIBIT checks `T` when it encounters a `PhantomData<T>` field, instead of checking
12// the `PhantomData<T>` type itself (which almost always implements a "default" trait
13// (`impl Trait for ..`))
14
15#![feature(optin_builtin_traits)]
16
9346a6ac 17use std::marker::{PhantomData};
c34b1796 18
9346a6ac 19unsafe trait Zen {}
c34b1796
AL
20
21unsafe impl Zen for .. {}
22
23unsafe impl<'a, T: 'a> Zen for &'a T where T: Sync {}
24
25struct Guard<'a, T: 'a> {
26 _marker: PhantomData<&'a T>,
27}
28
29struct Nested<T>(T);
30
31fn is_zen<T: Zen>(_: T) {}
32
33fn not_sync<T>(x: Guard<T>) {
54a0048b 34 is_zen(x) //~ error: `T: std::marker::Sync` is not satisfied
c34b1796
AL
35}
36
37fn nested_not_sync<T>(x: Nested<Guard<T>>) {
54a0048b 38 is_zen(x) //~ error: `T: std::marker::Sync` is not satisfied
c34b1796
AL
39}
40
41fn main() {}