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_clean(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_clean(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_clean(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 #[rustc_metadata_dirty(cfg="cfail2")]
223 #[rustc_metadata_clean(cfg="cfail3")]
224 pub fn change_method_parameter_name(&self, b: i64) { }
229 // Change Method Return Type ---------------------------------------------------
232 pub fn change_method_return_type(&self) -> u16 { 0 }
236 #[rustc_clean(label="Hir", cfg="cfail2")]
237 #[rustc_clean(label="Hir", cfg="cfail3")]
238 #[rustc_metadata_clean(cfg="cfail2")]
239 #[rustc_metadata_clean(cfg="cfail3")]
241 #[rustc_dirty(label="Hir", cfg="cfail2")]
242 #[rustc_clean(label="Hir", cfg="cfail3")]
243 #[rustc_metadata_dirty(cfg="cfail2")]
244 #[rustc_metadata_clean(cfg="cfail3")]
245 pub fn change_method_return_type(&self) -> u8 { 0 }
250 // Make Method #[inline] -------------------------------------------------------
253 pub fn make_method_inline(&self) -> u8 { 0 }
257 #[rustc_clean(label="Hir", cfg="cfail2")]
258 #[rustc_clean(label="Hir", cfg="cfail3")]
259 #[rustc_metadata_clean(cfg="cfail2")]
260 #[rustc_metadata_clean(cfg="cfail3")]
262 #[rustc_dirty(label="Hir", cfg="cfail2")]
263 #[rustc_clean(label="Hir", cfg="cfail3")]
264 #[rustc_metadata_dirty(cfg="cfail2")]
265 #[rustc_metadata_clean(cfg="cfail3")]
267 pub fn make_method_inline(&self) -> u8 { 0 }
272 // Change order of parameters -------------------------------------------------
275 pub fn change_method_parameter_order(&self, a: i64, b: i64) { }
279 #[rustc_clean(label="Hir", cfg="cfail2")]
280 #[rustc_clean(label="Hir", cfg="cfail3")]
281 #[rustc_metadata_clean(cfg="cfail2")]
282 #[rustc_metadata_clean(cfg="cfail3")]
284 #[rustc_clean(label="Hir", cfg="cfail2")]
285 #[rustc_clean(label="Hir", cfg="cfail3")]
286 #[rustc_dirty(label="HirBody", cfg="cfail2")]
287 #[rustc_clean(label="HirBody", cfg="cfail3")]
288 #[rustc_metadata_dirty(cfg="cfail2")]
289 #[rustc_metadata_clean(cfg="cfail3")]
290 pub fn change_method_parameter_order(&self, b: i64, a: i64) { }
295 // Make method unsafe ----------------------------------------------------------
298 pub fn make_method_unsafe(&self) { }
302 #[rustc_clean(label="Hir", cfg="cfail2")]
303 #[rustc_clean(label="Hir", cfg="cfail3")]
304 #[rustc_metadata_clean(cfg="cfail2")]
305 #[rustc_metadata_clean(cfg="cfail3")]
307 #[rustc_dirty(label="Hir", cfg="cfail2")]
308 #[rustc_clean(label="Hir", cfg="cfail3")]
309 #[rustc_metadata_dirty(cfg="cfail2")]
310 #[rustc_metadata_clean(cfg="cfail3")]
311 pub unsafe fn make_method_unsafe(&self) { }
316 // Make method extern ----------------------------------------------------------
319 pub fn make_method_extern(&self) { }
323 #[rustc_clean(label="Hir", cfg="cfail2")]
324 #[rustc_clean(label="Hir", cfg="cfail3")]
325 #[rustc_metadata_clean(cfg="cfail2")]
326 #[rustc_metadata_clean(cfg="cfail3")]
328 #[rustc_dirty(label="Hir", cfg="cfail2")]
329 #[rustc_clean(label="Hir", cfg="cfail3")]
330 #[rustc_metadata_dirty(cfg="cfail2")]
331 #[rustc_metadata_clean(cfg="cfail3")]
332 pub extern fn make_method_extern(&self) { }
337 // Change method calling convention --------------------------------------------
340 pub extern "C" fn change_method_calling_convention(&self) { }
344 #[rustc_clean(label="Hir", cfg="cfail2")]
345 #[rustc_clean(label="Hir", cfg="cfail3")]
346 #[rustc_metadata_clean(cfg="cfail2")]
347 #[rustc_metadata_clean(cfg="cfail3")]
349 #[rustc_dirty(label="Hir", cfg="cfail2")]
350 #[rustc_clean(label="Hir", cfg="cfail3")]
351 #[rustc_metadata_dirty(cfg="cfail2")]
352 #[rustc_metadata_clean(cfg="cfail3")]
353 pub extern "system" fn change_method_calling_convention(&self) { }
358 // Add Lifetime Parameter to Method --------------------------------------------
361 pub fn add_lifetime_parameter_to_method(&self) { }
365 #[rustc_clean(label="Hir", cfg="cfail2")]
366 #[rustc_clean(label="Hir", cfg="cfail3")]
367 #[rustc_metadata_clean(cfg="cfail2")]
368 #[rustc_metadata_clean(cfg="cfail3")]
370 #[rustc_dirty(label="Hir", cfg="cfail2")]
371 #[rustc_clean(label="Hir", cfg="cfail3")]
372 #[rustc_metadata_clean(cfg="cfail2")] // Apparently unused lifetimes don't show up in the type.
373 #[rustc_metadata_clean(cfg="cfail3")]
374 pub fn add_lifetime_parameter_to_method<'a>(&self) { }
379 // Add Type Parameter To Method ------------------------------------------------
382 pub fn add_type_parameter_to_method(&self) { }
386 #[rustc_clean(label="Hir", cfg="cfail2")]
387 #[rustc_clean(label="Hir", cfg="cfail3")]
388 #[rustc_metadata_clean(cfg="cfail2")]
389 #[rustc_metadata_clean(cfg="cfail3")]
391 #[rustc_dirty(label="Hir", cfg="cfail2")]
392 #[rustc_clean(label="Hir", cfg="cfail3")]
393 #[rustc_metadata_dirty(cfg="cfail2")]
394 #[rustc_metadata_clean(cfg="cfail3")]
395 pub fn add_type_parameter_to_method<T>(&self) { }
400 // Add Lifetime Bound to Lifetime Parameter of Method --------------------------
403 pub fn add_lifetime_bound_to_lifetime_param_of_method<'a, 'b>(&self) { }
407 #[rustc_clean(label="Hir", cfg="cfail2")]
408 #[rustc_clean(label="Hir", cfg="cfail3")]
409 #[rustc_metadata_clean(cfg="cfail2")]
410 #[rustc_metadata_clean(cfg="cfail3")]
412 #[rustc_dirty(label="Hir", cfg="cfail2")]
413 #[rustc_clean(label="Hir", cfg="cfail3")]
414 #[rustc_metadata_dirty(cfg="cfail2")]
415 #[rustc_metadata_clean(cfg="cfail3")]
416 pub fn add_lifetime_bound_to_lifetime_param_of_method<'a, 'b: 'a>(&self) { }
421 // Add Lifetime Bound to Type Parameter of Method ------------------------------
424 pub fn add_lifetime_bound_to_type_param_of_method<'a, T>(&self) { }
428 #[rustc_clean(label="Hir", cfg="cfail2")]
429 #[rustc_clean(label="Hir", cfg="cfail3")]
430 #[rustc_metadata_clean(cfg="cfail2")]
431 #[rustc_metadata_clean(cfg="cfail3")]
433 #[rustc_dirty(label="Hir", cfg="cfail2")]
434 #[rustc_clean(label="Hir", cfg="cfail3")]
435 #[rustc_metadata_dirty(cfg="cfail2")]
436 #[rustc_metadata_clean(cfg="cfail3")]
437 pub fn add_lifetime_bound_to_type_param_of_method<'a, T: 'a>(&self) { }
442 // Add Trait Bound to Type Parameter of Method ------------------------------
445 pub fn add_trait_bound_to_type_param_of_method<T>(&self) { }
449 #[rustc_clean(label="Hir", cfg="cfail2")]
450 #[rustc_clean(label="Hir", cfg="cfail3")]
451 #[rustc_metadata_clean(cfg="cfail2")]
452 #[rustc_metadata_clean(cfg="cfail3")]
454 #[rustc_dirty(label="Hir", cfg="cfail2")]
455 #[rustc_clean(label="Hir", cfg="cfail3")]
456 #[rustc_metadata_dirty(cfg="cfail2")]
457 #[rustc_metadata_clean(cfg="cfail3")]
458 pub fn add_trait_bound_to_type_param_of_method<T: Clone>(&self) { }
463 // Add #[no_mangle] to Method --------------------------------------------------
466 pub fn add_no_mangle_to_method(&self) { }
470 #[rustc_clean(label="Hir", cfg="cfail2")]
471 #[rustc_clean(label="Hir", cfg="cfail3")]
472 #[rustc_metadata_clean(cfg="cfail2")]
473 #[rustc_metadata_clean(cfg="cfail3")]
475 #[rustc_dirty(label="Hir", cfg="cfail2")]
476 #[rustc_clean(label="Hir", cfg="cfail3")]
477 #[rustc_metadata_dirty(cfg="cfail2")]
478 #[rustc_metadata_clean(cfg="cfail3")]
480 pub fn add_no_mangle_to_method(&self) { }
487 // Add Type Parameter To Impl --------------------------------------------------
490 pub fn add_type_parameter_to_impl(&self) { }
494 #[rustc_dirty(label="Hir", cfg="cfail2")]
495 #[rustc_clean(label="Hir", cfg="cfail3")]
496 #[rustc_metadata_dirty(cfg="cfail2")]
497 #[rustc_metadata_clean(cfg="cfail3")]
499 #[rustc_clean(label="Hir", cfg="cfail2")]
500 #[rustc_clean(label="Hir", cfg="cfail3")]
501 #[rustc_metadata_dirty(cfg="cfail2")]
502 #[rustc_metadata_clean(cfg="cfail3")]
503 pub fn add_type_parameter_to_impl(&self) { }
508 // Change Self Type of Impl ----------------------------------------------------
511 pub fn change_impl_self_type(&self) { }
515 #[rustc_dirty(label="Hir", cfg="cfail2")]
516 #[rustc_clean(label="Hir", cfg="cfail3")]
517 #[rustc_metadata_dirty(cfg="cfail2")]
518 #[rustc_metadata_clean(cfg="cfail3")]
520 #[rustc_clean(label="Hir", cfg="cfail2")]
521 #[rustc_clean(label="Hir", cfg="cfail3")]
522 #[rustc_metadata_dirty(cfg="cfail2")]
523 #[rustc_metadata_clean(cfg="cfail3")]
524 pub fn change_impl_self_type(&self) { }
529 // Add Lifetime Bound to Impl --------------------------------------------------
532 pub fn add_lifetime_bound_to_impl_parameter(&self) { }
536 #[rustc_dirty(label="Hir", cfg="cfail2")]
537 #[rustc_clean(label="Hir", cfg="cfail3")]
538 #[rustc_metadata_dirty(cfg="cfail2")]
539 #[rustc_metadata_clean(cfg="cfail3")]
540 impl<T: 'static> Bar<T> {
541 #[rustc_clean(label="Hir", cfg="cfail2")]
542 #[rustc_clean(label="Hir", cfg="cfail3")]
543 #[rustc_metadata_clean(cfg="cfail2")]
544 #[rustc_metadata_clean(cfg="cfail3")]
545 pub fn add_lifetime_bound_to_impl_parameter(&self) { }
550 // Add Trait Bound to Impl Parameter -------------------------------------------
553 pub fn add_trait_bound_to_impl_parameter(&self) { }
557 #[rustc_dirty(label="Hir", cfg="cfail2")]
558 #[rustc_clean(label="Hir", cfg="cfail3")]
559 #[rustc_metadata_dirty(cfg="cfail2")]
560 #[rustc_metadata_clean(cfg="cfail3")]
561 impl<T: Clone> Bar<T> {
562 #[rustc_clean(label="Hir", cfg="cfail2")]
563 #[rustc_clean(label="Hir", cfg="cfail3")]
564 #[rustc_metadata_clean(cfg="cfail2")]
565 #[rustc_metadata_clean(cfg="cfail3")]
566 pub fn add_trait_bound_to_impl_parameter(&self) { }