]> git.lizzy.rs Git - rust.git/blob - tests/ui/privacy/associated-item-privacy-trait.rs
Rollup merge of #106321 - compiler-errors:delayed-bug-backtrace, r=Nilstrieb
[rust.git] / tests / ui / privacy / associated-item-privacy-trait.rs
1 #![feature(decl_macro, associated_type_defaults)]
2 #![allow(unused, private_in_public)]
3
4 mod priv_trait {
5     trait PrivTr {
6         fn method(&self) {}
7         const CONST: u8 = 0;
8         type AssocTy = u8;
9     }
10     pub struct Pub;
11     impl PrivTr for Pub {}
12     pub trait PubTr: PrivTr {}
13
14     pub macro mac() {
15         let value = <Pub as PrivTr>::method;
16         //~^ ERROR type `for<'a> fn(&'a priv_trait::Pub) {<priv_trait::Pub as PrivTr>::method}` is private
17         value;
18         //~^ ERROR type `for<'a> fn(&'a priv_trait::Pub) {<priv_trait::Pub as PrivTr>::method}` is private
19         Pub.method();
20         //~^ ERROR type `for<'a> fn(&'a Self) {<Self as PrivTr>::method}` is private
21         <Pub as PrivTr>::CONST;
22         //~^ ERROR associated constant `PrivTr::CONST` is private
23         let _: <Pub as PrivTr>::AssocTy;
24         //~^ ERROR associated type `PrivTr::AssocTy` is private
25         pub type InSignatureTy = <Pub as PrivTr>::AssocTy;
26         //~^ ERROR trait `PrivTr` is private
27         pub trait InSignatureTr: PrivTr {}
28         //~^ ERROR trait `PrivTr` is private
29         impl PrivTr for u8 {}
30         //~^ ERROR trait `PrivTr` is private
31     }
32 }
33 fn priv_trait() {
34     priv_trait::mac!();
35 }
36
37 mod priv_signature {
38     pub trait PubTr {
39         fn method(&self, arg: Priv) {}
40     }
41     struct Priv;
42     pub struct Pub;
43     impl PubTr for Pub {}
44
45     pub macro mac() {
46         let value = <Pub as PubTr>::method;
47         //~^ ERROR type `priv_signature::Priv` is private
48         value;
49         //~^ ERROR type `priv_signature::Priv` is private
50         Pub.method(loop {});
51         //~^ ERROR type `priv_signature::Priv` is private
52     }
53 }
54 fn priv_signature() {
55     priv_signature::mac!();
56 }
57
58 mod priv_substs {
59     pub trait PubTr {
60         fn method<T>(&self) {}
61     }
62     struct Priv;
63     pub struct Pub;
64     impl PubTr for Pub {}
65
66     pub macro mac() {
67         let value = <Pub as PubTr>::method::<Priv>;
68         //~^ ERROR type `priv_substs::Priv` is private
69         value;
70         //~^ ERROR type `priv_substs::Priv` is private
71         Pub.method::<Priv>();
72         //~^ ERROR type `priv_substs::Priv` is private
73     }
74 }
75 fn priv_substs() {
76     priv_substs::mac!();
77 }
78
79 mod priv_parent_substs {
80     pub trait PubTr<T = Priv> {
81         fn method(&self) {}
82         const CONST: u8 = 0;
83         type AssocTy = u8;
84     }
85     struct Priv;
86     pub struct Pub;
87     impl PubTr<Priv> for Pub {}
88     impl PubTr<Pub> for Priv {}
89
90     pub macro mac() {
91         let value = <Pub as PubTr>::method;
92         //~^ ERROR type `priv_parent_substs::Priv` is private
93         value;
94         //~^ ERROR type `priv_parent_substs::Priv` is private
95         let value = <Pub as PubTr<_>>::method;
96         //~^ ERROR type `priv_parent_substs::Priv` is private
97         value;
98         //~^ ERROR type `priv_parent_substs::Priv` is private
99         Pub.method();
100         //~^ ERROR type `priv_parent_substs::Priv` is private
101
102         let value = <Priv as PubTr<_>>::method;
103         //~^ ERROR type `priv_parent_substs::Priv` is private
104         value;
105         //~^ ERROR type `priv_parent_substs::Priv` is private
106         Priv.method();
107         //~^ ERROR type `priv_parent_substs::Priv` is private
108
109         <Pub as PubTr>::CONST;
110         //~^ ERROR type `priv_parent_substs::Priv` is private
111         <Pub as PubTr<_>>::CONST;
112         //~^ ERROR type `priv_parent_substs::Priv` is private
113         <Priv as PubTr<_>>::CONST;
114         //~^ ERROR type `priv_parent_substs::Priv` is private
115
116         let _: <Pub as PubTr>::AssocTy; // FIXME no longer an error?!
117         let _: <Pub as PubTr<_>>::AssocTy;
118         //~^ ERROR type `priv_parent_substs::Priv` is private
119         let _: <Priv as PubTr<_>>::AssocTy;
120         //~^ ERROR type `priv_parent_substs::Priv` is private
121
122         pub type InSignatureTy1 = <Pub as PubTr>::AssocTy;
123         //~^ ERROR type `priv_parent_substs::Priv` is private
124         pub type InSignatureTy2 = <Priv as PubTr<Pub>>::AssocTy;
125         //~^ ERROR type `priv_parent_substs::Priv` is private
126         impl PubTr for u8 {}
127         //~^ ERROR type `priv_parent_substs::Priv` is private
128     }
129 }
130 fn priv_parent_substs() {
131     priv_parent_substs::mac!();
132 }
133
134 fn main() {}