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)]
30 // Change Method Name -----------------------------------------------------------
33 pub fn method_name() { }
37 #[rustc_dirty(label="Hir", cfg="cfail2")]
38 #[rustc_clean(label="Hir", cfg="cfail3")]
39 #[rustc_metadata_dirty(cfg="cfail2")]
40 #[rustc_metadata_clean(cfg="cfail3")]
42 #[rustc_clean(label="Hir", cfg="cfail3")]
43 #[rustc_metadata_clean(cfg="cfail3")]
44 pub fn method_name2() { }
47 // Change Method Body -----------------------------------------------------------
49 // This should affect the method itself, but not the impl.
52 pub fn method_body() { }
56 #[rustc_clean(label="Hir", cfg="cfail2")]
57 #[rustc_clean(label="Hir", cfg="cfail3")]
58 #[rustc_metadata_clean(cfg="cfail2")]
59 #[rustc_metadata_clean(cfg="cfail3")]
61 #[rustc_clean(label="Hir", cfg="cfail2")]
62 #[rustc_clean(label="Hir", cfg="cfail3")]
63 #[rustc_dirty(label="HirBody", cfg="cfail2")]
64 #[rustc_clean(label="HirBody", cfg="cfail3")]
65 #[rustc_metadata_clean(cfg="cfail2")]
66 #[rustc_metadata_clean(cfg="cfail3")]
67 pub fn method_body() {
68 println!("Hello, world!");
73 // Change Method Body (inlined) ------------------------------------------------
75 // This should affect the method itself, but not the impl.
79 pub fn method_body_inlined() { }
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")]
88 #[rustc_clean(label="Hir", cfg="cfail2")]
89 #[rustc_clean(label="Hir", cfg="cfail3")]
90 #[rustc_dirty(label="HirBody", cfg="cfail2")]
91 #[rustc_clean(label="HirBody", cfg="cfail3")]
92 #[rustc_metadata_dirty(cfg="cfail2")]
93 #[rustc_metadata_clean(cfg="cfail3")]
95 pub fn method_body_inlined() {
96 println!("Hello, world!");
101 // Change Method Privacy -------------------------------------------------------
104 pub fn method_privacy() { }
108 #[rustc_dirty(label="Hir", cfg="cfail2")]
109 #[rustc_clean(label="Hir", cfg="cfail3")]
110 #[rustc_metadata_dirty(cfg="cfail2")]
111 #[rustc_metadata_clean(cfg="cfail3")]
113 #[rustc_dirty(label="Hir", cfg="cfail2")]
114 #[rustc_clean(label="Hir", cfg="cfail3")]
115 #[rustc_metadata_dirty(cfg="cfail2")]
116 #[rustc_metadata_clean(cfg="cfail3")]
117 fn method_privacy() { }
120 // Change Method Selfness -----------------------------------------------------------
123 pub fn method_selfness() { }
127 #[rustc_dirty(label="Hir", cfg="cfail2")]
128 #[rustc_clean(label="Hir", cfg="cfail3")]
129 #[rustc_metadata_dirty(cfg="cfail2")]
130 #[rustc_metadata_clean(cfg="cfail3")]
132 #[rustc_dirty(label="Hir", cfg="cfail2")]
133 #[rustc_clean(label="Hir", cfg="cfail3")]
134 #[rustc_metadata_dirty(cfg="cfail2")]
135 #[rustc_metadata_clean(cfg="cfail3")]
136 pub fn method_selfness(&self) { }
139 // Change Method Selfmutness ---------------------------------------------------
142 pub fn method_selfmutness(&self) { }
146 #[rustc_clean(label="Hir", cfg="cfail2")]
147 #[rustc_clean(label="Hir", cfg="cfail3")]
148 #[rustc_metadata_clean(cfg="cfail2")]
149 #[rustc_metadata_clean(cfg="cfail3")]
151 #[rustc_dirty(label="Hir", cfg="cfail2")]
152 #[rustc_clean(label="Hir", cfg="cfail3")]
153 #[rustc_metadata_dirty(cfg="cfail2")]
154 #[rustc_metadata_clean(cfg="cfail3")]
155 pub fn method_selfmutness(&mut self) { }
160 // Add Method To Impl ----------------------------------------------------------
163 pub fn add_method_to_impl1(&self) { }
167 #[rustc_dirty(label="Hir", cfg="cfail2")]
168 #[rustc_clean(label="Hir", cfg="cfail3")]
169 #[rustc_metadata_dirty(cfg="cfail2")]
170 #[rustc_metadata_clean(cfg="cfail3")]
172 #[rustc_clean(label="Hir", cfg="cfail2")]
173 #[rustc_clean(label="Hir", cfg="cfail3")]
174 #[rustc_metadata_dirty(cfg="cfail2")]
175 #[rustc_metadata_clean(cfg="cfail3")]
176 pub fn add_method_to_impl1(&self) { }
178 #[rustc_clean(label="Hir", cfg="cfail3")]
179 #[rustc_metadata_clean(cfg="cfail3")]
180 pub fn add_method_to_impl2(&self) { }
185 // Add Method Parameter --------------------------------------------------------
188 pub fn add_method_parameter(&self) { }
192 #[rustc_clean(label="Hir", cfg="cfail2")]
193 #[rustc_clean(label="Hir", cfg="cfail3")]
194 #[rustc_metadata_clean(cfg="cfail2")]
195 #[rustc_metadata_clean(cfg="cfail3")]
197 #[rustc_dirty(label="Hir", cfg="cfail2")]
198 #[rustc_clean(label="Hir", cfg="cfail3")]
199 #[rustc_metadata_dirty(cfg="cfail2")]
200 #[rustc_metadata_clean(cfg="cfail3")]
201 pub fn add_method_parameter(&self, _: i32) { }
206 // Change Method Parameter Name ------------------------------------------------
209 pub fn change_method_parameter_name(&self, a: i64) { }
213 #[rustc_clean(label="Hir", cfg="cfail2")]
214 #[rustc_clean(label="Hir", cfg="cfail3")]
215 #[rustc_metadata_clean(cfg="cfail2")]
216 #[rustc_metadata_clean(cfg="cfail3")]
218 #[rustc_clean(label="Hir", cfg="cfail2")]
219 #[rustc_clean(label="Hir", cfg="cfail3")]
220 #[rustc_dirty(label="HirBody", cfg="cfail2")]
221 #[rustc_clean(label="HirBody", cfg="cfail3")]
222 // At the moment we explicitly ignore argument names in metadata, since they
223 // are not used in downstream crates (except in rustdoc)
224 #[rustc_metadata_clean(cfg="cfail2")]
225 #[rustc_metadata_clean(cfg="cfail3")]
226 pub fn change_method_parameter_name(&self, b: i64) { }
231 // Change Method Return Type ---------------------------------------------------
234 pub fn change_method_return_type(&self) -> u16 { 0 }
238 #[rustc_clean(label="Hir", cfg="cfail2")]
239 #[rustc_clean(label="Hir", cfg="cfail3")]
240 #[rustc_metadata_clean(cfg="cfail2")]
241 #[rustc_metadata_clean(cfg="cfail3")]
243 #[rustc_dirty(label="Hir", cfg="cfail2")]
244 #[rustc_clean(label="Hir", cfg="cfail3")]
245 #[rustc_metadata_dirty(cfg="cfail2")]
246 #[rustc_metadata_clean(cfg="cfail3")]
247 pub fn change_method_return_type(&self) -> u8 { 0 }
252 // Make Method #[inline] -------------------------------------------------------
255 pub fn make_method_inline(&self) -> u8 { 0 }
259 #[rustc_clean(label="Hir", cfg="cfail2")]
260 #[rustc_clean(label="Hir", cfg="cfail3")]
261 #[rustc_metadata_clean(cfg="cfail2")]
262 #[rustc_metadata_clean(cfg="cfail3")]
264 #[rustc_dirty(label="Hir", cfg="cfail2")]
265 #[rustc_clean(label="Hir", cfg="cfail3")]
266 #[rustc_metadata_dirty(cfg="cfail2")]
267 #[rustc_metadata_clean(cfg="cfail3")]
269 pub fn make_method_inline(&self) -> u8 { 0 }
274 // Change order of parameters -------------------------------------------------
277 pub fn change_method_parameter_order(&self, a: i64, b: i64) { }
281 #[rustc_clean(label="Hir", cfg="cfail2")]
282 #[rustc_clean(label="Hir", cfg="cfail3")]
283 #[rustc_metadata_clean(cfg="cfail2")]
284 #[rustc_metadata_clean(cfg="cfail3")]
286 #[rustc_clean(label="Hir", cfg="cfail2")]
287 #[rustc_clean(label="Hir", cfg="cfail3")]
288 #[rustc_dirty(label="HirBody", cfg="cfail2")]
289 #[rustc_clean(label="HirBody", cfg="cfail3")]
290 // At the moment we explicitly ignore argument names in metadata, since they
291 // are not used in downstream crates (except in rustdoc)
292 #[rustc_metadata_clean(cfg="cfail2")]
293 #[rustc_metadata_clean(cfg="cfail3")]
294 pub fn change_method_parameter_order(&self, b: i64, a: i64) { }
299 // Make method unsafe ----------------------------------------------------------
302 pub fn make_method_unsafe(&self) { }
306 #[rustc_clean(label="Hir", cfg="cfail2")]
307 #[rustc_clean(label="Hir", cfg="cfail3")]
308 #[rustc_metadata_clean(cfg="cfail2")]
309 #[rustc_metadata_clean(cfg="cfail3")]
311 #[rustc_dirty(label="Hir", cfg="cfail2")]
312 #[rustc_clean(label="Hir", cfg="cfail3")]
313 #[rustc_metadata_dirty(cfg="cfail2")]
314 #[rustc_metadata_clean(cfg="cfail3")]
315 pub unsafe fn make_method_unsafe(&self) { }
320 // Make method extern ----------------------------------------------------------
323 pub fn make_method_extern(&self) { }
327 #[rustc_clean(label="Hir", cfg="cfail2")]
328 #[rustc_clean(label="Hir", cfg="cfail3")]
329 #[rustc_metadata_clean(cfg="cfail2")]
330 #[rustc_metadata_clean(cfg="cfail3")]
332 #[rustc_dirty(label="Hir", cfg="cfail2")]
333 #[rustc_clean(label="Hir", cfg="cfail3")]
334 #[rustc_metadata_dirty(cfg="cfail2")]
335 #[rustc_metadata_clean(cfg="cfail3")]
336 pub extern fn make_method_extern(&self) { }
341 // Change method calling convention --------------------------------------------
344 pub extern "C" fn change_method_calling_convention(&self) { }
348 #[rustc_clean(label="Hir", cfg="cfail2")]
349 #[rustc_clean(label="Hir", cfg="cfail3")]
350 #[rustc_metadata_clean(cfg="cfail2")]
351 #[rustc_metadata_clean(cfg="cfail3")]
353 #[rustc_dirty(label="Hir", cfg="cfail2")]
354 #[rustc_clean(label="Hir", cfg="cfail3")]
355 #[rustc_metadata_dirty(cfg="cfail2")]
356 #[rustc_metadata_clean(cfg="cfail3")]
357 pub extern "system" fn change_method_calling_convention(&self) { }
362 // Add Lifetime Parameter to Method --------------------------------------------
365 pub fn add_lifetime_parameter_to_method(&self) { }
369 #[rustc_clean(label="Hir", cfg="cfail2")]
370 #[rustc_clean(label="Hir", cfg="cfail3")]
371 #[rustc_metadata_clean(cfg="cfail2")]
372 #[rustc_metadata_clean(cfg="cfail3")]
374 #[rustc_dirty(label="Hir", cfg="cfail2")]
375 #[rustc_clean(label="Hir", cfg="cfail3")]
376 #[rustc_metadata_dirty(cfg="cfail2")]
377 #[rustc_metadata_clean(cfg="cfail3")]
378 pub fn add_lifetime_parameter_to_method<'a>(&self) { }
383 // Add Type Parameter To Method ------------------------------------------------
386 pub fn add_type_parameter_to_method(&self) { }
390 #[rustc_clean(label="Hir", cfg="cfail2")]
391 #[rustc_clean(label="Hir", cfg="cfail3")]
392 #[rustc_metadata_clean(cfg="cfail2")]
393 #[rustc_metadata_clean(cfg="cfail3")]
395 #[rustc_dirty(label="Hir", cfg="cfail2")]
396 #[rustc_clean(label="Hir", cfg="cfail3")]
397 #[rustc_metadata_dirty(cfg="cfail2")]
398 #[rustc_metadata_clean(cfg="cfail3")]
399 pub fn add_type_parameter_to_method<T>(&self) { }
404 // Add Lifetime Bound to Lifetime Parameter of Method --------------------------
407 pub fn add_lifetime_bound_to_lifetime_param_of_method<'a, 'b>(&self) { }
411 #[rustc_clean(label="Hir", cfg="cfail2")]
412 #[rustc_clean(label="Hir", cfg="cfail3")]
413 #[rustc_metadata_clean(cfg="cfail2")]
414 #[rustc_metadata_clean(cfg="cfail3")]
416 #[rustc_dirty(label="Hir", cfg="cfail2")]
417 #[rustc_clean(label="Hir", cfg="cfail3")]
418 #[rustc_metadata_dirty(cfg="cfail2")]
419 #[rustc_metadata_clean(cfg="cfail3")]
420 pub fn add_lifetime_bound_to_lifetime_param_of_method<'a, 'b: 'a>(&self) { }
425 // Add Lifetime Bound to Type Parameter of Method ------------------------------
428 pub fn add_lifetime_bound_to_type_param_of_method<'a, T>(&self) { }
432 #[rustc_clean(label="Hir", cfg="cfail2")]
433 #[rustc_clean(label="Hir", cfg="cfail3")]
434 #[rustc_metadata_clean(cfg="cfail2")]
435 #[rustc_metadata_clean(cfg="cfail3")]
437 #[rustc_dirty(label="Hir", cfg="cfail2")]
438 #[rustc_clean(label="Hir", cfg="cfail3")]
439 #[rustc_metadata_dirty(cfg="cfail2")]
440 #[rustc_metadata_clean(cfg="cfail3")]
441 pub fn add_lifetime_bound_to_type_param_of_method<'a, T: 'a>(&self) { }
446 // Add Trait Bound to Type Parameter of Method ------------------------------
449 pub fn add_trait_bound_to_type_param_of_method<T>(&self) { }
453 #[rustc_clean(label="Hir", cfg="cfail2")]
454 #[rustc_clean(label="Hir", cfg="cfail3")]
455 #[rustc_metadata_clean(cfg="cfail2")]
456 #[rustc_metadata_clean(cfg="cfail3")]
458 #[rustc_dirty(label="Hir", cfg="cfail2")]
459 #[rustc_clean(label="Hir", cfg="cfail3")]
460 #[rustc_metadata_dirty(cfg="cfail2")]
461 #[rustc_metadata_clean(cfg="cfail3")]
462 pub fn add_trait_bound_to_type_param_of_method<T: Clone>(&self) { }
467 // Add #[no_mangle] to Method --------------------------------------------------
470 pub fn add_no_mangle_to_method(&self) { }
474 #[rustc_clean(label="Hir", cfg="cfail2")]
475 #[rustc_clean(label="Hir", cfg="cfail3")]
476 #[rustc_metadata_clean(cfg="cfail2")]
477 #[rustc_metadata_clean(cfg="cfail3")]
479 #[rustc_dirty(label="Hir", cfg="cfail2")]
480 #[rustc_clean(label="Hir", cfg="cfail3")]
481 #[rustc_metadata_dirty(cfg="cfail2")]
482 #[rustc_metadata_clean(cfg="cfail3")]
484 pub fn add_no_mangle_to_method(&self) { }
491 // Add Type Parameter To Impl --------------------------------------------------
494 pub fn add_type_parameter_to_impl(&self) { }
498 #[rustc_dirty(label="Hir", cfg="cfail2")]
499 #[rustc_clean(label="Hir", cfg="cfail3")]
500 #[rustc_metadata_dirty(cfg="cfail2")]
501 #[rustc_metadata_clean(cfg="cfail3")]
503 #[rustc_clean(label="Hir", cfg="cfail2")]
504 #[rustc_clean(label="Hir", cfg="cfail3")]
505 #[rustc_metadata_dirty(cfg="cfail2")]
506 #[rustc_metadata_clean(cfg="cfail3")]
507 pub fn add_type_parameter_to_impl(&self) { }
512 // Change Self Type of Impl ----------------------------------------------------
515 pub fn change_impl_self_type(&self) { }
519 #[rustc_dirty(label="Hir", cfg="cfail2")]
520 #[rustc_clean(label="Hir", cfg="cfail3")]
521 #[rustc_metadata_dirty(cfg="cfail2")]
522 #[rustc_metadata_clean(cfg="cfail3")]
524 #[rustc_clean(label="Hir", cfg="cfail2")]
525 #[rustc_clean(label="Hir", cfg="cfail3")]
526 #[rustc_metadata_dirty(cfg="cfail2")]
527 #[rustc_metadata_clean(cfg="cfail3")]
528 pub fn change_impl_self_type(&self) { }
533 // Add Lifetime Bound to Impl --------------------------------------------------
536 pub fn add_lifetime_bound_to_impl_parameter(&self) { }
540 #[rustc_dirty(label="Hir", cfg="cfail2")]
541 #[rustc_clean(label="Hir", cfg="cfail3")]
542 #[rustc_metadata_dirty(cfg="cfail2")]
543 #[rustc_metadata_clean(cfg="cfail3")]
544 impl<T: 'static> Bar<T> {
545 #[rustc_clean(label="Hir", cfg="cfail2")]
546 #[rustc_clean(label="Hir", cfg="cfail3")]
547 #[rustc_metadata_dirty(cfg="cfail2")]
548 #[rustc_metadata_clean(cfg="cfail3")]
549 pub fn add_lifetime_bound_to_impl_parameter(&self) { }
554 // Add Trait Bound to Impl Parameter -------------------------------------------
557 pub fn add_trait_bound_to_impl_parameter(&self) { }
561 #[rustc_dirty(label="Hir", cfg="cfail2")]
562 #[rustc_clean(label="Hir", cfg="cfail3")]
563 #[rustc_metadata_dirty(cfg="cfail2")]
564 #[rustc_metadata_clean(cfg="cfail3")]
565 impl<T: Clone> Bar<T> {
566 #[rustc_clean(label="Hir", cfg="cfail2")]
567 #[rustc_clean(label="Hir", cfg="cfail3")]
568 #[rustc_metadata_dirty(cfg="cfail2")]
569 #[rustc_metadata_clean(cfg="cfail3")]
570 pub fn add_trait_bound_to_impl_parameter(&self) { }