]> git.lizzy.rs Git - rust.git/blob - src/test/ui/issues/issue-33140-hack-boundaries.rs
Rollup merge of #62337 - Mark-Simulacrum:fix-cpu-usage-script, r=alexcrichton
[rust.git] / src / test / ui / issues / issue-33140-hack-boundaries.rs
1 #![feature(optin_builtin_traits)]
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
10 impl Trait0 for dyn Send {}
11 impl Trait0 for dyn Send {}
12
13 // Problem 1: associated types
14 trait Trait1 {
15     fn my_fn(&self) {}
16 }
17
18 impl Trait1 for dyn Send {}
19 impl Trait1 for dyn Send {}
20 //~^ ERROR E0119
21
22 // Problem 2: negative impl
23 trait Trait2 {
24 }
25
26 impl Trait2 for dyn Send {}
27 impl !Trait2 for dyn Send {}
28 //~^ ERROR E0119
29
30
31 // Problem 3: type parameter
32 trait Trait3<T: ?Sized> {
33 }
34
35 impl Trait3<dyn Sync> for dyn Send {}
36 impl Trait3<dyn Sync> for dyn Send {}
37 //~^ ERROR E0119
38
39 // Problem 4a: not a trait object - generic
40 trait Trait4a {
41 }
42
43 impl<T: ?Sized> Trait4a for T {}
44 impl Trait4a for dyn Send {}
45 //~^ ERROR E0119
46
47 // Problem 4b: not a trait object - misc
48 trait Trait4b {
49 }
50
51 impl Trait4b for () {}
52 impl Trait4b for () {}
53 //~^ ERROR E0119
54
55 // Problem 4c: not a principal-less trait object
56 trait Trait4c {
57 }
58
59 impl Trait4c for dyn Trait1 + Send {}
60 impl Trait4c for dyn Trait1 + Send {}
61 //~^ ERROR E0119
62
63 // Problem 4d: lifetimes
64 trait Trait4d {
65 }
66
67 impl<'a> Trait4d for dyn Send + 'a {}
68 impl<'a> Trait4d for dyn Send + 'a {}
69 //~^ ERROR E0119
70
71
72 // Problem 5: where-clauses
73 trait Trait5 {
74 }
75
76 impl Trait5 for dyn Send {}
77 impl Trait5 for dyn Send where u32: Copy {}
78 //~^ ERROR E0119
79
80 fn main() {}