]> git.lizzy.rs Git - rust.git/blob - src/test/ui/traits/issue-33140-hack-boundaries.rs
:arrow_up: rust-analyzer
[rust.git] / src / test / ui / traits / issue-33140-hack-boundaries.rs
1 #![feature(negative_impls)]
2 #![allow(order_dependent_trait_objects)]
3
4 // Check that the issue #33140 hack does not allow unintended things.
5
6 // OK
7 trait Trait0 {}
8
9 impl Trait0 for dyn Send {}
10 impl Trait0 for dyn Send {}
11
12 // Problem 1: associated types
13 trait Trait1 {
14     fn my_fn(&self) {}
15 }
16
17 impl Trait1 for dyn Send {}
18 impl Trait1 for dyn Send {}
19 //~^ ERROR E0119
20
21 // Problem 2: negative impl
22 trait Trait2 {}
23
24 impl Trait2 for dyn Send {}
25 impl !Trait2 for dyn Send {}
26 //~^ ERROR E0751
27
28 // Problem 3: type parameter
29 trait Trait3<T: ?Sized> {}
30
31 impl Trait3<dyn Sync> for dyn Send {}
32 impl Trait3<dyn Sync> for dyn Send {}
33 //~^ ERROR E0119
34
35 // Problem 4a: not a trait object - generic
36 trait Trait4a {}
37
38 impl<T: ?Sized> Trait4a for T {}
39 impl Trait4a for dyn Send {}
40 //~^ ERROR E0119
41
42 // Problem 4b: not a trait object - misc
43 trait Trait4b {}
44
45 impl Trait4b for () {}
46 impl Trait4b for () {}
47 //~^ ERROR E0119
48
49 // Problem 4c: not a principal-less trait object
50 trait Trait4c {}
51
52 impl Trait4c for dyn Trait1 + Send {}
53 impl Trait4c for dyn Trait1 + Send {}
54 //~^ ERROR E0119
55
56 // Problem 4d: lifetimes
57 trait Trait4d {}
58
59 impl<'a> Trait4d for dyn Send + 'a {}
60 impl<'a> Trait4d for dyn Send + 'a {}
61 //~^ ERROR E0119
62
63 // Problem 5: where-clauses
64 trait Trait5 {}
65
66 impl Trait5 for dyn Send {}
67 impl Trait5 for dyn Send where u32: Copy {}
68 //~^ ERROR E0119
69
70 fn main() {}