1 // Copyright 2016 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.
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.
12 // This test case tests the incremental compilation hash (ICH) implementation
13 // for let expressions.
15 // The general pattern followed here is: Change one thing between rev1 and rev2
16 // and make sure that the hash has changed, then change nothing between rev2 and
17 // rev3 and make sure that the hash has not changed.
19 // must-compile-successfully
20 // revisions: cfail1 cfail2 cfail3
21 // compile-flags: -Z query-dep-graph
25 #![feature(rustc_attrs)]
26 #![feature(specialization)]
31 // Change Method Name -----------------------------------------------------------
34 pub trait ChangeMethodNameTrait {
39 impl ChangeMethodNameTrait for Foo {
44 #[rustc_dirty(label="Hir", cfg="cfail2")]
45 #[rustc_clean(label="Hir", cfg="cfail3")]
46 #[rustc_metadata_dirty(cfg="cfail2")]
47 #[rustc_metadata_clean(cfg="cfail3")]
48 pub trait ChangeMethodNameTrait {
49 #[rustc_dirty(label="Hir", cfg="cfail2")]
50 #[rustc_clean(label="Hir", cfg="cfail3")]
51 #[rustc_metadata_dirty(cfg="cfail2")]
52 #[rustc_metadata_clean(cfg="cfail3")]
57 #[rustc_dirty(label="Hir", cfg="cfail2")]
58 #[rustc_clean(label="Hir", cfg="cfail3")]
59 #[rustc_metadata_dirty(cfg="cfail2")]
60 #[rustc_metadata_clean(cfg="cfail3")]
61 impl ChangeMethodNameTrait for Foo {
62 #[rustc_dirty(label="Hir", cfg="cfail2")]
63 #[rustc_clean(label="Hir", cfg="cfail3")]
64 #[rustc_metadata_dirty(cfg="cfail2")]
65 #[rustc_metadata_clean(cfg="cfail3")]
69 // Change Method Body -----------------------------------------------------------
71 // This should affect the method itself, but not the trait.
73 pub trait ChangeMethodBodyTrait {
78 impl ChangeMethodBodyTrait for Foo {
83 #[rustc_clean(label="Hir", cfg="cfail2")]
84 #[rustc_clean(label="Hir", cfg="cfail3")]
85 #[rustc_metadata_clean(cfg="cfail2")]
86 #[rustc_metadata_clean(cfg="cfail3")]
87 impl ChangeMethodBodyTrait for Foo {
88 #[rustc_dirty(label="Hir", cfg="cfail2")]
89 #[rustc_clean(label="Hir", cfg="cfail3")]
90 #[rustc_metadata_dirty(cfg="cfail2")]
91 #[rustc_metadata_clean(cfg="cfail3")]
97 // Change Method Selfness -----------------------------------------------------------
100 pub trait ChangeMethodSelfnessTrait {
105 impl ChangeMethodSelfnessTrait for Foo {
110 pub trait ChangeMethodSelfnessTrait {
111 fn method_name(&self);
115 #[rustc_dirty(label="Hir", cfg="cfail2")]
116 #[rustc_clean(label="Hir", cfg="cfail3")]
117 #[rustc_metadata_dirty(cfg="cfail2")]
118 #[rustc_metadata_clean(cfg="cfail3")]
119 impl ChangeMethodSelfnessTrait for Foo {
120 #[rustc_dirty(label="Hir", cfg="cfail2")]
121 #[rustc_clean(label="Hir", cfg="cfail3")]
122 #[rustc_metadata_dirty(cfg="cfail2")]
123 #[rustc_metadata_clean(cfg="cfail3")]
124 fn method_name(&self) {
129 // Change Method Selfness -----------------------------------------------------------
132 pub trait RemoveMethodSelfnessTrait {
133 fn method_name(&self);
137 impl RemoveMethodSelfnessTrait for Foo {
138 fn method_name(&self) { }
142 pub trait RemoveMethodSelfnessTrait {
147 #[rustc_dirty(label="Hir", cfg="cfail2")]
148 #[rustc_clean(label="Hir", cfg="cfail3")]
149 #[rustc_metadata_dirty(cfg="cfail2")]
150 #[rustc_metadata_clean(cfg="cfail3")]
151 impl RemoveMethodSelfnessTrait for Foo {
152 #[rustc_dirty(label="Hir", cfg="cfail2")]
153 #[rustc_clean(label="Hir", cfg="cfail3")]
154 #[rustc_metadata_dirty(cfg="cfail2")]
155 #[rustc_metadata_clean(cfg="cfail3")]
161 // Change Method Selfmutness -----------------------------------------------------------
164 pub trait ChangeMethodSelfmutnessTrait {
165 fn method_name(&self);
169 impl ChangeMethodSelfmutnessTrait for Foo {
170 fn method_name(&self) { }
174 pub trait ChangeMethodSelfmutnessTrait {
175 fn method_name(&mut self);
179 #[rustc_clean(label="Hir", cfg="cfail2")]
180 #[rustc_clean(label="Hir", cfg="cfail3")]
181 #[rustc_metadata_dirty(cfg="cfail2")]
182 #[rustc_metadata_clean(cfg="cfail3")]
183 impl ChangeMethodSelfmutnessTrait for Foo {
184 #[rustc_dirty(label="Hir", cfg="cfail2")]
185 #[rustc_clean(label="Hir", cfg="cfail3")]
186 #[rustc_metadata_dirty(cfg="cfail2")]
187 #[rustc_metadata_clean(cfg="cfail3")]
188 fn method_name(&mut self) {
193 // Change item kind -----------------------------------------------------------
196 pub trait ChangeItemKindTrait {
201 impl ChangeItemKindTrait for Foo {
206 pub trait ChangeItemKindTrait {
211 #[rustc_dirty(label="Hir", cfg="cfail2")]
212 #[rustc_clean(label="Hir", cfg="cfail3")]
213 #[rustc_metadata_dirty(cfg="cfail2")]
214 #[rustc_metadata_clean(cfg="cfail3")]
215 impl ChangeItemKindTrait for Foo {
219 // Remove item -----------------------------------------------------------
222 pub trait RemoveItemTrait {
228 impl RemoveItemTrait for Foo {
234 pub trait RemoveItemTrait {
239 #[rustc_dirty(label="Hir", cfg="cfail2")]
240 #[rustc_clean(label="Hir", cfg="cfail3")]
241 #[rustc_metadata_dirty(cfg="cfail2")]
242 #[rustc_metadata_clean(cfg="cfail3")]
243 impl RemoveItemTrait for Foo {
247 // Add item -----------------------------------------------------------
250 pub trait AddItemTrait {
255 impl AddItemTrait for Foo {
260 pub trait AddItemTrait {
266 #[rustc_dirty(label="Hir", cfg="cfail2")]
267 #[rustc_clean(label="Hir", cfg="cfail3")]
268 #[rustc_metadata_dirty(cfg="cfail2")]
269 #[rustc_metadata_clean(cfg="cfail3")]
270 impl AddItemTrait for Foo {
275 // Change has-value -----------------------------------------------------------
278 pub trait ChangeHasValueTrait {
283 impl ChangeHasValueTrait for Foo {
288 #[rustc_dirty(label="Hir", cfg="cfail2")]
289 #[rustc_clean(label="Hir", cfg="cfail3")]
290 #[rustc_metadata_dirty(cfg="cfail2")]
291 #[rustc_metadata_clean(cfg="cfail3")]
292 pub trait ChangeHasValueTrait {
297 #[rustc_clean(label="Hir", cfg="cfail2")]
298 #[rustc_clean(label="Hir", cfg="cfail3")]
299 #[rustc_metadata_dirty(cfg="cfail2")]
300 #[rustc_metadata_clean(cfg="cfail3")]
301 impl ChangeHasValueTrait for Foo {
307 pub trait AddDefaultTrait {
312 impl AddDefaultTrait for Foo {
317 #[rustc_dirty(label="Hir", cfg="cfail2")]
318 #[rustc_clean(label="Hir", cfg="cfail3")]
319 #[rustc_metadata_dirty(cfg="cfail2")]
320 #[rustc_metadata_clean(cfg="cfail3")]
321 impl AddDefaultTrait for Foo {
322 default fn method_name() { }
327 pub trait RemoveDefaultTrait {
332 impl RemoveDefaultTrait for Foo {
333 default fn method_name() { }
337 #[rustc_dirty(label="Hir", cfg="cfail2")]
338 #[rustc_clean(label="Hir", cfg="cfail3")]
339 #[rustc_metadata_dirty(cfg="cfail2")]
340 #[rustc_metadata_clean(cfg="cfail3")]
341 impl RemoveDefaultTrait for Foo {
348 pub trait AddArgumentTrait {
349 fn method_name(&self);
353 impl AddArgumentTrait for Foo {
354 fn method_name(&self) { }
358 pub trait AddArgumentTrait {
359 fn method_name(&self, x: u32);
363 #[rustc_clean(label="Hir", cfg="cfail2")]
364 #[rustc_clean(label="Hir", cfg="cfail3")]
365 #[rustc_metadata_dirty(cfg="cfail2")]
366 #[rustc_metadata_clean(cfg="cfail3")]
367 impl AddArgumentTrait for Foo {
368 #[rustc_dirty(label="Hir", cfg="cfail2")]
369 #[rustc_clean(label="Hir", cfg="cfail3")]
370 #[rustc_metadata_dirty(cfg="cfail2")]
371 #[rustc_metadata_clean(cfg="cfail3")]
372 fn method_name(&self, _x: u32) { }
375 // Change argument type
378 pub trait ChangeArgumentTypeTrait {
379 fn method_name(&self, x: u32);
383 impl ChangeArgumentTypeTrait for Foo {
384 fn method_name(&self, _x: u32) { }
388 pub trait ChangeArgumentTypeTrait {
389 fn method_name(&self, x: char);
393 #[rustc_clean(label="Hir", cfg="cfail2")]
394 #[rustc_clean(label="Hir", cfg="cfail3")]
395 #[rustc_metadata_dirty(cfg="cfail2")]
396 #[rustc_metadata_clean(cfg="cfail3")]
397 impl ChangeArgumentTypeTrait for Foo {
398 #[rustc_dirty(label="Hir", cfg="cfail2")]
399 #[rustc_clean(label="Hir", cfg="cfail3")]
400 #[rustc_metadata_dirty(cfg="cfail2")]
401 #[rustc_metadata_clean(cfg="cfail3")]
402 fn method_name(&self, _x: char) { }