]> git.lizzy.rs Git - rust.git/blob - src/test/ui/lint/lint-stability-fields.rs
Auto merge of #106349 - LeSeulArtichaut:dyn-star-tracking-issue, r=jackh726
[rust.git] / src / test / ui / lint / lint-stability-fields.rs
1 // aux-build:lint_stability_fields.rs
2 #![allow(deprecated)]
3 #![allow(dead_code)]
4 #![feature(staged_api)]
5
6 #![stable(feature = "rust1", since = "1.0.0")]
7
8 mod cross_crate {
9     extern crate lint_stability_fields;
10
11     mod reexport {
12         #[stable(feature = "rust1", since = "1.0.0")]
13         pub use super::lint_stability_fields::*;
14     }
15
16     use self::lint_stability_fields::*;
17
18     pub fn foo() {
19         let x = Stable {
20             inherit: 1,
21             override1: 2, //~ ERROR use of unstable
22             override2: 3, //~ ERROR use of unstable
23             override3: 4,
24         };
25
26         let _ = x.inherit;
27         let _ = x.override1; //~ ERROR use of unstable
28         let _ = x.override2; //~ ERROR use of unstable
29         let _ = x.override3;
30
31         let Stable {
32             inherit: _,
33             override1: _, //~ ERROR use of unstable
34             override2: _, //~ ERROR use of unstable
35             override3: _
36         } = x;
37         // all fine
38         let Stable { .. } = x;
39
40         let x = Stable2(1, 2, 3, 4);
41
42         let _ = x.0;
43         let _ = x.1; //~ ERROR use of unstable
44         let _ = x.2; //~ ERROR use of unstable
45         let _ = x.3;
46
47         let Stable2(_,
48                    _, //~ ERROR use of unstable
49                    _, //~ ERROR use of unstable
50                    _)
51             = x;
52         // all fine
53         let Stable2(..) = x;
54
55
56         let x = Unstable { //~ ERROR use of unstable
57             inherit: 1, //~ ERROR use of unstable
58             override1: 2,
59             override2: 3, //~ ERROR use of unstable
60         };
61
62         let _ = x.inherit; //~ ERROR use of unstable
63         let _ = x.override1;
64         let _ = x.override2; //~ ERROR use of unstable
65
66         let Unstable { //~ ERROR use of unstable
67             inherit: _, //~ ERROR use of unstable
68             override1: _,
69             override2: _ //~ ERROR use of unstable
70         } = x;
71
72         let Unstable  //~ ERROR use of unstable
73             // the patterns are all fine:
74             { .. } = x;
75
76         // Unstable items are still unstable even when used through a stable "pub use".
77         let x = reexport::Unstable2(1, 2, 3); //~ ERROR use of unstable
78
79         let x = Unstable2(1, 2, 3); //~ ERROR use of unstable
80
81         let _ = x.0; //~ ERROR use of unstable
82         let _ = x.1;
83         let _ = x.2; //~ ERROR use of unstable
84
85         let Unstable2  //~ ERROR use of unstable
86             (_, //~ ERROR use of unstable
87              _,
88              _) //~ ERROR use of unstable
89             = x;
90         let Unstable2 //~ ERROR use of unstable
91             // the patterns are all fine:
92             (..) = x;
93
94
95         let x = Deprecated { //~ ERROR use of unstable
96             inherit: 1, //~ ERROR use of unstable
97             override1: 2,
98             override2: 3, //~ ERROR use of unstable
99         };
100
101         let _ = x.inherit; //~ ERROR use of unstable
102         let _ = x.override1;
103         let _ = x.override2; //~ ERROR use of unstable
104
105         let Deprecated { //~ ERROR use of unstable
106             inherit: _, //~ ERROR use of unstable
107             override1: _,
108             override2: _ //~ ERROR use of unstable
109         } = x;
110
111         let Deprecated //~ ERROR use of unstable
112             // the patterns are all fine:
113             { .. } = x;
114
115         let x = Deprecated2(1, 2, 3); //~ ERROR use of unstable
116
117         let _ = x.0; //~ ERROR use of unstable
118         let _ = x.1;
119         let _ = x.2; //~ ERROR use of unstable
120
121         let Deprecated2 //~ ERROR use of unstable
122             (_, //~ ERROR use of unstable
123              _,
124              _) //~ ERROR use of unstable
125             = x;
126         let Deprecated2 //~ ERROR use of unstable
127             // the patterns are all fine:
128             (..) = x;
129     }
130 }
131
132 mod this_crate {
133     #[stable(feature = "rust1", since = "1.0.0")]
134     struct Stable {
135         inherit: u8,
136         #[unstable(feature = "unstable_test_feature", issue = "none")]
137         override1: u8,
138         #[deprecated(since = "1.0.0", note = "text")]
139         #[unstable(feature = "unstable_test_feature", issue = "none")]
140         override2: u8,
141         #[stable(feature = "rust2", since = "2.0.0")]
142         override3: u8,
143     }
144
145     #[stable(feature = "rust1", since = "1.0.0")]
146     struct Stable2(u8,
147                    #[stable(feature = "rust2", since = "2.0.0")] u8,
148                    #[unstable(feature = "unstable_test_feature", issue = "none")]
149                    #[deprecated(since = "1.0.0", note = "text")] u8);
150
151     #[unstable(feature = "unstable_test_feature", issue = "none")]
152     struct Unstable {
153         inherit: u8,
154         #[stable(feature = "rust1", since = "1.0.0")]
155         override1: u8,
156         #[deprecated(since = "1.0.0", note = "text")]
157         #[unstable(feature = "unstable_test_feature", issue = "none")]
158         override2: u8,
159     }
160
161     #[unstable(feature = "unstable_test_feature", issue = "none")]
162     struct Unstable2(u8,
163                      #[stable(feature = "rust1", since = "1.0.0")] u8,
164                      #[unstable(feature = "unstable_test_feature", issue = "none")]
165                      #[deprecated(since = "1.0.0", note = "text")] u8);
166
167     #[unstable(feature = "unstable_test_feature", issue = "none")]
168     #[deprecated(since = "1.0.0", note = "text")]
169     struct Deprecated {
170         inherit: u8,
171         #[stable(feature = "rust1", since = "1.0.0")]
172         override1: u8,
173         #[unstable(feature = "unstable_test_feature", issue = "none")]
174         override2: u8,
175     }
176
177     #[unstable(feature = "unstable_test_feature", issue = "none")]
178     #[deprecated(since = "1.0.0", note = "text")]
179     struct Deprecated2(u8,
180                        #[stable(feature = "rust1", since = "1.0.0")] u8,
181                        #[unstable(feature = "unstable_test_feature", issue = "none")] u8);
182
183     pub fn foo() {
184         let x = Stable {
185             inherit: 1,
186             override1: 2,
187             override2: 3,
188             override3: 4,
189         };
190
191         let _ = x.inherit;
192         let _ = x.override1;
193         let _ = x.override2;
194         let _ = x.override3;
195
196         let Stable {
197             inherit: _,
198             override1: _,
199             override2: _,
200             override3: _
201         } = x;
202         // all fine
203         let Stable { .. } = x;
204
205         let x = Stable2(1, 2, 3);
206
207         let _ = x.0;
208         let _ = x.1;
209         let _ = x.2;
210
211         let Stable2(_,
212                    _,
213                    _)
214             = x;
215         // all fine
216         let Stable2(..) = x;
217
218
219         let x = Unstable {
220             inherit: 1,
221             override1: 2,
222             override2: 3,
223         };
224
225         let _ = x.inherit;
226         let _ = x.override1;
227         let _ = x.override2;
228
229         let Unstable {
230             inherit: _,
231             override1: _,
232             override2: _
233         } = x;
234
235         let Unstable
236             // the patterns are all fine:
237             { .. } = x;
238
239
240         let x = Unstable2(1, 2, 3);
241
242         let _ = x.0;
243         let _ = x.1;
244         let _ = x.2;
245
246         let Unstable2
247             (_,
248              _,
249              _)
250             = x;
251         let Unstable2
252             // the patterns are all fine:
253             (..) = x;
254
255
256         let x = Deprecated {
257             inherit: 1,
258             override1: 2,
259             override2: 3,
260         };
261
262         let _ = x.inherit;
263         let _ = x.override1;
264         let _ = x.override2;
265
266         let Deprecated {
267             inherit: _,
268             override1: _,
269             override2: _
270         } = x;
271
272         let Deprecated
273             // the patterns are all fine:
274             { .. } = x;
275
276         let x = Deprecated2(1, 2, 3);
277
278         let _ = x.0;
279         let _ = x.1;
280         let _ = x.2;
281
282         let Deprecated2
283             (_,
284              _,
285              _)
286             = x;
287         let Deprecated2
288             // the patterns are all fine:
289             (..) = x;
290     }
291 }
292
293 fn main() {}