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 trait definitions.
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 // We also test the ICH for trait definitions exported in metadata. Same as
20 // above, we want to make sure that the change between rev1 and rev2 also
21 // results in a change of the ICH for the trait's metadata, and that it stays
22 // the same between rev2 and rev3.
24 // must-compile-successfully
25 // revisions: cfail1 cfail2 cfail3
26 // compile-flags: -Z query-dep-graph
29 #![feature(rustc_attrs)]
31 #![feature(associated_type_defaults)]
32 #![feature(intrinsics)]
33 #![feature(associated_consts)]
36 // Change trait visibility --------------------------------------------------------
38 trait TraitVisibility { }
41 #[rustc_dirty(label="Hir", cfg="cfail2")]
42 #[rustc_clean(label="Hir", cfg="cfail3")]
43 #[rustc_metadata_clean(cfg="cfail3")]
44 pub trait TraitVisibility { }
48 // Change trait unsafety ----------------------------------------------------------
50 trait TraitUnsafety { }
53 #[rustc_dirty(label="Hir", cfg="cfail2")]
54 #[rustc_clean(label="Hir", cfg="cfail3")]
55 #[rustc_metadata_dirty(cfg="cfail2")]
56 #[rustc_metadata_clean(cfg="cfail3")]
57 unsafe trait TraitUnsafety { }
61 // Add method ---------------------------------------------------------------------
63 trait TraitAddMethod {
67 #[rustc_dirty(label="Hir", cfg="cfail2")]
68 #[rustc_clean(label="Hir", cfg="cfail3")]
69 #[rustc_metadata_dirty(cfg="cfail2")]
70 #[rustc_metadata_clean(cfg="cfail3")]
71 pub trait TraitAddMethod {
77 // Change name of method ----------------------------------------------------------
79 trait TraitChangeMethodName {
84 #[rustc_dirty(label="Hir", cfg="cfail2")]
85 #[rustc_clean(label="Hir", cfg="cfail3")]
86 #[rustc_metadata_dirty(cfg="cfail2")]
87 #[rustc_metadata_clean(cfg="cfail3")]
88 trait TraitChangeMethodName {
94 // Add return type to method ------------------------------------------------------
96 trait TraitAddReturnType {
101 #[rustc_clean(label="Hir", cfg="cfail2")]
102 #[rustc_clean(label="Hir", cfg="cfail3")]
103 #[rustc_metadata_clean(cfg="cfail2")]
104 #[rustc_metadata_clean(cfg="cfail3")]
105 trait TraitAddReturnType {
106 #[rustc_dirty(label="Hir", cfg="cfail2")]
107 #[rustc_clean(label="Hir", cfg="cfail3")]
108 #[rustc_metadata_dirty(cfg="cfail2")]
109 #[rustc_metadata_clean(cfg="cfail3")]
115 // Change return type of method ---------------------------------------------------
117 trait TraitChangeReturnType {
122 #[rustc_clean(label="Hir", cfg="cfail2")]
123 #[rustc_clean(label="Hir", cfg="cfail3")]
124 #[rustc_metadata_clean(cfg="cfail2")]
125 #[rustc_metadata_clean(cfg="cfail3")]
126 trait TraitChangeReturnType {
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")]
136 // Add parameter to method --------------------------------------------------------
138 trait TraitAddParameterToMethod {
143 #[rustc_clean(label="Hir", cfg="cfail2")]
144 #[rustc_clean(label="Hir", cfg="cfail3")]
145 #[rustc_metadata_clean(cfg="cfail2")]
146 #[rustc_metadata_clean(cfg="cfail3")]
147 trait TraitAddParameterToMethod {
148 #[rustc_dirty(label="Hir", cfg="cfail2")]
149 #[rustc_clean(label="Hir", cfg="cfail3")]
150 #[rustc_metadata_dirty(cfg="cfail2")]
151 #[rustc_metadata_clean(cfg="cfail3")]
157 // Change name of method parameter ------------------------------------------------
159 trait TraitChangeMethodParameterName {
161 fn with_default(x: i32) {}
165 #[rustc_clean(label="Hir", cfg="cfail2")]
166 #[rustc_clean(label="Hir", cfg="cfail3")]
167 #[rustc_metadata_clean(cfg="cfail2")]
168 #[rustc_metadata_clean(cfg="cfail3")]
169 trait TraitChangeMethodParameterName {
170 // FIXME(#38501) This should preferably always be clean.
171 #[rustc_dirty(label="Hir", cfg="cfail2")]
172 #[rustc_clean(label="Hir", cfg="cfail3")]
173 #[rustc_metadata_dirty(cfg="cfail2")]
174 #[rustc_metadata_clean(cfg="cfail3")]
177 #[rustc_clean(label="Hir", cfg="cfail2")]
178 #[rustc_clean(label="Hir", cfg="cfail3")]
179 #[rustc_dirty(label="HirBody", cfg="cfail2")]
180 #[rustc_clean(label="HirBody", cfg="cfail3")]
181 #[rustc_metadata_dirty(cfg="cfail2")]
182 #[rustc_metadata_clean(cfg="cfail3")]
183 fn with_default(y: i32) {}
188 // Change type of method parameter (i32 => i64) -----------------------------------
190 trait TraitChangeMethodParameterType {
195 #[rustc_clean(label="Hir", cfg="cfail2")]
196 #[rustc_clean(label="Hir", cfg="cfail3")]
197 #[rustc_metadata_clean(cfg="cfail2")]
198 #[rustc_metadata_clean(cfg="cfail3")]
199 trait TraitChangeMethodParameterType {
200 #[rustc_dirty(label="Hir", cfg="cfail2")]
201 #[rustc_clean(label="Hir", cfg="cfail3")]
202 #[rustc_metadata_dirty(cfg="cfail2")]
203 #[rustc_metadata_clean(cfg="cfail3")]
209 // Change type of method parameter (&i32 => &mut i32) -----------------------------
211 trait TraitChangeMethodParameterTypeRef {
216 #[rustc_clean(label="Hir", cfg="cfail2")]
217 #[rustc_clean(label="Hir", cfg="cfail3")]
218 #[rustc_metadata_clean(cfg="cfail2")]
219 #[rustc_metadata_clean(cfg="cfail3")]
220 trait TraitChangeMethodParameterTypeRef {
221 #[rustc_dirty(label="Hir", cfg="cfail2")]
222 #[rustc_clean(label="Hir", cfg="cfail3")]
223 #[rustc_metadata_dirty(cfg="cfail2")]
224 #[rustc_metadata_clean(cfg="cfail3")]
225 fn method(a: &mut i32);
230 // Change order of method parameters ----------------------------------------------
232 trait TraitChangeMethodParametersOrder {
233 fn method(a: i32, b: i64);
237 #[rustc_clean(label="Hir", cfg="cfail2")]
238 #[rustc_clean(label="Hir", cfg="cfail3")]
239 #[rustc_metadata_clean(cfg="cfail2")]
240 #[rustc_metadata_clean(cfg="cfail3")]
241 trait TraitChangeMethodParametersOrder {
242 #[rustc_dirty(label="Hir", cfg="cfail2")]
243 #[rustc_clean(label="Hir", cfg="cfail3")]
244 #[rustc_metadata_dirty(cfg="cfail2")]
245 #[rustc_metadata_clean(cfg="cfail3")]
246 fn method(b: i64, a: i32);
251 // Add default implementation to method -------------------------------------------
253 trait TraitAddMethodDefaultImplementation {
258 #[rustc_dirty(label="Hir", cfg="cfail2")]
259 #[rustc_clean(label="Hir", cfg="cfail3")]
260 #[rustc_metadata_clean(cfg="cfail2")]
261 #[rustc_metadata_clean(cfg="cfail3")]
262 trait TraitAddMethodDefaultImplementation {
263 #[rustc_dirty(label="Hir", cfg="cfail2")]
264 #[rustc_clean(label="Hir", cfg="cfail3")]
265 #[rustc_metadata_dirty(cfg="cfail2")]
266 #[rustc_metadata_clean(cfg="cfail3")]
272 // Change order of methods --------------------------------------------------------
274 trait TraitChangeOrderOfMethods {
280 #[rustc_dirty(label="Hir", cfg="cfail2")]
281 #[rustc_clean(label="Hir", cfg="cfail3")]
282 #[rustc_metadata_dirty(cfg="cfail2")]
283 #[rustc_metadata_clean(cfg="cfail3")]
284 trait TraitChangeOrderOfMethods {
291 // Change mode of self parameter --------------------------------------------------
293 trait TraitChangeModeSelfRefToMut {
298 #[rustc_clean(label="Hir", cfg="cfail2")]
299 #[rustc_clean(label="Hir", cfg="cfail3")]
300 #[rustc_metadata_clean(cfg="cfail2")]
301 #[rustc_metadata_clean(cfg="cfail3")]
302 trait TraitChangeModeSelfRefToMut {
303 #[rustc_dirty(label="Hir", cfg="cfail2")]
304 #[rustc_clean(label="Hir", cfg="cfail3")]
305 #[rustc_metadata_dirty(cfg="cfail2")]
306 #[rustc_metadata_clean(cfg="cfail3")]
307 fn method(&mut self);
313 trait TraitChangeModeSelfOwnToMut: Sized {
318 #[rustc_clean(label="Hir", cfg="cfail2")]
319 #[rustc_clean(label="Hir", cfg="cfail3")]
320 #[rustc_metadata_clean(cfg="cfail2")]
321 #[rustc_metadata_clean(cfg="cfail3")]
322 trait TraitChangeModeSelfOwnToMut: Sized {
323 #[rustc_clean(label="Hir", cfg="cfail2")]
324 #[rustc_clean(label="Hir", cfg="cfail3")]
325 #[rustc_dirty(label="HirBody", cfg="cfail2")]
326 #[rustc_clean(label="HirBody", cfg="cfail3")]
327 #[rustc_metadata_dirty(cfg="cfail2")]
328 #[rustc_metadata_clean(cfg="cfail3")]
329 fn method(mut self) {}
335 trait TraitChangeModeSelfOwnToRef {
340 #[rustc_clean(label="Hir", cfg="cfail2")]
341 #[rustc_clean(label="Hir", cfg="cfail3")]
342 #[rustc_metadata_clean(cfg="cfail2")]
343 #[rustc_metadata_clean(cfg="cfail3")]
344 trait TraitChangeModeSelfOwnToRef {
345 #[rustc_dirty(label="Hir", cfg="cfail2")]
346 #[rustc_clean(label="Hir", cfg="cfail3")]
347 #[rustc_metadata_dirty(cfg="cfail2")]
348 #[rustc_metadata_clean(cfg="cfail3")]
354 // Add unsafe modifier to method --------------------------------------------------
356 trait TraitAddUnsafeModifier {
361 #[rustc_clean(label="Hir", cfg="cfail2")]
362 #[rustc_clean(label="Hir", cfg="cfail3")]
363 #[rustc_metadata_clean(cfg="cfail2")]
364 #[rustc_metadata_clean(cfg="cfail3")]
365 trait TraitAddUnsafeModifier {
366 #[rustc_dirty(label="Hir", cfg="cfail2")]
367 #[rustc_clean(label="Hir", cfg="cfail3")]
368 #[rustc_metadata_dirty(cfg="cfail2")]
369 #[rustc_metadata_clean(cfg="cfail3")]
375 // Add extern modifier to method --------------------------------------------------
377 trait TraitAddExternModifier {
382 #[rustc_clean(label="Hir", cfg="cfail2")]
383 #[rustc_clean(label="Hir", cfg="cfail3")]
384 #[rustc_metadata_clean(cfg="cfail2")]
385 #[rustc_metadata_clean(cfg="cfail3")]
386 trait TraitAddExternModifier {
387 #[rustc_dirty(label="Hir", cfg="cfail2")]
388 #[rustc_clean(label="Hir", cfg="cfail3")]
389 #[rustc_metadata_dirty(cfg="cfail2")]
390 #[rustc_metadata_clean(cfg="cfail3")]
396 // Change extern "C" to extern "rust-intrinsic" -----------------------------------
398 trait TraitChangeExternCToRustIntrinsic {
399 extern "C" fn method();
403 #[rustc_clean(label="Hir", cfg="cfail2")]
404 #[rustc_clean(label="Hir", cfg="cfail3")]
405 #[rustc_metadata_clean(cfg="cfail2")]
406 #[rustc_metadata_clean(cfg="cfail3")]
407 trait TraitChangeExternCToRustIntrinsic {
408 #[rustc_dirty(label="Hir", cfg="cfail2")]
409 #[rustc_clean(label="Hir", cfg="cfail3")]
410 #[rustc_metadata_dirty(cfg="cfail2")]
411 #[rustc_metadata_clean(cfg="cfail3")]
412 extern "rust-intrinsic" fn method();
417 // Add type parameter to method ---------------------------------------------------
419 trait TraitAddTypeParameterToMethod {
424 #[rustc_clean(label="Hir", cfg="cfail2")]
425 #[rustc_clean(label="Hir", cfg="cfail3")]
426 #[rustc_metadata_clean(cfg="cfail2")]
427 #[rustc_metadata_clean(cfg="cfail3")]
428 trait TraitAddTypeParameterToMethod {
429 #[rustc_dirty(label="Hir", cfg="cfail2")]
430 #[rustc_clean(label="Hir", cfg="cfail3")]
431 #[rustc_metadata_dirty(cfg="cfail2")]
432 #[rustc_metadata_clean(cfg="cfail3")]
438 // Add lifetime parameter to method -----------------------------------------------
440 trait TraitAddLifetimeParameterToMethod {
445 #[rustc_clean(label="Hir", cfg="cfail2")]
446 #[rustc_clean(label="Hir", cfg="cfail3")]
447 #[rustc_metadata_clean(cfg="cfail2")]
448 #[rustc_metadata_clean(cfg="cfail3")]
449 trait TraitAddLifetimeParameterToMethod {
450 #[rustc_dirty(label="Hir", cfg="cfail2")]
451 #[rustc_clean(label="Hir", cfg="cfail3")]
452 #[rustc_metadata_clean(cfg="cfail2")] // Unused lifetimes don't seem to show up in type?
453 #[rustc_metadata_clean(cfg="cfail3")]
459 // dummy trait for bound
460 trait ReferencedTrait0 { }
461 trait ReferencedTrait1 { }
463 // Add trait bound to method type parameter ---------------------------------------
465 trait TraitAddTraitBoundToMethodTypeParameter {
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")]
474 trait TraitAddTraitBoundToMethodTypeParameter {
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")]
479 fn method<T: ReferencedTrait0>();
484 // Add builtin bound to method type parameter -------------------------------------
486 trait TraitAddBuiltinBoundToMethodTypeParameter {
491 #[rustc_clean(label="Hir", cfg="cfail2")]
492 #[rustc_clean(label="Hir", cfg="cfail3")]
493 #[rustc_metadata_clean(cfg="cfail2")]
494 #[rustc_metadata_clean(cfg="cfail3")]
495 trait TraitAddBuiltinBoundToMethodTypeParameter {
496 #[rustc_dirty(label="Hir", cfg="cfail2")]
497 #[rustc_clean(label="Hir", cfg="cfail3")]
498 #[rustc_metadata_dirty(cfg="cfail2")]
499 #[rustc_metadata_clean(cfg="cfail3")]
500 fn method<T: Sized>();
505 // Add lifetime bound to method lifetime parameter ------------------------------------
507 trait TraitAddLifetimeBoundToMethodLifetimeParameter {
508 fn method<'a, 'b>(a: &'a u32, b: &'b u32);
512 #[rustc_clean(label="Hir", cfg="cfail2")]
513 #[rustc_clean(label="Hir", cfg="cfail3")]
514 #[rustc_metadata_clean(cfg="cfail2")]
515 #[rustc_metadata_clean(cfg="cfail3")]
516 trait TraitAddLifetimeBoundToMethodLifetimeParameter {
517 #[rustc_dirty(label="Hir", cfg="cfail2")]
518 #[rustc_clean(label="Hir", cfg="cfail3")]
519 #[rustc_metadata_dirty(cfg="cfail2")]
520 #[rustc_metadata_clean(cfg="cfail3")]
521 fn method<'a, 'b: 'a>(a: &'a u32, b: &'b u32);
526 // Add second trait bound to method type parameter --------------------------------
528 trait TraitAddSecondTraitBoundToMethodTypeParameter {
529 fn method<T: ReferencedTrait0>();
533 #[rustc_clean(label="Hir", cfg="cfail2")]
534 #[rustc_clean(label="Hir", cfg="cfail3")]
535 #[rustc_metadata_clean(cfg="cfail2")]
536 #[rustc_metadata_clean(cfg="cfail3")]
537 trait TraitAddSecondTraitBoundToMethodTypeParameter {
538 #[rustc_dirty(label="Hir", cfg="cfail2")]
539 #[rustc_clean(label="Hir", cfg="cfail3")]
540 #[rustc_metadata_dirty(cfg="cfail2")]
541 #[rustc_metadata_clean(cfg="cfail3")]
542 fn method<T: ReferencedTrait0 + ReferencedTrait1>();
547 // Add second builtin bound to method type parameter ------------------------------
549 trait TraitAddSecondBuiltinBoundToMethodTypeParameter {
550 fn method<T: Sized>();
554 #[rustc_clean(label="Hir", cfg="cfail2")]
555 #[rustc_clean(label="Hir", cfg="cfail3")]
556 #[rustc_metadata_clean(cfg="cfail2")]
557 #[rustc_metadata_clean(cfg="cfail3")]
558 trait TraitAddSecondBuiltinBoundToMethodTypeParameter {
559 #[rustc_dirty(label="Hir", cfg="cfail2")]
560 #[rustc_clean(label="Hir", cfg="cfail3")]
561 #[rustc_metadata_dirty(cfg="cfail2")]
562 #[rustc_metadata_clean(cfg="cfail3")]
563 fn method<T: Sized + Sync>();
568 // Add second lifetime bound to method lifetime parameter -----------------------------
570 trait TraitAddSecondLifetimeBoundToMethodLifetimeParameter {
571 fn method<'a, 'b, 'c: 'a>(a: &'a u32, b: &'b u32, c: &'c u32);
575 #[rustc_clean(label="Hir", cfg="cfail2")]
576 #[rustc_clean(label="Hir", cfg="cfail3")]
577 #[rustc_metadata_clean(cfg="cfail2")]
578 #[rustc_metadata_clean(cfg="cfail3")]
579 trait TraitAddSecondLifetimeBoundToMethodLifetimeParameter {
580 #[rustc_dirty(label="Hir", cfg="cfail2")]
581 #[rustc_clean(label="Hir", cfg="cfail3")]
582 #[rustc_metadata_dirty(cfg="cfail2")]
583 #[rustc_metadata_clean(cfg="cfail3")]
584 fn method<'a, 'b, 'c: 'a + 'b>(a: &'a u32, b: &'b u32, c: &'c u32);
589 // Add associated type ------------------------------------------------------------
591 trait TraitAddAssociatedType {
593 #[rustc_dirty(label="Hir", cfg="cfail2")]
594 #[rustc_clean(label="Hir", cfg="cfail3")]
595 #[rustc_metadata_dirty(cfg="cfail2")]
596 #[rustc_metadata_clean(cfg="cfail3")]
601 #[rustc_dirty(label="Hir", cfg="cfail2")]
602 #[rustc_clean(label="Hir", cfg="cfail3")]
603 #[rustc_metadata_dirty(cfg="cfail2")]
604 #[rustc_metadata_clean(cfg="cfail3")]
605 trait TraitAddAssociatedType {
613 // Add trait bound to associated type ---------------------------------------------
615 trait TraitAddTraitBoundToAssociatedType {
622 // Apparently the type bound contributes to the predicates of the trait, but
623 // does not change the associated item itself.
625 #[rustc_clean(label="Hir", cfg="cfail2")]
626 #[rustc_clean(label="Hir", cfg="cfail3")]
627 #[rustc_metadata_dirty(cfg="cfail2")]
628 #[rustc_metadata_clean(cfg="cfail3")]
629 trait TraitAddTraitBoundToAssociatedType {
630 #[rustc_dirty(label="Hir", cfg="cfail2")]
631 #[rustc_clean(label="Hir", cfg="cfail3")]
632 #[rustc_metadata_clean(cfg="cfail2")]
633 #[rustc_metadata_clean(cfg="cfail3")]
634 type Associated: ReferencedTrait0;
641 // Add lifetime bound to associated type ------------------------------------------
643 trait TraitAddLifetimeBoundToAssociatedType<'a> {
650 #[rustc_clean(label="Hir", cfg="cfail2")]
651 #[rustc_clean(label="Hir", cfg="cfail3")]
652 #[rustc_metadata_dirty(cfg="cfail2")]
653 #[rustc_metadata_clean(cfg="cfail3")]
654 trait TraitAddLifetimeBoundToAssociatedType<'a> {
655 #[rustc_dirty(label="Hir", cfg="cfail2")]
656 #[rustc_clean(label="Hir", cfg="cfail3")]
657 #[rustc_metadata_clean(cfg="cfail2")]
658 #[rustc_metadata_clean(cfg="cfail3")]
666 // Add default to associated type -------------------------------------------------
668 trait TraitAddDefaultToAssociatedType {
675 #[rustc_dirty(label="Hir", cfg="cfail2")]
676 #[rustc_clean(label="Hir", cfg="cfail3")]
677 #[rustc_metadata_clean(cfg="cfail2")]
678 #[rustc_metadata_clean(cfg="cfail3")]
679 trait TraitAddDefaultToAssociatedType {
680 #[rustc_dirty(label="Hir", cfg="cfail2")]
681 #[rustc_clean(label="Hir", cfg="cfail3")]
682 #[rustc_metadata_dirty(cfg="cfail2")]
683 #[rustc_metadata_clean(cfg="cfail3")]
684 type Associated = ReferenceType0;
691 // Add associated constant --------------------------------------------------------
693 trait TraitAddAssociatedConstant {
698 #[rustc_dirty(label="Hir", cfg="cfail2")]
699 #[rustc_clean(label="Hir", cfg="cfail3")]
700 #[rustc_metadata_dirty(cfg="cfail2")]
701 #[rustc_metadata_clean(cfg="cfail3")]
702 trait TraitAddAssociatedConstant {
710 // Add initializer to associated constant -----------------------------------------
712 trait TraitAddInitializerToAssociatedConstant {
719 #[rustc_dirty(label="Hir", cfg="cfail2")]
720 #[rustc_clean(label="Hir", cfg="cfail3")]
721 #[rustc_metadata_clean(cfg="cfail2")]
722 #[rustc_metadata_clean(cfg="cfail3")]
723 trait TraitAddInitializerToAssociatedConstant {
724 #[rustc_dirty(label="Hir", cfg="cfail2")]
725 #[rustc_clean(label="Hir", cfg="cfail3")]
726 #[rustc_metadata_dirty(cfg="cfail2")]
727 #[rustc_metadata_clean(cfg="cfail3")]
728 const Value: u32 = 1;
730 #[rustc_clean(label="Hir", cfg="cfail2")]
731 #[rustc_clean(label="Hir", cfg="cfail3")]
732 #[rustc_metadata_clean(cfg="cfail2")]
733 #[rustc_metadata_clean(cfg="cfail3")]
739 // Change type of associated constant ---------------------------------------------
741 trait TraitChangeTypeOfAssociatedConstant {
748 #[rustc_clean(label="Hir", cfg="cfail2")]
749 #[rustc_clean(label="Hir", cfg="cfail3")]
750 #[rustc_metadata_clean(cfg="cfail2")]
751 #[rustc_metadata_clean(cfg="cfail3")]
752 trait TraitChangeTypeOfAssociatedConstant {
753 #[rustc_dirty(label="Hir", cfg="cfail2")]
754 #[rustc_clean(label="Hir", cfg="cfail3")]
755 #[rustc_metadata_dirty(cfg="cfail2")]
756 #[rustc_metadata_clean(cfg="cfail3")]
759 #[rustc_clean(label="Hir", cfg="cfail2")]
760 #[rustc_clean(label="Hir", cfg="cfail3")]
761 #[rustc_metadata_clean(cfg="cfail2")]
762 #[rustc_metadata_clean(cfg="cfail3")]
768 // Add super trait ----------------------------------------------------------------
770 trait TraitAddSuperTrait { }
773 #[rustc_dirty(label="Hir", cfg="cfail2")]
774 #[rustc_clean(label="Hir", cfg="cfail3")]
775 #[rustc_metadata_dirty(cfg="cfail2")]
776 #[rustc_metadata_clean(cfg="cfail3")]
777 trait TraitAddSuperTrait : ReferencedTrait0 { }
781 // Add builtin bound (Send or Copy) -----------------------------------------------
783 trait TraitAddBuiltiBound { }
786 #[rustc_dirty(label="Hir", cfg="cfail2")]
787 #[rustc_clean(label="Hir", cfg="cfail3")]
788 #[rustc_metadata_dirty(cfg="cfail2")]
789 #[rustc_metadata_clean(cfg="cfail3")]
790 trait TraitAddBuiltiBound : Send { }
794 // Add 'static lifetime bound to trait --------------------------------------------
796 trait TraitAddStaticLifetimeBound { }
799 #[rustc_dirty(label="Hir", cfg="cfail2")]
800 #[rustc_clean(label="Hir", cfg="cfail3")]
801 #[rustc_metadata_dirty(cfg="cfail2")]
802 #[rustc_metadata_clean(cfg="cfail3")]
803 trait TraitAddStaticLifetimeBound : 'static { }
807 // Add super trait as second bound ------------------------------------------------
809 trait TraitAddTraitAsSecondBound : ReferencedTrait0 { }
812 #[rustc_dirty(label="Hir", cfg="cfail2")]
813 #[rustc_clean(label="Hir", cfg="cfail3")]
814 #[rustc_metadata_dirty(cfg="cfail2")]
815 #[rustc_metadata_clean(cfg="cfail3")]
816 trait TraitAddTraitAsSecondBound : ReferencedTrait0 + ReferencedTrait1 { }
819 trait TraitAddTraitAsSecondBoundFromBuiltin : Send { }
822 #[rustc_dirty(label="Hir", cfg="cfail2")]
823 #[rustc_clean(label="Hir", cfg="cfail3")]
824 #[rustc_metadata_dirty(cfg="cfail2")]
825 #[rustc_metadata_clean(cfg="cfail3")]
826 trait TraitAddTraitAsSecondBoundFromBuiltin : Send + ReferencedTrait0 { }
830 // Add builtin bound as second bound ----------------------------------------------
832 trait TraitAddBuiltinBoundAsSecondBound : ReferencedTrait0 { }
835 #[rustc_dirty(label="Hir", cfg="cfail2")]
836 #[rustc_clean(label="Hir", cfg="cfail3")]
837 #[rustc_metadata_dirty(cfg="cfail2")]
838 #[rustc_metadata_clean(cfg="cfail3")]
839 trait TraitAddBuiltinBoundAsSecondBound : ReferencedTrait0 + Send { }
842 trait TraitAddBuiltinBoundAsSecondBoundFromBuiltin : Send { }
845 #[rustc_dirty(label="Hir", cfg="cfail2")]
846 #[rustc_clean(label="Hir", cfg="cfail3")]
847 #[rustc_metadata_dirty(cfg="cfail2")]
848 #[rustc_metadata_clean(cfg="cfail3")]
849 trait TraitAddBuiltinBoundAsSecondBoundFromBuiltin: Send + Copy { }
853 // Add 'static bounds as second bound ---------------------------------------------
855 trait TraitAddStaticBoundAsSecondBound : ReferencedTrait0 { }
858 #[rustc_dirty(label="Hir", cfg="cfail2")]
859 #[rustc_clean(label="Hir", cfg="cfail3")]
860 #[rustc_metadata_dirty(cfg="cfail2")]
861 #[rustc_metadata_clean(cfg="cfail3")]
862 trait TraitAddStaticBoundAsSecondBound : ReferencedTrait0 + 'static { }
865 trait TraitAddStaticBoundAsSecondBoundFromBuiltin : Send { }
868 #[rustc_dirty(label="Hir", cfg="cfail2")]
869 #[rustc_clean(label="Hir", cfg="cfail3")]
870 #[rustc_metadata_dirty(cfg="cfail2")]
871 #[rustc_metadata_clean(cfg="cfail3")]
872 trait TraitAddStaticBoundAsSecondBoundFromBuiltin : Send + 'static { }
876 // Add type parameter to trait ----------------------------------------------------
878 trait TraitAddTypeParameterToTrait { }
881 #[rustc_dirty(label="Hir", cfg="cfail2")]
882 #[rustc_clean(label="Hir", cfg="cfail3")]
883 #[rustc_metadata_dirty(cfg="cfail2")]
884 #[rustc_metadata_clean(cfg="cfail3")]
885 trait TraitAddTypeParameterToTrait<T> { }
889 // Add lifetime parameter to trait ------------------------------------------------
891 trait TraitAddLifetimeParameterToTrait { }
894 #[rustc_dirty(label="Hir", cfg="cfail2")]
895 #[rustc_clean(label="Hir", cfg="cfail3")]
896 #[rustc_metadata_dirty(cfg="cfail2")]
897 #[rustc_metadata_clean(cfg="cfail3")]
898 trait TraitAddLifetimeParameterToTrait<'a> { }
902 // Add trait bound to type parameter of trait -------------------------------------
904 trait TraitAddTraitBoundToTypeParameterOfTrait<T> { }
907 #[rustc_dirty(label="Hir", cfg="cfail2")]
908 #[rustc_clean(label="Hir", cfg="cfail3")]
909 #[rustc_metadata_dirty(cfg="cfail2")]
910 #[rustc_metadata_clean(cfg="cfail3")]
911 trait TraitAddTraitBoundToTypeParameterOfTrait<T: ReferencedTrait0> { }
915 // Add lifetime bound to type parameter of trait ----------------------------------
917 trait TraitAddLifetimeBoundToTypeParameterOfTrait<'a, T> { }
920 #[rustc_dirty(label="Hir", cfg="cfail2")]
921 #[rustc_clean(label="Hir", cfg="cfail3")]
922 #[rustc_metadata_dirty(cfg="cfail2")]
923 #[rustc_metadata_clean(cfg="cfail3")]
924 trait TraitAddLifetimeBoundToTypeParameterOfTrait<'a, T: 'a> { }
928 // Add lifetime bound to lifetime parameter of trait ------------------------------
930 trait TraitAddLifetimeBoundToLifetimeParameterOfTrait<'a, 'b> { }
933 #[rustc_dirty(label="Hir", cfg="cfail2")]
934 #[rustc_clean(label="Hir", cfg="cfail3")]
935 #[rustc_metadata_dirty(cfg="cfail2")]
936 #[rustc_metadata_clean(cfg="cfail3")]
937 trait TraitAddLifetimeBoundToLifetimeParameterOfTrait<'a: 'b, 'b> { }
941 // Add builtin bound to type parameter of trait -----------------------------------
943 trait TraitAddBuiltinBoundToTypeParameterOfTrait<T> { }
946 #[rustc_dirty(label="Hir", cfg="cfail2")]
947 #[rustc_clean(label="Hir", cfg="cfail3")]
948 #[rustc_metadata_dirty(cfg="cfail2")]
949 #[rustc_metadata_clean(cfg="cfail3")]
950 trait TraitAddBuiltinBoundToTypeParameterOfTrait<T: Send> { }
954 // Add second type parameter to trait ---------------------------------------------
956 trait TraitAddSecondTypeParameterToTrait<T> { }
959 #[rustc_dirty(label="Hir", cfg="cfail2")]
960 #[rustc_clean(label="Hir", cfg="cfail3")]
961 #[rustc_metadata_dirty(cfg="cfail2")]
962 #[rustc_metadata_clean(cfg="cfail3")]
963 trait TraitAddSecondTypeParameterToTrait<T, S> { }
967 // Add second lifetime parameter to trait -----------------------------------------
969 trait TraitAddSecondLifetimeParameterToTrait<'a> { }
972 #[rustc_dirty(label="Hir", cfg="cfail2")]
973 #[rustc_clean(label="Hir", cfg="cfail3")]
974 #[rustc_metadata_dirty(cfg="cfail2")]
975 #[rustc_metadata_clean(cfg="cfail3")]
976 trait TraitAddSecondLifetimeParameterToTrait<'a, 'b> { }
980 // Add second trait bound to type parameter of trait ------------------------------
982 trait TraitAddSecondTraitBoundToTypeParameterOfTrait<T: ReferencedTrait0> { }
985 #[rustc_dirty(label="Hir", cfg="cfail2")]
986 #[rustc_clean(label="Hir", cfg="cfail3")]
987 #[rustc_metadata_dirty(cfg="cfail2")]
988 #[rustc_metadata_clean(cfg="cfail3")]
989 trait TraitAddSecondTraitBoundToTypeParameterOfTrait<T: ReferencedTrait0 + ReferencedTrait1> { }
993 // Add second lifetime bound to type parameter of trait ---------------------------
995 trait TraitAddSecondLifetimeBoundToTypeParameterOfTrait<'a, 'b, T: 'a> { }
998 #[rustc_dirty(label="Hir", cfg="cfail2")]
999 #[rustc_clean(label="Hir", cfg="cfail3")]
1000 #[rustc_metadata_dirty(cfg="cfail2")]
1001 #[rustc_metadata_clean(cfg="cfail3")]
1002 trait TraitAddSecondLifetimeBoundToTypeParameterOfTrait<'a, 'b, T: 'a + 'b> { }
1006 // Add second lifetime bound to lifetime parameter of trait------------------------
1008 trait TraitAddSecondLifetimeBoundToLifetimeParameterOfTrait<'a: 'b, 'b, 'c> { }
1011 #[rustc_dirty(label="Hir", cfg="cfail2")]
1012 #[rustc_clean(label="Hir", cfg="cfail3")]
1013 #[rustc_metadata_dirty(cfg="cfail2")]
1014 #[rustc_metadata_clean(cfg="cfail3")]
1015 trait TraitAddSecondLifetimeBoundToLifetimeParameterOfTrait<'a: 'b + 'c, 'b, 'c> { }
1019 // Add second builtin bound to type parameter of trait ----------------------------
1021 trait TraitAddSecondBuiltinBoundToTypeParameterOfTrait<T: Send> { }
1024 #[rustc_dirty(label="Hir", cfg="cfail2")]
1025 #[rustc_clean(label="Hir", cfg="cfail3")]
1026 #[rustc_metadata_dirty(cfg="cfail2")]
1027 #[rustc_metadata_clean(cfg="cfail3")]
1028 trait TraitAddSecondBuiltinBoundToTypeParameterOfTrait<T: Send + Sync> { }
1032 // --------------------------------------------------------------------------------
1033 struct ReferenceType0 {}
1034 struct ReferenceType1 {}
1038 // Add trait bound to type parameter of trait in where clause----------------------
1040 trait TraitAddTraitBoundToTypeParameterOfTraitWhere<T> { }
1043 #[rustc_dirty(label="Hir", cfg="cfail2")]
1044 #[rustc_clean(label="Hir", cfg="cfail3")]
1045 #[rustc_metadata_dirty(cfg="cfail2")]
1046 #[rustc_metadata_clean(cfg="cfail3")]
1047 trait TraitAddTraitBoundToTypeParameterOfTraitWhere<T> where T: ReferencedTrait0 { }
1051 // Add lifetime bound to type parameter of trait in where clause-------------------
1053 trait TraitAddLifetimeBoundToTypeParameterOfTraitWhere<'a, T> { }
1056 #[rustc_dirty(label="Hir", cfg="cfail2")]
1057 #[rustc_clean(label="Hir", cfg="cfail3")]
1058 #[rustc_metadata_dirty(cfg="cfail2")]
1059 #[rustc_metadata_clean(cfg="cfail3")]
1060 trait TraitAddLifetimeBoundToTypeParameterOfTraitWhere<'a, T> where T: 'a { }
1064 // Add lifetime bound to lifetime parameter of trait in where clause---------------
1066 trait TraitAddLifetimeBoundToLifetimeParameterOfTraitWhere<'a, 'b> { }
1069 #[rustc_dirty(label="Hir", cfg="cfail2")]
1070 #[rustc_clean(label="Hir", cfg="cfail3")]
1071 #[rustc_metadata_dirty(cfg="cfail2")]
1072 #[rustc_metadata_clean(cfg="cfail3")]
1073 trait TraitAddLifetimeBoundToLifetimeParameterOfTraitWhere<'a, 'b> where 'a: 'b { }
1077 // Add builtin bound to type parameter of trait in where clause--------------------
1079 trait TraitAddBuiltinBoundToTypeParameterOfTraitWhere<T> { }
1082 #[rustc_dirty(label="Hir", cfg="cfail2")]
1083 #[rustc_clean(label="Hir", cfg="cfail3")]
1084 #[rustc_metadata_dirty(cfg="cfail2")]
1085 #[rustc_metadata_clean(cfg="cfail3")]
1086 trait TraitAddBuiltinBoundToTypeParameterOfTraitWhere<T> where T: Send { }
1090 // Add second trait bound to type parameter of trait in where clause---------------
1092 trait TraitAddSecondTraitBoundToTypeParameterOfTraitWhere<T> where T: ReferencedTrait0 { }
1095 #[rustc_dirty(label="Hir", cfg="cfail2")]
1096 #[rustc_clean(label="Hir", cfg="cfail3")]
1097 #[rustc_metadata_dirty(cfg="cfail2")]
1098 #[rustc_metadata_clean(cfg="cfail3")]
1099 trait TraitAddSecondTraitBoundToTypeParameterOfTraitWhere<T>
1100 where T: ReferencedTrait0 + ReferencedTrait1 { }
1104 // Add second lifetime bound to type parameter of trait in where clause------------
1106 trait TraitAddSecondLifetimeBoundToTypeParameterOfTraitWhere<'a, 'b, T> where T: 'a { }
1109 #[rustc_dirty(label="Hir", cfg="cfail2")]
1110 #[rustc_clean(label="Hir", cfg="cfail3")]
1111 #[rustc_metadata_dirty(cfg="cfail2")]
1112 #[rustc_metadata_clean(cfg="cfail3")]
1113 trait TraitAddSecondLifetimeBoundToTypeParameterOfTraitWhere<'a, 'b, T> where T: 'a + 'b { }
1117 // Add second lifetime bound to lifetime parameter of trait in where clause--------
1119 trait TraitAddSecondLifetimeBoundToLifetimeParameterOfTraitWhere<'a, 'b, 'c> where 'a: 'b { }
1122 #[rustc_dirty(label="Hir", cfg="cfail2")]
1123 #[rustc_clean(label="Hir", cfg="cfail3")]
1124 #[rustc_metadata_dirty(cfg="cfail2")]
1125 #[rustc_metadata_clean(cfg="cfail3")]
1126 trait TraitAddSecondLifetimeBoundToLifetimeParameterOfTraitWhere<'a, 'b, 'c> where 'a: 'b + 'c { }
1130 // Add second builtin bound to type parameter of trait in where clause-------------
1132 trait TraitAddSecondBuiltinBoundToTypeParameterOfTraitWhere<T> where T: Send { }
1135 #[rustc_dirty(label="Hir", cfg="cfail2")]
1136 #[rustc_clean(label="Hir", cfg="cfail3")]
1137 #[rustc_metadata_dirty(cfg="cfail2")]
1138 #[rustc_metadata_clean(cfg="cfail3")]
1139 trait TraitAddSecondBuiltinBoundToTypeParameterOfTraitWhere<T> where T: Send + Sync { }
1142 // Change return type of method indirectly by modifying a use statement------------
1143 mod change_return_type_of_method_indirectly_use {
1145 use super::ReferenceType0 as ReturnType;
1147 use super::ReferenceType1 as ReturnType;
1149 #[rustc_clean(label="Hir", cfg="cfail2")]
1150 #[rustc_clean(label="Hir", cfg="cfail3")]
1151 #[rustc_metadata_clean(cfg="cfail2")]
1152 #[rustc_metadata_clean(cfg="cfail3")]
1153 trait TraitChangeReturnType {
1154 #[rustc_dirty(label="Hir", cfg="cfail2")]
1155 #[rustc_clean(label="Hir", cfg="cfail3")]
1156 #[rustc_metadata_dirty(cfg="cfail2")]
1157 #[rustc_metadata_clean(cfg="cfail3")]
1158 fn method() -> ReturnType;
1164 // Change type of method parameter indirectly by modifying a use statement---------
1165 mod change_method_parameter_type_indirectly_by_use {
1167 use super::ReferenceType0 as ArgType;
1169 use super::ReferenceType1 as ArgType;
1171 #[rustc_clean(label="Hir", cfg="cfail2")]
1172 #[rustc_clean(label="Hir", cfg="cfail3")]
1173 #[rustc_metadata_clean(cfg="cfail2")]
1174 #[rustc_metadata_clean(cfg="cfail3")]
1175 trait TraitChangeArgType {
1176 #[rustc_dirty(label="Hir", cfg="cfail2")]
1177 #[rustc_clean(label="Hir", cfg="cfail3")]
1178 #[rustc_metadata_dirty(cfg="cfail2")]
1179 #[rustc_metadata_clean(cfg="cfail3")]
1180 fn method(a: ArgType);
1186 // Change trait bound of method type parameter indirectly by modifying a use statement
1187 mod change_method_parameter_type_bound_indirectly_by_use {
1189 use super::ReferencedTrait0 as Bound;
1191 use super::ReferencedTrait1 as Bound;
1193 #[rustc_clean(label="Hir", cfg="cfail2")]
1194 #[rustc_clean(label="Hir", cfg="cfail3")]
1195 #[rustc_metadata_clean(cfg="cfail2")]
1196 #[rustc_metadata_clean(cfg="cfail3")]
1197 trait TraitChangeBoundOfMethodTypeParameter {
1198 #[rustc_dirty(label="Hir", cfg="cfail2")]
1199 #[rustc_clean(label="Hir", cfg="cfail3")]
1200 #[rustc_metadata_dirty(cfg="cfail2")]
1201 #[rustc_metadata_clean(cfg="cfail3")]
1202 fn method<T: Bound>(a: T);
1208 // Change trait bound of method type parameter in where clause indirectly
1209 // by modifying a use statement
1210 mod change_method_parameter_type_bound_indirectly_by_use_where {
1212 use super::ReferencedTrait0 as Bound;
1214 use super::ReferencedTrait1 as Bound;
1216 #[rustc_clean(label="Hir", cfg="cfail2")]
1217 #[rustc_clean(label="Hir", cfg="cfail3")]
1218 #[rustc_metadata_clean(cfg="cfail2")]
1219 #[rustc_metadata_clean(cfg="cfail3")]
1220 trait TraitChangeBoundOfMethodTypeParameterWhere {
1221 #[rustc_dirty(label="Hir", cfg="cfail2")]
1222 #[rustc_clean(label="Hir", cfg="cfail3")]
1223 #[rustc_metadata_dirty(cfg="cfail2")]
1224 #[rustc_metadata_clean(cfg="cfail3")]
1225 fn method<T>(a: T) where T: Bound;
1231 // Change trait bound of trait type parameter indirectly by modifying a use statement
1232 mod change_method_type_parameter_bound_indirectly {
1234 use super::ReferencedTrait0 as Bound;
1236 use super::ReferencedTrait1 as Bound;
1238 #[rustc_dirty(label="Hir", cfg="cfail2")]
1239 #[rustc_clean(label="Hir", cfg="cfail3")]
1240 #[rustc_metadata_dirty(cfg="cfail2")]
1241 #[rustc_metadata_clean(cfg="cfail3")]
1242 trait TraitChangeTraitBound<T: Bound> {
1249 // Change trait bound of trait type parameter in where clause indirectly
1250 // by modifying a use statement
1251 mod change_method_type_parameter_bound_indirectly_where {
1253 use super::ReferencedTrait0 as Bound;
1255 use super::ReferencedTrait1 as Bound;
1257 #[rustc_dirty(label="Hir", cfg="cfail2")]
1258 #[rustc_clean(label="Hir", cfg="cfail3")]
1259 #[rustc_metadata_dirty(cfg="cfail2")]
1260 #[rustc_metadata_clean(cfg="cfail3")]
1261 trait TraitChangeTraitBoundWhere<T> where T: Bound {