|  | // This test case tests the incremental compilation hash (ICH) implementation | 
|  | // for trait definitions. | 
|  |  | 
|  | // The general pattern followed here is: Change one thing between rev1 and rev2 | 
|  | // and make sure that the hash has changed, then change nothing between rev2 and | 
|  | // rev3 and make sure that the hash has not changed. | 
|  |  | 
|  | // We also test the ICH for trait definitions exported in metadata. Same as | 
|  | // above, we want to make sure that the change between rev1 and rev2 also | 
|  | // results in a change of the ICH for the trait's metadata, and that it stays | 
|  | // the same between rev2 and rev3. | 
|  |  | 
|  | //@ build-pass (FIXME(62277): could be check-pass?) | 
|  | //@ revisions: cfail1 cfail2 cfail3 cfail4 cfail5 cfail6 | 
|  | //@ compile-flags: -Z query-dep-graph -O | 
|  | //@ [cfail1]compile-flags: -Zincremental-ignore-spans | 
|  | //@ [cfail2]compile-flags: -Zincremental-ignore-spans | 
|  | //@ [cfail3]compile-flags: -Zincremental-ignore-spans | 
|  |  | 
|  | #![allow(warnings)] | 
|  | #![feature(rustc_attrs)] | 
|  | #![crate_type="rlib"] | 
|  | #![feature(associated_type_defaults)] | 
|  |  | 
|  |  | 
|  | // Change trait visibility | 
|  | #[cfg(any(cfail1,cfail4))] | 
|  | trait TraitVisibility { } | 
|  |  | 
|  | #[cfg(not(any(cfail1,cfail4)))] | 
|  | #[rustc_clean(cfg="cfail2")] | 
|  | #[rustc_clean(cfg="cfail3")] | 
|  | #[rustc_clean(cfg="cfail5", except="opt_hir_owner_nodes,predicates_of")] | 
|  | #[rustc_clean(cfg="cfail6")] | 
|  | pub trait TraitVisibility { } | 
|  |  | 
|  |  | 
|  |  | 
|  | // Change trait unsafety | 
|  | #[cfg(any(cfail1,cfail4))] | 
|  | trait TraitUnsafety { } | 
|  |  | 
|  | #[cfg(not(any(cfail1,cfail4)))] | 
|  | #[rustc_clean(except="opt_hir_owner_nodes", cfg="cfail2")] | 
|  | #[rustc_clean(cfg="cfail3")] | 
|  | #[rustc_clean(except="opt_hir_owner_nodes,predicates_of", cfg="cfail5")] | 
|  | #[rustc_clean(cfg="cfail6")] | 
|  | unsafe trait TraitUnsafety { } | 
|  |  | 
|  |  | 
|  |  | 
|  | // Add method | 
|  | #[cfg(any(cfail1,cfail4))] | 
|  | trait TraitAddMethod { | 
|  | } | 
|  |  | 
|  | #[cfg(not(any(cfail1,cfail4)))] | 
|  | #[rustc_clean(except="opt_hir_owner_nodes,associated_item_def_ids", cfg="cfail2")] | 
|  | #[rustc_clean(cfg="cfail3")] | 
|  | #[rustc_clean(except="opt_hir_owner_nodes,associated_item_def_ids,predicates_of", cfg="cfail5")] | 
|  | #[rustc_clean(cfg="cfail6")] | 
|  | pub trait TraitAddMethod { | 
|  | fn method(); | 
|  | } | 
|  |  | 
|  |  | 
|  |  | 
|  | // Change name of method | 
|  | #[cfg(any(cfail1,cfail4))] | 
|  | trait TraitChangeMethodName { | 
|  | fn method(); | 
|  | } | 
|  |  | 
|  | #[cfg(not(any(cfail1,cfail4)))] | 
|  | #[rustc_clean(except="opt_hir_owner_nodes,associated_item_def_ids", cfg="cfail2")] | 
|  | #[rustc_clean(cfg="cfail3")] | 
|  | #[rustc_clean(except="opt_hir_owner_nodes,associated_item_def_ids,predicates_of", cfg="cfail5")] | 
|  | #[rustc_clean(cfg="cfail6")] | 
|  | trait TraitChangeMethodName { | 
|  | fn methodChanged(); | 
|  | } | 
|  |  | 
|  |  | 
|  |  | 
|  | // Add return type to method | 
|  | #[cfg(any(cfail1,cfail4))] | 
|  | trait TraitAddReturnType { | 
|  | //--------------------------------------------------------------- | 
|  | //-------------------------- | 
|  | //--------------------------------------------------------------- | 
|  | //-------------------------- | 
|  | fn method()       ; | 
|  | } | 
|  |  | 
|  | #[cfg(not(any(cfail1,cfail4)))] | 
|  | #[rustc_clean(cfg="cfail2")] | 
|  | #[rustc_clean(cfg="cfail3")] | 
|  | #[rustc_clean(cfg="cfail5")] | 
|  | #[rustc_clean(cfg="cfail6")] | 
|  | trait TraitAddReturnType { | 
|  | #[rustc_clean(except="opt_hir_owner_nodes,fn_sig", cfg="cfail2")] | 
|  | #[rustc_clean(cfg="cfail3")] | 
|  | #[rustc_clean(except="opt_hir_owner_nodes,fn_sig", cfg="cfail5")] | 
|  | #[rustc_clean(cfg="cfail6")] | 
|  | fn method() -> u32; | 
|  | } | 
|  |  | 
|  |  | 
|  |  | 
|  | // Change return type of method | 
|  | #[cfg(any(cfail1,cfail4))] | 
|  | trait TraitChangeReturnType { | 
|  | // -------------------------------------------------------------- | 
|  | // ------------------------- | 
|  | // -------------------------------------------------------------- | 
|  | // ------------------------- | 
|  | fn method() -> u32; | 
|  | } | 
|  |  | 
|  | #[cfg(not(any(cfail1,cfail4)))] | 
|  | #[rustc_clean(cfg="cfail2")] | 
|  | #[rustc_clean(cfg="cfail3")] | 
|  | #[rustc_clean(cfg="cfail5")] | 
|  | #[rustc_clean(cfg="cfail6")] | 
|  | trait TraitChangeReturnType { | 
|  | #[rustc_clean(except="opt_hir_owner_nodes,fn_sig", cfg="cfail2")] | 
|  | #[rustc_clean(cfg="cfail3")] | 
|  | #[rustc_clean(except="opt_hir_owner_nodes,fn_sig", cfg="cfail5")] | 
|  | #[rustc_clean(cfg="cfail6")] | 
|  | fn method() -> u64; | 
|  | } | 
|  |  | 
|  |  | 
|  |  | 
|  | // Add parameter to method | 
|  | #[cfg(any(cfail1,cfail4))] | 
|  | trait TraitAddParameterToMethod { | 
|  | // -------------------------------------------------------------- | 
|  | // ------------------------- | 
|  | // -------------------------------------------------------------- | 
|  | // ------------------------- | 
|  | fn method(      ); | 
|  | } | 
|  |  | 
|  | #[cfg(not(any(cfail1,cfail4)))] | 
|  | #[rustc_clean(cfg="cfail2")] | 
|  | #[rustc_clean(cfg="cfail3")] | 
|  | #[rustc_clean(cfg="cfail5")] | 
|  | #[rustc_clean(cfg="cfail6")] | 
|  | trait TraitAddParameterToMethod { | 
|  | #[rustc_clean(except="opt_hir_owner_nodes,fn_sig", cfg="cfail2")] | 
|  | #[rustc_clean(cfg="cfail3")] | 
|  | #[rustc_clean(except="opt_hir_owner_nodes,fn_sig", cfg="cfail5")] | 
|  | #[rustc_clean(cfg="cfail6")] | 
|  | fn method(a: u32); | 
|  | } | 
|  |  | 
|  |  | 
|  |  | 
|  | // Change name of method parameter | 
|  | #[cfg(any(cfail1,cfail4))] | 
|  | trait TraitChangeMethodParameterName { | 
|  | //------------------------------------------------------ | 
|  | //-------------------------------------------------------- | 
|  | //-------------------------- | 
|  | //-------------------------------------------------------- | 
|  | //-------------------------- | 
|  | fn method(a: u32); | 
|  |  | 
|  | //---------------------------------------------------------------------- | 
|  | //-------------------------- | 
|  | //---------------------------------------------------------------------- | 
|  | //-------------------------- | 
|  | fn with_default(x: i32) {} | 
|  | } | 
|  |  | 
|  | #[cfg(not(any(cfail1,cfail4)))] | 
|  | #[rustc_clean(cfg="cfail2")] | 
|  | #[rustc_clean(cfg="cfail3")] | 
|  | #[rustc_clean(cfg="cfail5")] | 
|  | #[rustc_clean(cfg="cfail6")] | 
|  | trait TraitChangeMethodParameterName { | 
|  | // FIXME(#38501) This should preferably always be clean. | 
|  | #[rustc_clean(except="opt_hir_owner_nodes", cfg="cfail2")] | 
|  | #[rustc_clean(cfg="cfail3")] | 
|  | #[rustc_clean(except="opt_hir_owner_nodes", cfg="cfail5")] | 
|  | #[rustc_clean(cfg="cfail6")] | 
|  | fn method(b: u32); | 
|  |  | 
|  | #[rustc_clean(except="opt_hir_owner_nodes,optimized_mir", cfg="cfail2")] | 
|  | #[rustc_clean(cfg="cfail3")] | 
|  | #[rustc_clean(except="opt_hir_owner_nodes,optimized_mir", cfg="cfail5")] | 
|  | #[rustc_clean(cfg="cfail6")] | 
|  | fn with_default(y: i32) {} | 
|  | } | 
|  |  | 
|  |  | 
|  |  | 
|  | // Change type of method parameter (i32 => i64) | 
|  | #[cfg(any(cfail1,cfail4))] | 
|  | trait TraitChangeMethodParameterType { | 
|  | // -------------------------------------------------------------- | 
|  | // ------------------------- | 
|  | // -------------------------------------------------------------- | 
|  | // ------------------------- | 
|  | fn method(a: i32); | 
|  | } | 
|  |  | 
|  | #[cfg(not(any(cfail1,cfail4)))] | 
|  | #[rustc_clean(cfg="cfail2")] | 
|  | #[rustc_clean(cfg="cfail3")] | 
|  | #[rustc_clean(cfg="cfail5")] | 
|  | #[rustc_clean(cfg="cfail6")] | 
|  | trait TraitChangeMethodParameterType { | 
|  | #[rustc_clean(except="opt_hir_owner_nodes,fn_sig", cfg="cfail2")] | 
|  | #[rustc_clean(cfg="cfail3")] | 
|  | #[rustc_clean(except="opt_hir_owner_nodes,fn_sig", cfg="cfail5")] | 
|  | #[rustc_clean(cfg="cfail6")] | 
|  | fn method(a: i64); | 
|  | } | 
|  |  | 
|  |  | 
|  |  | 
|  | // Change type of method parameter (&i32 => &mut i32) | 
|  | #[cfg(any(cfail1,cfail4))] | 
|  | trait TraitChangeMethodParameterTypeRef { | 
|  | // -------------------------------------------------------------- | 
|  | // ------------------------- | 
|  | // -------------------------------------------------------------- | 
|  | // ------------------------- | 
|  | fn method(a: &    i32); | 
|  | } | 
|  |  | 
|  | #[cfg(not(any(cfail1,cfail4)))] | 
|  | #[rustc_clean(cfg="cfail2")] | 
|  | #[rustc_clean(cfg="cfail3")] | 
|  | #[rustc_clean(cfg="cfail5")] | 
|  | #[rustc_clean(cfg="cfail6")] | 
|  | trait TraitChangeMethodParameterTypeRef { | 
|  | #[rustc_clean(except="opt_hir_owner_nodes,fn_sig", cfg="cfail2")] | 
|  | #[rustc_clean(cfg="cfail3")] | 
|  | #[rustc_clean(except="opt_hir_owner_nodes,fn_sig", cfg="cfail5")] | 
|  | #[rustc_clean(cfg="cfail6")] | 
|  | fn method(a: &mut i32); | 
|  | } | 
|  |  | 
|  |  | 
|  |  | 
|  | // Change order of method parameters | 
|  | #[cfg(any(cfail1,cfail4))] | 
|  | trait TraitChangeMethodParametersOrder { | 
|  | // -------------------------------------------------------------- | 
|  | // ------------------------- | 
|  | // -------------------------------------------------------------- | 
|  | // ------------------------- | 
|  | fn method(a: i32, b: i64); | 
|  | } | 
|  |  | 
|  | #[cfg(not(any(cfail1,cfail4)))] | 
|  | #[rustc_clean(cfg="cfail2")] | 
|  | #[rustc_clean(cfg="cfail3")] | 
|  | #[rustc_clean(cfg="cfail5")] | 
|  | #[rustc_clean(cfg="cfail6")] | 
|  | trait TraitChangeMethodParametersOrder { | 
|  | #[rustc_clean(except="opt_hir_owner_nodes,fn_sig", cfg="cfail2")] | 
|  | #[rustc_clean(cfg="cfail3")] | 
|  | #[rustc_clean(except="opt_hir_owner_nodes,fn_sig", cfg="cfail5")] | 
|  | #[rustc_clean(cfg="cfail6")] | 
|  | fn method(b: i64, a: i32); | 
|  | } | 
|  |  | 
|  |  | 
|  |  | 
|  | // Add default implementation to method | 
|  | #[cfg(any(cfail1,cfail4))] | 
|  | trait TraitAddMethodAutoImplementation { | 
|  | // ------------------------------------------------------- | 
|  | // ------------------------- | 
|  | // ------------------------------------------------------- | 
|  | // ------------------------- | 
|  | fn method()  ; | 
|  | } | 
|  |  | 
|  | #[cfg(not(any(cfail1,cfail4)))] | 
|  | #[rustc_clean(cfg="cfail2")] | 
|  | #[rustc_clean(cfg="cfail3")] | 
|  | #[rustc_clean(cfg="cfail5")] | 
|  | #[rustc_clean(cfg="cfail6")] | 
|  | trait TraitAddMethodAutoImplementation { | 
|  | #[rustc_clean(except="opt_hir_owner_nodes", cfg="cfail2")] | 
|  | #[rustc_clean(cfg="cfail3")] | 
|  | #[rustc_clean(except="opt_hir_owner_nodes", cfg="cfail5")] | 
|  | #[rustc_clean(cfg="cfail6")] | 
|  | fn method() {} | 
|  | } | 
|  |  | 
|  |  | 
|  |  | 
|  | // Change order of methods | 
|  | #[cfg(any(cfail1,cfail4))] | 
|  | trait TraitChangeOrderOfMethods { | 
|  | fn method0(); | 
|  | fn method1(); | 
|  | } | 
|  |  | 
|  | #[cfg(not(any(cfail1,cfail4)))] | 
|  | #[rustc_clean(except="opt_hir_owner_nodes,associated_item_def_ids", cfg="cfail2")] | 
|  | #[rustc_clean(cfg="cfail3")] | 
|  | #[rustc_clean(except="opt_hir_owner_nodes,associated_item_def_ids", cfg="cfail5")] | 
|  | #[rustc_clean(cfg="cfail6")] | 
|  | trait TraitChangeOrderOfMethods { | 
|  | fn method1(); | 
|  | fn method0(); | 
|  | } | 
|  |  | 
|  |  | 
|  |  | 
|  | // Change mode of self parameter | 
|  | #[cfg(any(cfail1,cfail4))] | 
|  | trait TraitChangeModeSelfRefToMut { | 
|  | // -------------------------------------------------------------- | 
|  | // ------------------------- | 
|  | // -------------------------------------------------------------- | 
|  | // ------------------------- | 
|  | fn method(&    self); | 
|  | } | 
|  |  | 
|  | #[cfg(not(any(cfail1,cfail4)))] | 
|  | #[rustc_clean(cfg="cfail2")] | 
|  | #[rustc_clean(cfg="cfail3")] | 
|  | #[rustc_clean(cfg="cfail5")] | 
|  | #[rustc_clean(cfg="cfail6")] | 
|  | trait TraitChangeModeSelfRefToMut { | 
|  | #[rustc_clean(except="opt_hir_owner_nodes,fn_sig", cfg="cfail2")] | 
|  | #[rustc_clean(cfg="cfail3")] | 
|  | #[rustc_clean(except="opt_hir_owner_nodes,fn_sig", cfg="cfail5")] | 
|  | #[rustc_clean(cfg="cfail6")] | 
|  | fn method(&mut self); | 
|  | } | 
|  |  | 
|  |  | 
|  |  | 
|  | #[cfg(any(cfail1,cfail4))] | 
|  | trait TraitChangeModeSelfOwnToMut: Sized { | 
|  | // ---------------------------------------------------------------------------- | 
|  | // ------------------------- | 
|  | // ---------------------------------------------------------------------------- | 
|  | // ------------------------- | 
|  | fn method(    self) {} | 
|  | } | 
|  |  | 
|  | #[cfg(not(any(cfail1,cfail4)))] | 
|  | #[rustc_clean(cfg="cfail2")] | 
|  | #[rustc_clean(cfg="cfail3")] | 
|  | #[rustc_clean(cfg="cfail5")] | 
|  | #[rustc_clean(cfg="cfail6")] | 
|  | trait TraitChangeModeSelfOwnToMut: Sized { | 
|  | #[rustc_clean(except="opt_hir_owner_nodes,typeck,optimized_mir", cfg="cfail2")] | 
|  | #[rustc_clean(cfg="cfail3")] | 
|  | #[rustc_clean(except="opt_hir_owner_nodes,typeck,optimized_mir", cfg="cfail5")] | 
|  | #[rustc_clean(cfg="cfail6")] | 
|  | fn method(mut self) {} | 
|  | } | 
|  |  | 
|  |  | 
|  |  | 
|  | #[cfg(any(cfail1,cfail4))] | 
|  | trait TraitChangeModeSelfOwnToRef { | 
|  | // -------------------------------------------------------------------------- | 
|  | // ------------------------- | 
|  | // -------------------------------------------------------------------------- | 
|  | // ------------------------- | 
|  | fn method( self); | 
|  | } | 
|  |  | 
|  | #[cfg(not(any(cfail1,cfail4)))] | 
|  | #[rustc_clean(cfg="cfail2")] | 
|  | #[rustc_clean(cfg="cfail3")] | 
|  | #[rustc_clean(cfg="cfail5")] | 
|  | #[rustc_clean(cfg="cfail6")] | 
|  | trait TraitChangeModeSelfOwnToRef { | 
|  | #[rustc_clean(except="opt_hir_owner_nodes,fn_sig,generics_of", cfg="cfail2")] | 
|  | #[rustc_clean(cfg="cfail3")] | 
|  | #[rustc_clean(except="opt_hir_owner_nodes,fn_sig,generics_of", cfg="cfail5")] | 
|  | #[rustc_clean(cfg="cfail6")] | 
|  | fn method(&self); | 
|  | } | 
|  |  | 
|  |  | 
|  |  | 
|  | // Add unsafe modifier to method | 
|  | #[cfg(any(cfail1,cfail4))] | 
|  | trait TraitAddUnsafeModifier { | 
|  | // -------------------------------------------------------------- | 
|  | // ------------------------- | 
|  | // -------------------------------------------------------------- | 
|  | // ------------------------- | 
|  | fn        method(); | 
|  | } | 
|  |  | 
|  | #[cfg(not(any(cfail1,cfail4)))] | 
|  | #[rustc_clean(cfg="cfail2")] | 
|  | #[rustc_clean(cfg="cfail3")] | 
|  | #[rustc_clean(cfg="cfail5")] | 
|  | #[rustc_clean(cfg="cfail6")] | 
|  | trait TraitAddUnsafeModifier { | 
|  | #[rustc_clean(except="opt_hir_owner_nodes,fn_sig", cfg="cfail2")] | 
|  | #[rustc_clean(cfg="cfail3")] | 
|  | #[rustc_clean(except="opt_hir_owner_nodes,fn_sig", cfg="cfail5")] | 
|  | #[rustc_clean(cfg="cfail6")] | 
|  | unsafe fn method(); | 
|  | } | 
|  |  | 
|  |  | 
|  |  | 
|  | // Add extern modifier to method | 
|  | #[cfg(any(cfail1,cfail4))] | 
|  | trait TraitAddExternModifier { | 
|  | // -------------------------------------------------------------- | 
|  | // ------------------------- | 
|  | // -------------------------------------------------------------- | 
|  | // ------------------------- | 
|  | fn            method(); | 
|  | } | 
|  |  | 
|  | #[cfg(not(any(cfail1,cfail4)))] | 
|  | #[rustc_clean(cfg="cfail2")] | 
|  | #[rustc_clean(cfg="cfail3")] | 
|  | #[rustc_clean(cfg="cfail5")] | 
|  | #[rustc_clean(cfg="cfail6")] | 
|  | trait TraitAddExternModifier { | 
|  | #[rustc_clean(except="opt_hir_owner_nodes,fn_sig", cfg="cfail2")] | 
|  | #[rustc_clean(cfg="cfail3")] | 
|  | #[rustc_clean(except="opt_hir_owner_nodes,fn_sig", cfg="cfail5")] | 
|  | #[rustc_clean(cfg="cfail6")] | 
|  | extern "C" fn method(); | 
|  | } | 
|  |  | 
|  |  | 
|  |  | 
|  | // Change extern "C" to extern "stdcall" | 
|  | #[cfg(any(cfail1,cfail4))] | 
|  | trait TraitChangeExternCToExternSystem { | 
|  | // -------------------------------------------------------------- | 
|  | // ------------------------- | 
|  | // -------------------------------------------------------------- | 
|  | // ------------------------- | 
|  | extern "C"       fn method(); | 
|  | } | 
|  |  | 
|  | #[cfg(not(any(cfail1,cfail4)))] | 
|  | #[rustc_clean(cfg="cfail2")] | 
|  | #[rustc_clean(cfg="cfail3")] | 
|  | #[rustc_clean(cfg="cfail5")] | 
|  | #[rustc_clean(cfg="cfail6")] | 
|  | trait TraitChangeExternCToRustIntrinsic { | 
|  | #[rustc_clean(except="opt_hir_owner_nodes,fn_sig", cfg="cfail2")] | 
|  | #[rustc_clean(cfg="cfail3")] | 
|  | #[rustc_clean(except="opt_hir_owner_nodes,fn_sig", cfg="cfail5")] | 
|  | #[rustc_clean(cfg="cfail6")] | 
|  | extern "system" fn method(); | 
|  | } | 
|  |  | 
|  |  | 
|  |  | 
|  | // Add type parameter to method | 
|  | #[cfg(any(cfail1,cfail4))] | 
|  | trait TraitAddTypeParameterToMethod { | 
|  | // -------------------------------------------------------------------------- | 
|  | // --------------- | 
|  | // ------------------------- | 
|  | // -------------------------------------------------------------------------- | 
|  | // --------------- | 
|  | // ------------------------- | 
|  | fn method   (); | 
|  | } | 
|  |  | 
|  | #[cfg(not(any(cfail1,cfail4)))] | 
|  | #[rustc_clean(cfg="cfail2")] | 
|  | #[rustc_clean(cfg="cfail3")] | 
|  | #[rustc_clean(cfg="cfail5")] | 
|  | #[rustc_clean(cfg="cfail6")] | 
|  | trait TraitAddTypeParameterToMethod { | 
|  | #[rustc_clean(except="opt_hir_owner_nodes,generics_of,predicates_of,type_of", | 
|  | cfg="cfail2")] | 
|  | #[rustc_clean(cfg="cfail3")] | 
|  | #[rustc_clean(except="opt_hir_owner_nodes,generics_of,predicates_of,type_of", | 
|  | cfg="cfail5")] | 
|  | #[rustc_clean(cfg="cfail6")] | 
|  | fn method<T>(); | 
|  | } | 
|  |  | 
|  |  | 
|  |  | 
|  | // Add lifetime parameter to method | 
|  | #[cfg(any(cfail1,cfail4))] | 
|  | trait TraitAddLifetimeParameterToMethod { | 
|  | // -------------------------------------------------------------------------- | 
|  | // ------------------------- | 
|  | // -------------------------------------------------------------------------- | 
|  | // ------------------------- | 
|  | fn method    (); | 
|  | } | 
|  |  | 
|  | #[cfg(not(any(cfail1,cfail4)))] | 
|  | #[rustc_clean(cfg="cfail2")] | 
|  | #[rustc_clean(cfg="cfail3")] | 
|  | #[rustc_clean(cfg="cfail5")] | 
|  | #[rustc_clean(cfg="cfail6")] | 
|  | trait TraitAddLifetimeParameterToMethod { | 
|  | #[rustc_clean(except="opt_hir_owner_nodes,fn_sig,generics_of", cfg="cfail2")] | 
|  | #[rustc_clean(cfg="cfail3")] | 
|  | #[rustc_clean(except="opt_hir_owner_nodes,fn_sig,generics_of", cfg="cfail5")] | 
|  | #[rustc_clean(cfg="cfail6")] | 
|  | fn method<'a>(); | 
|  | } | 
|  |  | 
|  |  | 
|  |  | 
|  | // dummy trait for bound | 
|  | trait ReferencedTrait0 { } | 
|  | trait ReferencedTrait1 { } | 
|  |  | 
|  | // Add trait bound to method type parameter | 
|  | #[cfg(any(cfail1,cfail4))] | 
|  | trait TraitAddTraitBoundToMethodTypeParameter { | 
|  | // --------------------------------------------------------------------- | 
|  | // ------------------------- | 
|  | // --------------------------------------------------------------------- | 
|  | // ------------------------- | 
|  | fn method<T                  >(); | 
|  | } | 
|  |  | 
|  | #[cfg(not(any(cfail1,cfail4)))] | 
|  | #[rustc_clean(cfg="cfail2")] | 
|  | #[rustc_clean(cfg="cfail3")] | 
|  | #[rustc_clean(cfg="cfail5")] | 
|  | #[rustc_clean(cfg="cfail6")] | 
|  | trait TraitAddTraitBoundToMethodTypeParameter { | 
|  | #[rustc_clean(except="opt_hir_owner_nodes,predicates_of", cfg="cfail2")] | 
|  | #[rustc_clean(cfg="cfail3")] | 
|  | #[rustc_clean(except="opt_hir_owner_nodes,predicates_of", cfg="cfail5")] | 
|  | #[rustc_clean(cfg="cfail6")] | 
|  | fn method<T: ReferencedTrait0>(); | 
|  | } | 
|  |  | 
|  |  | 
|  |  | 
|  | // Add builtin bound to method type parameter | 
|  | #[cfg(any(cfail1,cfail4))] | 
|  | trait TraitAddBuiltinBoundToMethodTypeParameter { | 
|  | // --------------------------------------------------------------------- | 
|  | // ------------------------- | 
|  | // --------------------------------------------------------------------- | 
|  | // ------------------------- | 
|  | fn method<T       >(); | 
|  | } | 
|  |  | 
|  | #[cfg(not(any(cfail1,cfail4)))] | 
|  | #[rustc_clean(cfg="cfail2")] | 
|  | #[rustc_clean(cfg="cfail3")] | 
|  | #[rustc_clean(except="opt_hir_owner_nodes,predicates_of", cfg="cfail5")] | 
|  | #[rustc_clean(cfg="cfail6")] | 
|  | trait TraitAddBuiltinBoundToMethodTypeParameter { | 
|  | #[rustc_clean(except="opt_hir_owner_nodes", cfg="cfail2")] | 
|  | #[rustc_clean(cfg="cfail3")] | 
|  | #[rustc_clean(except="opt_hir_owner_nodes,predicates_of", cfg="cfail5")] | 
|  | #[rustc_clean(cfg="cfail6")] | 
|  | fn method<T: Sized>(); | 
|  | } | 
|  |  | 
|  |  | 
|  |  | 
|  | // Add lifetime bound to method lifetime parameter | 
|  | #[cfg(any(cfail1,cfail4))] | 
|  | trait TraitAddLifetimeBoundToMethodLifetimeParameter { | 
|  | // ----------- | 
|  | // ----------------------------------------------------------------------- | 
|  | // -------------- | 
|  | // | 
|  | // ------------------------- | 
|  | // ----------- | 
|  | // ----------------------------------------------------------------------- | 
|  | // -------------- | 
|  | // | 
|  | // ------------------------- | 
|  | fn method<'a, 'b    >(a: &'a u32, b: &'b u32); | 
|  | } | 
|  |  | 
|  | #[cfg(not(any(cfail1,cfail4)))] | 
|  | #[rustc_clean(cfg="cfail2")] | 
|  | #[rustc_clean(cfg="cfail3")] | 
|  | #[rustc_clean(cfg="cfail5")] | 
|  | #[rustc_clean(cfg="cfail6")] | 
|  | trait TraitAddLifetimeBoundToMethodLifetimeParameter { | 
|  | #[rustc_clean( | 
|  | except="opt_hir_owner_nodes,generics_of,predicates_of,fn_sig,type_of", | 
|  | cfg="cfail2", | 
|  | )] | 
|  | #[rustc_clean(cfg="cfail3")] | 
|  | #[rustc_clean( | 
|  | except="opt_hir_owner_nodes,generics_of,predicates_of,fn_sig,type_of", | 
|  | cfg="cfail5", | 
|  | )] | 
|  | #[rustc_clean(cfg="cfail6")] | 
|  | fn method<'a, 'b: 'a>(a: &'a u32, b: &'b u32); | 
|  | } | 
|  |  | 
|  |  | 
|  |  | 
|  | // Add second trait bound to method type parameter | 
|  | #[cfg(any(cfail1,cfail4))] | 
|  | trait TraitAddSecondTraitBoundToMethodTypeParameter { | 
|  | // --------------------------------------------------------------------- | 
|  | // ------------------------- | 
|  | // --------------------------------------------------------------------- | 
|  | // ------------------------- | 
|  | fn method<T: ReferencedTrait0                   >(); | 
|  | } | 
|  |  | 
|  | #[cfg(not(any(cfail1,cfail4)))] | 
|  | #[rustc_clean(cfg="cfail2")] | 
|  | #[rustc_clean(cfg="cfail3")] | 
|  | #[rustc_clean(cfg="cfail5")] | 
|  | #[rustc_clean(cfg="cfail6")] | 
|  | trait TraitAddSecondTraitBoundToMethodTypeParameter { | 
|  | #[rustc_clean(except="opt_hir_owner_nodes,predicates_of", cfg="cfail2")] | 
|  | #[rustc_clean(cfg="cfail3")] | 
|  | #[rustc_clean(except="opt_hir_owner_nodes,predicates_of", cfg="cfail5")] | 
|  | #[rustc_clean(cfg="cfail6")] | 
|  | fn method<T: ReferencedTrait0 + ReferencedTrait1>(); | 
|  | } | 
|  |  | 
|  |  | 
|  |  | 
|  | // Add second builtin bound to method type parameter | 
|  | #[cfg(any(cfail1,cfail4))] | 
|  | trait TraitAddSecondBuiltinBoundToMethodTypeParameter { | 
|  | // --------------------------------------------------------------------- | 
|  | // ------------------------- | 
|  | // --------------------------------------------------------------------- | 
|  | // ------------------------- | 
|  | fn method<T: Sized       >(); | 
|  | } | 
|  |  | 
|  | #[cfg(not(any(cfail1,cfail4)))] | 
|  | #[rustc_clean(cfg="cfail2")] | 
|  | #[rustc_clean(cfg="cfail3")] | 
|  | #[rustc_clean(cfg="cfail5")] | 
|  | #[rustc_clean(cfg="cfail6")] | 
|  | trait TraitAddSecondBuiltinBoundToMethodTypeParameter { | 
|  | #[rustc_clean(except="opt_hir_owner_nodes,predicates_of", cfg="cfail2")] | 
|  | #[rustc_clean(cfg="cfail3")] | 
|  | #[rustc_clean(except="opt_hir_owner_nodes,predicates_of", cfg="cfail5")] | 
|  | #[rustc_clean(cfg="cfail6")] | 
|  | fn method<T: Sized + Sync>(); | 
|  | } | 
|  |  | 
|  |  | 
|  |  | 
|  | // Add second lifetime bound to method lifetime parameter | 
|  | #[cfg(any(cfail1,cfail4))] | 
|  | trait TraitAddSecondLifetimeBoundToMethodLifetimeParameter { | 
|  | // ----------- | 
|  | // ----------------------------------------------------------------------- | 
|  | // -------------- | 
|  | // | 
|  | // ------------------------- | 
|  | // ----------- | 
|  | // ----------------------------------------------------------------------- | 
|  | // -------------- | 
|  | // | 
|  | // ------------------------- | 
|  | fn method<'a, 'b, 'c: 'a     >(a: &'a u32, b: &'b u32, c: &'c u32); | 
|  | } | 
|  |  | 
|  | #[cfg(not(any(cfail1,cfail4)))] | 
|  | #[rustc_clean(cfg="cfail2")] | 
|  | #[rustc_clean(cfg="cfail3")] | 
|  | #[rustc_clean(cfg="cfail5")] | 
|  | #[rustc_clean(cfg="cfail6")] | 
|  | trait TraitAddSecondLifetimeBoundToMethodLifetimeParameter { | 
|  | #[rustc_clean( | 
|  | except="opt_hir_owner_nodes,generics_of,predicates_of,fn_sig,type_of", | 
|  | cfg="cfail2", | 
|  | )] | 
|  | #[rustc_clean(cfg="cfail3")] | 
|  | #[rustc_clean( | 
|  | except="opt_hir_owner_nodes,generics_of,predicates_of,fn_sig,type_of", | 
|  | cfg="cfail5", | 
|  | )] | 
|  | #[rustc_clean(cfg="cfail6")] | 
|  | fn method<'a, 'b, 'c: 'a + 'b>(a: &'a u32, b: &'b u32, c: &'c u32); | 
|  | } | 
|  |  | 
|  |  | 
|  |  | 
|  | // Add associated type | 
|  | #[cfg(any(cfail1,cfail4))] | 
|  | trait TraitAddAssociatedType { | 
|  | //-------------------------- | 
|  | //-------------------------- | 
|  | // ------------- | 
|  |  | 
|  | //-------------------------- | 
|  | //-------------------------- | 
|  | //-------------------------- | 
|  | //-------------------------- | 
|  | fn method(); | 
|  | } | 
|  |  | 
|  | #[cfg(not(any(cfail1,cfail4)))] | 
|  | #[rustc_clean(except="opt_hir_owner_nodes,associated_item_def_ids", cfg="cfail2")] | 
|  | #[rustc_clean(cfg="cfail3")] | 
|  | #[rustc_clean(except="opt_hir_owner_nodes,associated_item_def_ids", cfg="cfail5")] | 
|  | #[rustc_clean(cfg="cfail6")] | 
|  | trait TraitAddAssociatedType { | 
|  | #[rustc_clean(cfg="cfail3")] | 
|  | #[rustc_clean(cfg="cfail6")] | 
|  | type Associated; | 
|  |  | 
|  | #[rustc_clean(cfg="cfail2")] | 
|  | #[rustc_clean(cfg="cfail3")] | 
|  | #[rustc_clean(cfg="cfail5")] | 
|  | #[rustc_clean(cfg="cfail6")] | 
|  | fn method(); | 
|  | } | 
|  |  | 
|  |  | 
|  |  | 
|  | // Add trait bound to associated type | 
|  | #[cfg(any(cfail1,cfail4))] | 
|  | trait TraitAddTraitBoundToAssociatedType { | 
|  | // ------------------------------------------------------- | 
|  | // ------------------------- | 
|  | // ------------------------------------------------------- | 
|  | // ------------------------- | 
|  | type Associated                  ; | 
|  |  | 
|  | fn method(); | 
|  | } | 
|  |  | 
|  |  | 
|  | // Apparently the type bound contributes to the predicates of the trait, but | 
|  | // does not change the associated item itself. | 
|  | #[cfg(not(any(cfail1,cfail4)))] | 
|  | #[rustc_clean(cfg="cfail2")] | 
|  | #[rustc_clean(cfg="cfail3")] | 
|  | #[rustc_clean(cfg="cfail5")] | 
|  | #[rustc_clean(cfg="cfail6")] | 
|  | trait TraitAddTraitBoundToAssociatedType { | 
|  | #[rustc_clean(except="opt_hir_owner_nodes", cfg="cfail2")] | 
|  | #[rustc_clean(cfg="cfail3")] | 
|  | #[rustc_clean(except="opt_hir_owner_nodes", cfg="cfail5")] | 
|  | #[rustc_clean(cfg="cfail6")] | 
|  | type Associated: ReferencedTrait0; | 
|  |  | 
|  | fn method(); | 
|  | } | 
|  |  | 
|  |  | 
|  |  | 
|  | // Add lifetime bound to associated type | 
|  | #[cfg(any(cfail1,cfail4))] | 
|  | trait TraitAddLifetimeBoundToAssociatedType<'a> { | 
|  | // ------------------------------------------------------- | 
|  | // ------------------------- | 
|  | // ------------------------------------------------------- | 
|  | // ------------------------- | 
|  | type Associated    ; | 
|  |  | 
|  | fn method(); | 
|  | } | 
|  |  | 
|  | #[cfg(not(any(cfail1,cfail4)))] | 
|  | #[rustc_clean(cfg="cfail2")] | 
|  | #[rustc_clean(cfg="cfail3")] | 
|  | #[rustc_clean(cfg="cfail5")] | 
|  | #[rustc_clean(cfg="cfail6")] | 
|  | trait TraitAddLifetimeBoundToAssociatedType<'a> { | 
|  | #[rustc_clean(except="opt_hir_owner_nodes", cfg="cfail2")] | 
|  | #[rustc_clean(cfg="cfail3")] | 
|  | #[rustc_clean(except="opt_hir_owner_nodes", cfg="cfail5")] | 
|  | #[rustc_clean(cfg="cfail6")] | 
|  | type Associated: 'a; | 
|  |  | 
|  | fn method(); | 
|  | } | 
|  |  | 
|  |  | 
|  |  | 
|  | // Add default to associated type | 
|  | #[cfg(any(cfail1,cfail4))] | 
|  | trait TraitAddDefaultToAssociatedType { | 
|  | //-------------------------------------------------------- | 
|  | //-------------------------- | 
|  | //-------------------------------------------------------- | 
|  | //-------------------------- | 
|  | type Associated                 ; | 
|  |  | 
|  | fn method(); | 
|  | } | 
|  |  | 
|  | #[cfg(not(any(cfail1,cfail4)))] | 
|  | #[rustc_clean(cfg="cfail2")] | 
|  | #[rustc_clean(cfg="cfail3")] | 
|  | #[rustc_clean(cfg="cfail5")] | 
|  | #[rustc_clean(cfg="cfail6")] | 
|  | trait TraitAddDefaultToAssociatedType { | 
|  | #[rustc_clean(except="opt_hir_owner_nodes", cfg="cfail2")] | 
|  | #[rustc_clean(cfg="cfail3")] | 
|  | #[rustc_clean(except="opt_hir_owner_nodes", cfg="cfail5")] | 
|  | #[rustc_clean(cfg="cfail6")] | 
|  | type Associated = ReferenceType0; | 
|  |  | 
|  | fn method(); | 
|  | } | 
|  |  | 
|  |  | 
|  |  | 
|  | // Add associated constant | 
|  | #[cfg(any(cfail1,cfail4))] | 
|  | trait TraitAddAssociatedConstant { | 
|  | fn method(); | 
|  | } | 
|  |  | 
|  | #[cfg(not(any(cfail1,cfail4)))] | 
|  | #[rustc_clean(except="opt_hir_owner_nodes,associated_item_def_ids", cfg="cfail2")] | 
|  | #[rustc_clean(cfg="cfail3")] | 
|  | #[rustc_clean(except="opt_hir_owner_nodes,associated_item_def_ids,predicates_of", cfg="cfail5")] | 
|  | #[rustc_clean(cfg="cfail6")] | 
|  | trait TraitAddAssociatedConstant { | 
|  | const Value: u32; | 
|  |  | 
|  | fn method(); | 
|  | } | 
|  |  | 
|  |  | 
|  |  | 
|  | // Add initializer to associated constant | 
|  | #[cfg(any(cfail1,cfail4))] | 
|  | trait TraitAddInitializerToAssociatedConstant { | 
|  | //-------------------------------------------------------- | 
|  | //-------------------------- | 
|  | //-------------------------------------------------------- | 
|  | //-------------------------- | 
|  | const Value: u32    ; | 
|  |  | 
|  | //-------------------------- | 
|  | //-------------------------- | 
|  | //-------------------------- | 
|  | //-------------------------- | 
|  | fn method(); | 
|  | } | 
|  |  | 
|  | #[cfg(not(any(cfail1,cfail4)))] | 
|  | #[rustc_clean(cfg="cfail2")] | 
|  | #[rustc_clean(cfg="cfail3")] | 
|  | #[rustc_clean(cfg="cfail5")] | 
|  | #[rustc_clean(cfg="cfail6")] | 
|  | trait TraitAddInitializerToAssociatedConstant { | 
|  | #[rustc_clean(except="opt_hir_owner_nodes", cfg="cfail2")] | 
|  | #[rustc_clean(cfg="cfail3")] | 
|  | #[rustc_clean(except="opt_hir_owner_nodes", cfg="cfail5")] | 
|  | #[rustc_clean(cfg="cfail6")] | 
|  | const Value: u32 = 1; | 
|  |  | 
|  | #[rustc_clean(cfg="cfail2")] | 
|  | #[rustc_clean(cfg="cfail3")] | 
|  | #[rustc_clean(cfg="cfail5")] | 
|  | #[rustc_clean(cfg="cfail6")] | 
|  | fn method(); | 
|  | } | 
|  |  | 
|  |  | 
|  |  | 
|  | // Change type of associated constant | 
|  | #[cfg(any(cfail1,cfail4))] | 
|  | trait TraitChangeTypeOfAssociatedConstant { | 
|  | // --------------------------------------------------------------- | 
|  | // ------------------------- | 
|  | // --------------------------------------------------------------- | 
|  | // ------------------------- | 
|  | const Value: u32; | 
|  |  | 
|  | // ------------------------- | 
|  | // ------------------------- | 
|  | // ------------------------- | 
|  | // ------------------------- | 
|  | fn method(); | 
|  | } | 
|  |  | 
|  | #[cfg(not(any(cfail1,cfail4)))] | 
|  | #[rustc_clean(cfg="cfail2")] | 
|  | #[rustc_clean(cfg="cfail3")] | 
|  | #[rustc_clean(cfg="cfail5")] | 
|  | #[rustc_clean(cfg="cfail6")] | 
|  | trait TraitChangeTypeOfAssociatedConstant { | 
|  | #[rustc_clean(except="opt_hir_owner_nodes,type_of", cfg="cfail2")] | 
|  | #[rustc_clean(cfg="cfail3")] | 
|  | #[rustc_clean(except="opt_hir_owner_nodes,type_of", cfg="cfail5")] | 
|  | #[rustc_clean(cfg="cfail6")] | 
|  | const Value: f64; | 
|  |  | 
|  | #[rustc_clean(cfg="cfail2")] | 
|  | #[rustc_clean(cfg="cfail3")] | 
|  | #[rustc_clean(cfg="cfail5")] | 
|  | #[rustc_clean(cfg="cfail6")] | 
|  | fn method(); | 
|  | } | 
|  |  | 
|  |  | 
|  |  | 
|  | // Add super trait | 
|  | #[cfg(any(cfail1,cfail4))] | 
|  | trait TraitAddSuperTrait { } | 
|  |  | 
|  | #[cfg(not(any(cfail1,cfail4)))] | 
|  | #[rustc_clean(except="opt_hir_owner_nodes,predicates_of", cfg="cfail2")] | 
|  | #[rustc_clean(cfg="cfail3")] | 
|  | #[rustc_clean(except="opt_hir_owner_nodes,predicates_of", cfg="cfail5")] | 
|  | #[rustc_clean(cfg="cfail6")] | 
|  | trait TraitAddSuperTrait : ReferencedTrait0 { } | 
|  |  | 
|  |  | 
|  |  | 
|  | // Add builtin bound (Send or Copy) | 
|  | #[cfg(any(cfail1,cfail4))] | 
|  | trait TraitAddBuiltiBound { } | 
|  |  | 
|  | #[cfg(not(any(cfail1,cfail4)))] | 
|  | #[rustc_clean(except="opt_hir_owner_nodes,predicates_of", cfg="cfail2")] | 
|  | #[rustc_clean(cfg="cfail3")] | 
|  | #[rustc_clean(except="opt_hir_owner_nodes,predicates_of", cfg="cfail5")] | 
|  | #[rustc_clean(cfg="cfail6")] | 
|  | trait TraitAddBuiltiBound : Send { } | 
|  |  | 
|  |  | 
|  |  | 
|  | // Add 'static lifetime bound to trait | 
|  | #[cfg(any(cfail1,cfail4))] | 
|  | trait TraitAddStaticLifetimeBound { } | 
|  |  | 
|  | #[cfg(not(any(cfail1,cfail4)))] | 
|  | #[rustc_clean(except="opt_hir_owner_nodes,predicates_of", cfg="cfail2")] | 
|  | #[rustc_clean(cfg="cfail3")] | 
|  | #[rustc_clean(except="opt_hir_owner_nodes,predicates_of", cfg="cfail5")] | 
|  | #[rustc_clean(cfg="cfail6")] | 
|  | trait TraitAddStaticLifetimeBound : 'static { } | 
|  |  | 
|  |  | 
|  |  | 
|  | // Add super trait as second bound | 
|  | #[cfg(any(cfail1,cfail4))] | 
|  | trait TraitAddTraitAsSecondBound : ReferencedTrait0 { } | 
|  |  | 
|  | #[cfg(not(any(cfail1,cfail4)))] | 
|  | #[rustc_clean(except="opt_hir_owner_nodes,predicates_of", cfg="cfail2")] | 
|  | #[rustc_clean(cfg="cfail3")] | 
|  | #[rustc_clean(except="opt_hir_owner_nodes,predicates_of", cfg="cfail5")] | 
|  | #[rustc_clean(cfg="cfail6")] | 
|  | trait TraitAddTraitAsSecondBound : ReferencedTrait0 + ReferencedTrait1 { } | 
|  |  | 
|  | #[cfg(any(cfail1,cfail4))] | 
|  | trait TraitAddTraitAsSecondBoundFromBuiltin : Send { } | 
|  |  | 
|  | #[cfg(not(any(cfail1,cfail4)))] | 
|  | #[rustc_clean(except="opt_hir_owner_nodes,predicates_of", cfg="cfail2")] | 
|  | #[rustc_clean(cfg="cfail3")] | 
|  | #[rustc_clean(except="opt_hir_owner_nodes,predicates_of", cfg="cfail5")] | 
|  | #[rustc_clean(cfg="cfail6")] | 
|  | trait TraitAddTraitAsSecondBoundFromBuiltin : Send + ReferencedTrait0 { } | 
|  |  | 
|  |  | 
|  |  | 
|  | // Add builtin bound as second bound | 
|  | #[cfg(any(cfail1,cfail4))] | 
|  | trait TraitAddBuiltinBoundAsSecondBound : ReferencedTrait0 { } | 
|  |  | 
|  | #[cfg(not(any(cfail1,cfail4)))] | 
|  | #[rustc_clean(except="opt_hir_owner_nodes,predicates_of", cfg="cfail2")] | 
|  | #[rustc_clean(cfg="cfail3")] | 
|  | #[rustc_clean(except="opt_hir_owner_nodes,predicates_of", cfg="cfail5")] | 
|  | #[rustc_clean(cfg="cfail6")] | 
|  | trait TraitAddBuiltinBoundAsSecondBound : ReferencedTrait0 + Send { } | 
|  |  | 
|  | #[cfg(any(cfail1,cfail4))] | 
|  | trait TraitAddBuiltinBoundAsSecondBoundFromBuiltin : Send { } | 
|  |  | 
|  | #[cfg(not(any(cfail1,cfail4)))] | 
|  | #[rustc_clean(except="opt_hir_owner_nodes,predicates_of", cfg="cfail2")] | 
|  | #[rustc_clean(cfg="cfail3")] | 
|  | #[rustc_clean(except="opt_hir_owner_nodes,predicates_of", cfg="cfail5")] | 
|  | #[rustc_clean(cfg="cfail6")] | 
|  | trait TraitAddBuiltinBoundAsSecondBoundFromBuiltin: Send + Copy { } | 
|  |  | 
|  |  | 
|  |  | 
|  | // Add 'static bounds as second bound | 
|  | #[cfg(any(cfail1,cfail4))] | 
|  | trait TraitAddStaticBoundAsSecondBound : ReferencedTrait0 { } | 
|  |  | 
|  | #[cfg(not(any(cfail1,cfail4)))] | 
|  | #[rustc_clean(except="opt_hir_owner_nodes,predicates_of", cfg="cfail2")] | 
|  | #[rustc_clean(cfg="cfail3")] | 
|  | #[rustc_clean(except="opt_hir_owner_nodes,predicates_of", cfg="cfail5")] | 
|  | #[rustc_clean(cfg="cfail6")] | 
|  | trait TraitAddStaticBoundAsSecondBound : ReferencedTrait0 + 'static { } | 
|  |  | 
|  | #[cfg(any(cfail1,cfail4))] | 
|  | trait TraitAddStaticBoundAsSecondBoundFromBuiltin : Send { } | 
|  |  | 
|  | #[cfg(not(any(cfail1,cfail4)))] | 
|  | #[rustc_clean(except="opt_hir_owner_nodes,predicates_of", cfg="cfail2")] | 
|  | #[rustc_clean(cfg="cfail3")] | 
|  | #[rustc_clean(except="opt_hir_owner_nodes,predicates_of", cfg="cfail5")] | 
|  | #[rustc_clean(cfg="cfail6")] | 
|  | trait TraitAddStaticBoundAsSecondBoundFromBuiltin : Send + 'static { } | 
|  |  | 
|  |  | 
|  |  | 
|  | // Add type parameter to trait | 
|  | #[cfg(any(cfail1,cfail4))] | 
|  | trait TraitAddTypeParameterToTrait { } | 
|  |  | 
|  | #[cfg(not(any(cfail1,cfail4)))] | 
|  | #[rustc_clean(except="opt_hir_owner_nodes,generics_of,predicates_of", cfg="cfail2")] | 
|  | #[rustc_clean(cfg="cfail3")] | 
|  | #[rustc_clean(except="opt_hir_owner_nodes,generics_of,predicates_of", cfg="cfail5")] | 
|  | #[rustc_clean(cfg="cfail6")] | 
|  | trait TraitAddTypeParameterToTrait<T> { } | 
|  |  | 
|  |  | 
|  |  | 
|  | // Add lifetime parameter to trait | 
|  | #[cfg(any(cfail1,cfail4))] | 
|  | trait TraitAddLifetimeParameterToTrait { } | 
|  |  | 
|  | #[cfg(not(any(cfail1,cfail4)))] | 
|  | #[rustc_clean(except="opt_hir_owner_nodes,generics_of,predicates_of", cfg="cfail2")] | 
|  | #[rustc_clean(cfg="cfail3")] | 
|  | #[rustc_clean(except="opt_hir_owner_nodes,generics_of,predicates_of", cfg="cfail5")] | 
|  | #[rustc_clean(cfg="cfail6")] | 
|  | trait TraitAddLifetimeParameterToTrait<'a> { } | 
|  |  | 
|  |  | 
|  |  | 
|  | // Add trait bound to type parameter of trait | 
|  | #[cfg(any(cfail1,cfail4))] | 
|  | trait TraitAddTraitBoundToTypeParameterOfTrait<T> { } | 
|  |  | 
|  | #[cfg(not(any(cfail1,cfail4)))] | 
|  | #[rustc_clean(except="opt_hir_owner_nodes,predicates_of", cfg="cfail2")] | 
|  | #[rustc_clean(cfg="cfail3")] | 
|  | #[rustc_clean(except="opt_hir_owner_nodes,predicates_of", cfg="cfail5")] | 
|  | #[rustc_clean(cfg="cfail6")] | 
|  | trait TraitAddTraitBoundToTypeParameterOfTrait<T: ReferencedTrait0> { } | 
|  |  | 
|  |  | 
|  |  | 
|  | // Add lifetime bound to type parameter of trait | 
|  | #[cfg(any(cfail1,cfail4))] | 
|  | trait TraitAddLifetimeBoundToTypeParameterOfTrait<'a, T> { } | 
|  |  | 
|  | #[cfg(not(any(cfail1,cfail4)))] | 
|  | #[rustc_clean(except="opt_hir_owner_nodes,predicates_of", cfg="cfail2")] | 
|  | #[rustc_clean(cfg="cfail3")] | 
|  | #[rustc_clean(except="opt_hir_owner_nodes,predicates_of", cfg="cfail5")] | 
|  | #[rustc_clean(cfg="cfail6")] | 
|  | trait TraitAddLifetimeBoundToTypeParameterOfTrait<'a, T: 'a> { } | 
|  |  | 
|  |  | 
|  |  | 
|  | // Add lifetime bound to lifetime parameter of trait | 
|  | #[cfg(any(cfail1,cfail4))] | 
|  | trait TraitAddLifetimeBoundToLifetimeParameterOfTrait<'a, 'b> { } | 
|  |  | 
|  | #[cfg(not(any(cfail1,cfail4)))] | 
|  | #[rustc_clean(except="opt_hir_owner_nodes,predicates_of", cfg="cfail2")] | 
|  | #[rustc_clean(cfg="cfail3")] | 
|  | #[rustc_clean(except="opt_hir_owner_nodes,predicates_of", cfg="cfail5")] | 
|  | #[rustc_clean(cfg="cfail6")] | 
|  | trait TraitAddLifetimeBoundToLifetimeParameterOfTrait<'a: 'b, 'b> { } | 
|  |  | 
|  |  | 
|  |  | 
|  | // Add builtin bound to type parameter of trait | 
|  | #[cfg(any(cfail1,cfail4))] | 
|  | trait TraitAddBuiltinBoundToTypeParameterOfTrait<T> { } | 
|  |  | 
|  | #[cfg(not(any(cfail1,cfail4)))] | 
|  | #[rustc_clean(except="opt_hir_owner_nodes,predicates_of", cfg="cfail2")] | 
|  | #[rustc_clean(cfg="cfail3")] | 
|  | #[rustc_clean(except="opt_hir_owner_nodes,predicates_of", cfg="cfail5")] | 
|  | #[rustc_clean(cfg="cfail6")] | 
|  | trait TraitAddBuiltinBoundToTypeParameterOfTrait<T: Send> { } | 
|  |  | 
|  |  | 
|  |  | 
|  | // Add second type parameter to trait | 
|  | #[cfg(any(cfail1,cfail4))] | 
|  | trait TraitAddSecondTypeParameterToTrait<T> { } | 
|  |  | 
|  | #[cfg(not(any(cfail1,cfail4)))] | 
|  | #[rustc_clean(except="opt_hir_owner_nodes,generics_of,predicates_of", cfg="cfail2")] | 
|  | #[rustc_clean(cfg="cfail3")] | 
|  | #[rustc_clean(except="opt_hir_owner_nodes,generics_of,predicates_of", cfg="cfail5")] | 
|  | #[rustc_clean(cfg="cfail6")] | 
|  | trait TraitAddSecondTypeParameterToTrait<T, S> { } | 
|  |  | 
|  |  | 
|  |  | 
|  | // Add second lifetime parameter to trait | 
|  | #[cfg(any(cfail1,cfail4))] | 
|  | trait TraitAddSecondLifetimeParameterToTrait<'a> { } | 
|  |  | 
|  | #[cfg(not(any(cfail1,cfail4)))] | 
|  | #[rustc_clean(except="opt_hir_owner_nodes,generics_of,predicates_of", cfg="cfail2")] | 
|  | #[rustc_clean(cfg="cfail3")] | 
|  | #[rustc_clean(except="opt_hir_owner_nodes,generics_of,predicates_of", cfg="cfail5")] | 
|  | #[rustc_clean(cfg="cfail6")] | 
|  | trait TraitAddSecondLifetimeParameterToTrait<'a, 'b> { } | 
|  |  | 
|  |  | 
|  |  | 
|  | // Add second trait bound to type parameter of trait | 
|  | #[cfg(any(cfail1,cfail4))] | 
|  | trait TraitAddSecondTraitBoundToTypeParameterOfTrait<T: ReferencedTrait0> { } | 
|  |  | 
|  | #[cfg(not(any(cfail1,cfail4)))] | 
|  | #[rustc_clean(except="opt_hir_owner_nodes,predicates_of", cfg="cfail2")] | 
|  | #[rustc_clean(cfg="cfail3")] | 
|  | #[rustc_clean(except="opt_hir_owner_nodes,predicates_of", cfg="cfail5")] | 
|  | #[rustc_clean(cfg="cfail6")] | 
|  | trait TraitAddSecondTraitBoundToTypeParameterOfTrait<T: ReferencedTrait0 + ReferencedTrait1> { } | 
|  |  | 
|  |  | 
|  |  | 
|  | // Add second lifetime bound to type parameter of trait | 
|  | #[cfg(any(cfail1,cfail4))] | 
|  | trait TraitAddSecondLifetimeBoundToTypeParameterOfTrait<'a, 'b, T: 'a> { } | 
|  |  | 
|  | #[cfg(not(any(cfail1,cfail4)))] | 
|  | #[rustc_clean(except="opt_hir_owner_nodes,predicates_of", cfg="cfail2")] | 
|  | #[rustc_clean(cfg="cfail3")] | 
|  | #[rustc_clean(except="opt_hir_owner_nodes,predicates_of", cfg="cfail5")] | 
|  | #[rustc_clean(cfg="cfail6")] | 
|  | trait TraitAddSecondLifetimeBoundToTypeParameterOfTrait<'a, 'b, T: 'a + 'b> { } | 
|  |  | 
|  |  | 
|  |  | 
|  | // Add second lifetime bound to lifetime parameter of trait | 
|  | #[cfg(any(cfail1,cfail4))] | 
|  | trait TraitAddSecondLifetimeBoundToLifetimeParameterOfTrait<'a: 'b, 'b, 'c> { } | 
|  |  | 
|  | #[cfg(not(any(cfail1,cfail4)))] | 
|  | #[rustc_clean(except="opt_hir_owner_nodes,predicates_of", cfg="cfail2")] | 
|  | #[rustc_clean(cfg="cfail3")] | 
|  | #[rustc_clean(except="opt_hir_owner_nodes,predicates_of", cfg="cfail5")] | 
|  | #[rustc_clean(cfg="cfail6")] | 
|  | trait TraitAddSecondLifetimeBoundToLifetimeParameterOfTrait<'a: 'b + 'c, 'b, 'c> { } | 
|  |  | 
|  |  | 
|  |  | 
|  | // Add second builtin bound to type parameter of trait | 
|  | #[cfg(any(cfail1,cfail4))] | 
|  | trait TraitAddSecondBuiltinBoundToTypeParameterOfTrait<T: Send> { } | 
|  |  | 
|  | #[cfg(not(any(cfail1,cfail4)))] | 
|  | #[rustc_clean(except="opt_hir_owner_nodes,predicates_of", cfg="cfail2")] | 
|  | #[rustc_clean(cfg="cfail3")] | 
|  | #[rustc_clean(except="opt_hir_owner_nodes,predicates_of", cfg="cfail5")] | 
|  | #[rustc_clean(cfg="cfail6")] | 
|  | trait TraitAddSecondBuiltinBoundToTypeParameterOfTrait<T: Send + Sync> { } | 
|  |  | 
|  |  | 
|  |  | 
|  | struct ReferenceType0 {} | 
|  | struct ReferenceType1 {} | 
|  |  | 
|  |  | 
|  |  | 
|  | // Add trait bound to type parameter of trait in where clause | 
|  | #[cfg(any(cfail1,cfail4))] | 
|  | trait TraitAddTraitBoundToTypeParameterOfTraitWhere<T> { } | 
|  |  | 
|  | #[cfg(not(any(cfail1,cfail4)))] | 
|  | #[rustc_clean(except="opt_hir_owner_nodes,predicates_of", cfg="cfail2")] | 
|  | #[rustc_clean(cfg="cfail3")] | 
|  | #[rustc_clean(except="opt_hir_owner_nodes,predicates_of", cfg="cfail5")] | 
|  | #[rustc_clean(cfg="cfail6")] | 
|  | trait TraitAddTraitBoundToTypeParameterOfTraitWhere<T> where T: ReferencedTrait0 { } | 
|  |  | 
|  |  | 
|  |  | 
|  | // Add lifetime bound to type parameter of trait in where clause | 
|  | #[cfg(any(cfail1,cfail4))] | 
|  | trait TraitAddLifetimeBoundToTypeParameterOfTraitWhere<'a, T> { } | 
|  |  | 
|  | #[cfg(not(any(cfail1,cfail4)))] | 
|  | #[rustc_clean(except="opt_hir_owner_nodes,predicates_of", cfg="cfail2")] | 
|  | #[rustc_clean(cfg="cfail3")] | 
|  | #[rustc_clean(except="opt_hir_owner_nodes,predicates_of", cfg="cfail5")] | 
|  | #[rustc_clean(cfg="cfail6")] | 
|  | trait TraitAddLifetimeBoundToTypeParameterOfTraitWhere<'a, T> where T: 'a { } | 
|  |  | 
|  |  | 
|  |  | 
|  | // Add lifetime bound to lifetime parameter of trait in where clause | 
|  | #[cfg(any(cfail1,cfail4))] | 
|  | trait TraitAddLifetimeBoundToLifetimeParameterOfTraitWhere<'a, 'b> { } | 
|  |  | 
|  | #[cfg(not(any(cfail1,cfail4)))] | 
|  | #[rustc_clean(except="opt_hir_owner_nodes,predicates_of", cfg="cfail2")] | 
|  | #[rustc_clean(cfg="cfail3")] | 
|  | #[rustc_clean(except="opt_hir_owner_nodes,predicates_of", cfg="cfail5")] | 
|  | #[rustc_clean(cfg="cfail6")] | 
|  | trait TraitAddLifetimeBoundToLifetimeParameterOfTraitWhere<'a, 'b> where 'a: 'b { } | 
|  |  | 
|  |  | 
|  |  | 
|  | // Add builtin bound to type parameter of trait in where clause | 
|  | #[cfg(any(cfail1,cfail4))] | 
|  | trait TraitAddBuiltinBoundToTypeParameterOfTraitWhere<T> { } | 
|  |  | 
|  | #[cfg(not(any(cfail1,cfail4)))] | 
|  | #[rustc_clean(except="opt_hir_owner_nodes,predicates_of", cfg="cfail2")] | 
|  | #[rustc_clean(cfg="cfail3")] | 
|  | #[rustc_clean(except="opt_hir_owner_nodes,predicates_of", cfg="cfail5")] | 
|  | #[rustc_clean(cfg="cfail6")] | 
|  | trait TraitAddBuiltinBoundToTypeParameterOfTraitWhere<T> where T: Send { } | 
|  |  | 
|  |  | 
|  |  | 
|  | // Add second trait bound to type parameter of trait in where clause | 
|  | #[cfg(any(cfail1,cfail4))] | 
|  | trait TraitAddSecondTraitBoundToTypeParameterOfTraitWhere<T> where T: ReferencedTrait0 { } | 
|  |  | 
|  | #[cfg(not(any(cfail1,cfail4)))] | 
|  | #[rustc_clean(except="opt_hir_owner_nodes,predicates_of", cfg="cfail2")] | 
|  | #[rustc_clean(cfg="cfail3")] | 
|  | #[rustc_clean(except="opt_hir_owner_nodes,predicates_of", cfg="cfail5")] | 
|  | #[rustc_clean(cfg="cfail6")] | 
|  | trait TraitAddSecondTraitBoundToTypeParameterOfTraitWhere<T> | 
|  | where T: ReferencedTrait0 + ReferencedTrait1 { } | 
|  |  | 
|  |  | 
|  |  | 
|  | // Add second lifetime bound to type parameter of trait in where clause | 
|  | #[cfg(any(cfail1,cfail4))] | 
|  | trait TraitAddSecondLifetimeBoundToTypeParameterOfTraitWhere<'a, 'b, T> where T: 'a { } | 
|  |  | 
|  | #[cfg(not(any(cfail1,cfail4)))] | 
|  | #[rustc_clean(except="opt_hir_owner_nodes,predicates_of", cfg="cfail2")] | 
|  | #[rustc_clean(cfg="cfail3")] | 
|  | #[rustc_clean(except="opt_hir_owner_nodes,predicates_of", cfg="cfail5")] | 
|  | #[rustc_clean(cfg="cfail6")] | 
|  | trait TraitAddSecondLifetimeBoundToTypeParameterOfTraitWhere<'a, 'b, T> where T: 'a + 'b { } | 
|  |  | 
|  |  | 
|  |  | 
|  | // Add second lifetime bound to lifetime parameter of trait in where clause | 
|  | #[cfg(any(cfail1,cfail4))] | 
|  | trait TraitAddSecondLifetimeBoundToLifetimeParameterOfTraitWhere<'a, 'b, 'c> where 'a: 'b { } | 
|  |  | 
|  | #[cfg(not(any(cfail1,cfail4)))] | 
|  | #[rustc_clean(except="opt_hir_owner_nodes,predicates_of", cfg="cfail2")] | 
|  | #[rustc_clean(cfg="cfail3")] | 
|  | #[rustc_clean(except="opt_hir_owner_nodes,predicates_of", cfg="cfail5")] | 
|  | #[rustc_clean(cfg="cfail6")] | 
|  | trait TraitAddSecondLifetimeBoundToLifetimeParameterOfTraitWhere<'a, 'b, 'c> where 'a: 'b + 'c { } | 
|  |  | 
|  |  | 
|  |  | 
|  | // Add second builtin bound to type parameter of trait in where clause | 
|  | #[cfg(any(cfail1,cfail4))] | 
|  | trait TraitAddSecondBuiltinBoundToTypeParameterOfTraitWhere<T> where T: Send { } | 
|  |  | 
|  | #[cfg(not(any(cfail1,cfail4)))] | 
|  | #[rustc_clean(except="opt_hir_owner_nodes,predicates_of", cfg="cfail2")] | 
|  | #[rustc_clean(cfg="cfail3")] | 
|  | #[rustc_clean(except="opt_hir_owner_nodes,predicates_of", cfg="cfail5")] | 
|  | #[rustc_clean(cfg="cfail6")] | 
|  | trait TraitAddSecondBuiltinBoundToTypeParameterOfTraitWhere<T> where T: Send + Sync { } | 
|  |  | 
|  |  | 
|  | // Change return type of method indirectly by modifying a use statement | 
|  | mod change_return_type_of_method_indirectly_use { | 
|  | #[cfg(any(cfail1,cfail4))] | 
|  | use super::ReferenceType0 as ReturnType; | 
|  | #[cfg(not(any(cfail1,cfail4)))] | 
|  | use super::ReferenceType1 as ReturnType; | 
|  |  | 
|  | #[rustc_clean(cfg="cfail2")] | 
|  | #[rustc_clean(cfg="cfail3")] | 
|  | #[rustc_clean(cfg="cfail5")] | 
|  | #[rustc_clean(cfg="cfail6")] | 
|  | trait TraitChangeReturnType { | 
|  | #[rustc_clean(except="opt_hir_owner_nodes,fn_sig", cfg="cfail2")] | 
|  | #[rustc_clean(cfg="cfail3")] | 
|  | #[rustc_clean(except="opt_hir_owner_nodes,fn_sig", cfg="cfail5")] | 
|  | #[rustc_clean(cfg="cfail6")] | 
|  | fn method() -> ReturnType; | 
|  | } | 
|  | } | 
|  |  | 
|  |  | 
|  |  | 
|  | // Change type of method parameter indirectly by modifying a use statement | 
|  | mod change_method_parameter_type_indirectly_by_use { | 
|  | #[cfg(any(cfail1,cfail4))] | 
|  | use super::ReferenceType0 as ArgType; | 
|  | #[cfg(not(any(cfail1,cfail4)))] | 
|  | use super::ReferenceType1 as ArgType; | 
|  |  | 
|  | #[rustc_clean(cfg="cfail2")] | 
|  | #[rustc_clean(cfg="cfail3")] | 
|  | #[rustc_clean(cfg="cfail5")] | 
|  | #[rustc_clean(cfg="cfail6")] | 
|  | trait TraitChangeArgType { | 
|  | #[rustc_clean(except="opt_hir_owner_nodes,fn_sig", cfg="cfail2")] | 
|  | #[rustc_clean(cfg="cfail3")] | 
|  | #[rustc_clean(except="opt_hir_owner_nodes,fn_sig", cfg="cfail5")] | 
|  | #[rustc_clean(cfg="cfail6")] | 
|  | fn method(a: ArgType); | 
|  | } | 
|  | } | 
|  |  | 
|  |  | 
|  |  | 
|  | // Change trait bound of method type parameter indirectly by modifying a use statement | 
|  | mod change_method_parameter_type_bound_indirectly_by_use { | 
|  | #[cfg(any(cfail1,cfail4))] | 
|  | use super::ReferencedTrait0 as Bound; | 
|  | #[cfg(not(any(cfail1,cfail4)))] | 
|  | use super::ReferencedTrait1 as Bound; | 
|  |  | 
|  | #[rustc_clean(cfg="cfail2")] | 
|  | #[rustc_clean(cfg="cfail3")] | 
|  | #[rustc_clean(cfg="cfail5")] | 
|  | #[rustc_clean(cfg="cfail6")] | 
|  | trait TraitChangeBoundOfMethodTypeParameter { | 
|  | #[rustc_clean(except="opt_hir_owner_nodes,predicates_of", cfg="cfail2")] | 
|  | #[rustc_clean(cfg="cfail3")] | 
|  | #[rustc_clean(except="opt_hir_owner_nodes,predicates_of", cfg="cfail5")] | 
|  | #[rustc_clean(cfg="cfail6")] | 
|  | fn method<T: Bound>(a: T); | 
|  | } | 
|  | } | 
|  |  | 
|  |  | 
|  |  | 
|  | // Change trait bound of method type parameter in where clause indirectly | 
|  | // by modifying a use statement | 
|  | mod change_method_parameter_type_bound_indirectly_by_use_where { | 
|  | #[cfg(any(cfail1,cfail4))] | 
|  | use super::ReferencedTrait0 as Bound; | 
|  | #[cfg(not(any(cfail1,cfail4)))] | 
|  | use super::ReferencedTrait1 as Bound; | 
|  |  | 
|  | #[rustc_clean(cfg="cfail2")] | 
|  | #[rustc_clean(cfg="cfail3")] | 
|  | #[rustc_clean(cfg="cfail5")] | 
|  | #[rustc_clean(cfg="cfail6")] | 
|  | trait TraitChangeBoundOfMethodTypeParameterWhere { | 
|  | #[rustc_clean(except="opt_hir_owner_nodes,predicates_of", cfg="cfail2")] | 
|  | #[rustc_clean(cfg="cfail3")] | 
|  | #[rustc_clean(except="opt_hir_owner_nodes,predicates_of", cfg="cfail5")] | 
|  | #[rustc_clean(cfg="cfail6")] | 
|  | fn method<T>(a: T) where T: Bound; | 
|  | } | 
|  | } | 
|  |  | 
|  |  | 
|  |  | 
|  | // Change trait bound of trait type parameter indirectly by modifying a use statement | 
|  | mod change_method_type_parameter_bound_indirectly { | 
|  | #[cfg(any(cfail1,cfail4))] | 
|  | use super::ReferencedTrait0 as Bound; | 
|  | #[cfg(not(any(cfail1,cfail4)))] | 
|  | use super::ReferencedTrait1 as Bound; | 
|  |  | 
|  | #[rustc_clean(except="opt_hir_owner_nodes,predicates_of", cfg="cfail2")] | 
|  | #[rustc_clean(cfg="cfail3")] | 
|  | #[rustc_clean(except="opt_hir_owner_nodes,predicates_of", cfg="cfail5")] | 
|  | #[rustc_clean(cfg="cfail6")] | 
|  | trait TraitChangeTraitBound<T: Bound> { | 
|  | fn method(a: T); | 
|  | } | 
|  | } | 
|  |  | 
|  |  | 
|  |  | 
|  | // Change trait bound of trait type parameter in where clause indirectly | 
|  | // by modifying a use statement | 
|  | mod change_method_type_parameter_bound_indirectly_where { | 
|  | #[cfg(any(cfail1,cfail4))] | 
|  | use super::ReferencedTrait0 as Bound; | 
|  | #[cfg(not(any(cfail1,cfail4)))] | 
|  | use super::ReferencedTrait1 as Bound; | 
|  |  | 
|  | #[rustc_clean(except="opt_hir_owner_nodes,predicates_of", cfg="cfail2")] | 
|  | #[rustc_clean(cfg="cfail3")] | 
|  | #[rustc_clean(except="opt_hir_owner_nodes,predicates_of", cfg="cfail5")] | 
|  | #[rustc_clean(cfg="cfail6")] | 
|  | trait TraitChangeTraitBoundWhere<T> where T: Bound { | 
|  | fn method(a: T); | 
|  | } | 
|  | } |