| // This test case tests the incremental compilation hash (ICH) implementation | 
 | // for let expressions. | 
 |  | 
 | // 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. | 
 |  | 
 | //@ 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"] | 
 |  | 
 | pub struct Foo; | 
 |  | 
 | // Change Method Name ----------------------------------------------------------- | 
 | #[cfg(any(cfail1,cfail4))] | 
 | impl Foo { | 
 |     pub fn method_name() { } | 
 | } | 
 |  | 
 | #[cfg(not(any(cfail1,cfail4)))] | 
 | #[rustc_clean(cfg="cfail2", except="opt_hir_owner_nodes,associated_item_def_ids")] | 
 | #[rustc_clean(cfg="cfail3")] | 
 | #[rustc_clean(cfg="cfail5", except="opt_hir_owner_nodes,associated_item_def_ids")] | 
 | #[rustc_clean(cfg="cfail6")] | 
 | impl Foo { | 
 |     #[rustc_clean(cfg="cfail3")] | 
 |     #[rustc_clean(cfg="cfail6")] | 
 |     pub fn method_name2() { } | 
 | } | 
 |  | 
 | // Change Method Body ----------------------------------------------------------- | 
 | // | 
 | // This should affect the method itself, but not the impl. | 
 | #[cfg(any(cfail1,cfail4))] | 
 | impl Foo { | 
 |     //------------------------------------------------------------------------------------------ | 
 |     //-------------------------- | 
 |     //------------------------------------------------------------------------------------------ | 
 |     //-------------------------- | 
 |     pub fn method_body() { | 
 |         // ----------------------- | 
 |     } | 
 | } | 
 |  | 
 | #[cfg(not(any(cfail1,cfail4)))] | 
 | #[rustc_clean(cfg="cfail2")] | 
 | #[rustc_clean(cfg="cfail3")] | 
 | #[rustc_clean(cfg="cfail5")] | 
 | #[rustc_clean(cfg="cfail6")] | 
 | impl Foo { | 
 |     #[rustc_clean(cfg="cfail2", except="opt_hir_owner_nodes,optimized_mir,promoted_mir,typeck")] | 
 |     #[rustc_clean(cfg="cfail3")] | 
 |     #[rustc_clean(cfg="cfail5", except="opt_hir_owner_nodes,optimized_mir,promoted_mir,typeck")] | 
 |     #[rustc_clean(cfg="cfail6")] | 
 |     pub fn method_body() { | 
 |         println!("Hello, world!"); | 
 |     } | 
 | } | 
 |  | 
 |  | 
 | // Change Method Body (inlined) ------------------------------------------------ | 
 | // | 
 | // This should affect the method itself, but not the impl. | 
 | #[cfg(any(cfail1,cfail4))] | 
 | impl Foo { | 
 |     //------------ | 
 |     //--------------- | 
 |     //---------------------------------------------------------------- | 
 |     // | 
 |     //-------------------------- | 
 |     //------------ | 
 |     //--------------- | 
 |     //---------------------------------------------------------------- | 
 |     // | 
 |     //-------------------------- | 
 |     #[inline] | 
 |     pub fn method_body_inlined() { | 
 |         // ----------------------- | 
 |     } | 
 | } | 
 |  | 
 | #[cfg(not(any(cfail1,cfail4)))] | 
 | #[rustc_clean(cfg="cfail2")] | 
 | #[rustc_clean(cfg="cfail3")] | 
 | #[rustc_clean(cfg="cfail5")] | 
 | #[rustc_clean(cfg="cfail6")] | 
 | impl Foo { | 
 |     #[rustc_clean( | 
 |         cfg="cfail2", | 
 |         except="opt_hir_owner_nodes,optimized_mir,promoted_mir,typeck" | 
 |     )] | 
 |     #[rustc_clean(cfg="cfail3")] | 
 |     #[rustc_clean( | 
 |         cfg="cfail5", | 
 |         except="opt_hir_owner_nodes,optimized_mir,promoted_mir,typeck" | 
 |     )] | 
 |     #[rustc_clean(cfg="cfail6")] | 
 |     #[inline] | 
 |     pub fn method_body_inlined() { | 
 |         println!("Hello, world!"); | 
 |     } | 
 | } | 
 |  | 
 |  | 
 | // Change Method Privacy ------------------------------------------------------- | 
 | #[cfg(any(cfail1,cfail4))] | 
 | impl Foo { | 
 |     //-------------------------- | 
 |     //-------------------------- | 
 |     //-------------------------------------------------------- | 
 |     //-------------------------- | 
 |     pub fn method_privacy() { } | 
 | } | 
 |  | 
 | #[cfg(not(any(cfail1,cfail4)))] | 
 | #[rustc_clean(cfg="cfail2")] | 
 | #[rustc_clean(cfg="cfail3")] | 
 | #[rustc_clean(cfg="cfail5")] | 
 | #[rustc_clean(cfg="cfail6")] | 
 | impl Foo { | 
 |     #[rustc_clean(cfg="cfail2")] | 
 |     #[rustc_clean(cfg="cfail3")] | 
 |     #[rustc_clean(cfg="cfail5", except="opt_hir_owner_nodes")] | 
 |     #[rustc_clean(cfg="cfail6")] | 
 |     fn     method_privacy() { } | 
 | } | 
 |  | 
 | // Change Method Selfness ----------------------------------------------------------- | 
 | #[cfg(any(cfail1,cfail4))] | 
 | impl Foo { | 
 |     //------------ | 
 |     //--------------- | 
 |     //--------------------------------------------------------------------------------------- | 
 |     // | 
 |     //-------------------------- | 
 |     //------------ | 
 |     //--------------- | 
 |     //--------------------------------------------------------------------------------------- | 
 |     // | 
 |     //-------------------------- | 
 |     pub fn method_selfness() { } | 
 | } | 
 |  | 
 | #[cfg(not(any(cfail1,cfail4)))] | 
 | #[rustc_clean(cfg="cfail2")] | 
 | #[rustc_clean(cfg="cfail3")] | 
 | #[rustc_clean(cfg="cfail5", except="opt_hir_owner_nodes")] | 
 | #[rustc_clean(cfg="cfail6")] | 
 | impl Foo { | 
 |     #[rustc_clean( | 
 |         cfg="cfail2", | 
 |         except="opt_hir_owner_nodes,fn_sig,generics_of,typeck,associated_item,optimized_mir", | 
 |     )] | 
 |     #[rustc_clean(cfg="cfail3")] | 
 |     #[rustc_clean( | 
 |         cfg="cfail5", | 
 |         except="opt_hir_owner_nodes,fn_sig,generics_of,typeck,associated_item,optimized_mir", | 
 |     )] | 
 |     #[rustc_clean(cfg="cfail6")] | 
 |     pub fn method_selfness(&self) { } | 
 | } | 
 |  | 
 | // Change Method Selfmutness --------------------------------------------------- | 
 | #[cfg(any(cfail1,cfail4))] | 
 | impl Foo { | 
 |     //------------------------------------------------------------------------------------ | 
 |     //-------------------------- | 
 |     //------------------------------------------------------------------------------------ | 
 |     //-------------------------- | 
 |     pub fn method_selfmutness(&    self) { } | 
 | } | 
 |  | 
 | #[cfg(not(any(cfail1,cfail4)))] | 
 | #[rustc_clean(cfg="cfail2")] | 
 | #[rustc_clean(cfg="cfail3")] | 
 | #[rustc_clean(cfg="cfail5")] | 
 | #[rustc_clean(cfg="cfail6")] | 
 | impl Foo { | 
 |     #[rustc_clean(cfg="cfail2", except="opt_hir_owner_nodes,fn_sig,typeck,optimized_mir")] | 
 |     #[rustc_clean(cfg="cfail3")] | 
 |     #[rustc_clean(cfg="cfail5", except="opt_hir_owner_nodes,fn_sig,typeck,optimized_mir")] | 
 |     #[rustc_clean(cfg="cfail6")] | 
 |     pub fn method_selfmutness(&mut self) { } | 
 | } | 
 |  | 
 |  | 
 |  | 
 | // Add Method To Impl ---------------------------------------------------------- | 
 | #[cfg(any(cfail1,cfail4))] | 
 | impl Foo { | 
 |     pub fn add_method_to_impl1(&self) { } | 
 | } | 
 |  | 
 | #[cfg(not(any(cfail1,cfail4)))] | 
 | #[rustc_clean(cfg="cfail2", except="opt_hir_owner_nodes,associated_item_def_ids")] | 
 | #[rustc_clean(cfg="cfail3")] | 
 | #[rustc_clean(cfg="cfail5", except="opt_hir_owner_nodes,associated_item_def_ids")] | 
 | #[rustc_clean(cfg="cfail6")] | 
 | impl Foo { | 
 |     #[rustc_clean(cfg="cfail2")] | 
 |     #[rustc_clean(cfg="cfail3")] | 
 |     #[rustc_clean(cfg="cfail5")] | 
 |     #[rustc_clean(cfg="cfail6")] | 
 |     pub fn add_method_to_impl1(&self) { } | 
 |  | 
 |     #[rustc_clean(cfg="cfail3")] | 
 |     #[rustc_clean(cfg="cfail6")] | 
 |     pub fn add_method_to_impl2(&self) { } | 
 | } | 
 |  | 
 |  | 
 |  | 
 | // Add Method Parameter -------------------------------------------------------- | 
 | #[cfg(any(cfail1,cfail4))] | 
 | impl Foo { | 
 |     //------------------------------------------------------------------------------------ | 
 |     //-------------------------- | 
 |     //------------------------------------------------------------------------------------ | 
 |     //-------------------------- | 
 |     pub fn add_method_parameter(&self        ) { } | 
 | } | 
 |  | 
 | #[cfg(not(any(cfail1,cfail4)))] | 
 | #[rustc_clean(cfg="cfail2")] | 
 | #[rustc_clean(cfg="cfail3")] | 
 | #[rustc_clean(cfg="cfail5")] | 
 | #[rustc_clean(cfg="cfail6")] | 
 | impl Foo { | 
 |     #[rustc_clean(cfg="cfail2", except="opt_hir_owner_nodes,fn_sig,typeck,optimized_mir")] | 
 |     #[rustc_clean(cfg="cfail3")] | 
 |     #[rustc_clean(cfg="cfail5", except="opt_hir_owner_nodes,fn_sig,typeck,optimized_mir")] | 
 |     #[rustc_clean(cfg="cfail6")] | 
 |     pub fn add_method_parameter(&self, _: i32) { } | 
 | } | 
 |  | 
 |  | 
 |  | 
 | // Change Method Parameter Name ------------------------------------------------ | 
 | #[cfg(any(cfail1,cfail4))] | 
 | impl Foo { | 
 |     //---------------------------------------------------------------------- | 
 |     //-------------------------- | 
 |     //---------------------------------------------------------------------- | 
 |     //-------------------------- | 
 |     pub fn change_method_parameter_name(&self, a: i64) { } | 
 | } | 
 |  | 
 | #[cfg(not(any(cfail1,cfail4)))] | 
 | #[rustc_clean(cfg="cfail2")] | 
 | #[rustc_clean(cfg="cfail3")] | 
 | #[rustc_clean(cfg="cfail5")] | 
 | #[rustc_clean(cfg="cfail6")] | 
 | impl Foo { | 
 |     #[rustc_clean(cfg="cfail2", except="opt_hir_owner_nodes,optimized_mir")] | 
 |     #[rustc_clean(cfg="cfail3")] | 
 |     #[rustc_clean(cfg="cfail5", except="opt_hir_owner_nodes,optimized_mir")] | 
 |     #[rustc_clean(cfg="cfail6")] | 
 |     pub fn change_method_parameter_name(&self, b: i64) { } | 
 | } | 
 |  | 
 |  | 
 |  | 
 | // Change Method Return Type --------------------------------------------------- | 
 | #[cfg(any(cfail1,cfail4))] | 
 | impl Foo { | 
 |     //------------------------------------------------------------------------------------ | 
 |     //-------------------------- | 
 |     //------------------------------------------------------------------------------------ | 
 |     //-------------------------- | 
 |     pub fn change_method_return_type(&self) -> u16 { 0 } | 
 | } | 
 |  | 
 | #[cfg(not(any(cfail1,cfail4)))] | 
 | #[rustc_clean(cfg="cfail2")] | 
 | #[rustc_clean(cfg="cfail3")] | 
 | #[rustc_clean(cfg="cfail5")] | 
 | #[rustc_clean(cfg="cfail6")] | 
 | impl Foo { | 
 |     #[rustc_clean(cfg="cfail2", except="opt_hir_owner_nodes,fn_sig,optimized_mir,typeck")] | 
 |     #[rustc_clean(cfg="cfail3")] | 
 |     #[rustc_clean(cfg="cfail5", except="opt_hir_owner_nodes,fn_sig,optimized_mir,typeck")] | 
 |     #[rustc_clean(cfg="cfail6")] | 
 |     pub fn change_method_return_type(&self) -> u32 { 0 } | 
 | } | 
 |  | 
 |  | 
 |  | 
 | // Make Method #[inline] ------------------------------------------------------- | 
 | #[cfg(any(cfail1,cfail4))] | 
 | impl Foo { | 
 |     //-------------------------- | 
 |     //-------------------------- | 
 |     //-------------------------- | 
 |     //-------------------------- | 
 |     //------- | 
 |     pub fn make_method_inline(&self) -> u8 { 0 } | 
 | } | 
 |  | 
 | #[cfg(not(any(cfail1,cfail4)))] | 
 | #[rustc_clean(cfg="cfail2")] | 
 | #[rustc_clean(cfg="cfail3")] | 
 | #[rustc_clean(cfg="cfail5")] | 
 | #[rustc_clean(cfg="cfail6")] | 
 | impl Foo { | 
 |     #[rustc_clean(cfg="cfail2")] | 
 |     #[rustc_clean(cfg="cfail3")] | 
 |     #[rustc_clean(cfg="cfail5")] | 
 |     #[rustc_clean(cfg="cfail6")] | 
 |     #[inline] | 
 |     pub fn make_method_inline(&self) -> u8 { 0 } | 
 | } | 
 |  | 
 |  | 
 |  | 
 | //  Change order of parameters ------------------------------------------------- | 
 | #[cfg(any(cfail1,cfail4))] | 
 | impl Foo { | 
 |     //---------------------------------------------------------------------- | 
 |     //-------------------------- | 
 |     //---------------------------------------------------------------------- | 
 |     //-------------------------- | 
 |     pub fn change_method_parameter_order(&self, a: i64, b: i64) { } | 
 | } | 
 |  | 
 | #[cfg(not(any(cfail1,cfail4)))] | 
 | #[rustc_clean(cfg="cfail2")] | 
 | #[rustc_clean(cfg="cfail3")] | 
 | #[rustc_clean(cfg="cfail5")] | 
 | #[rustc_clean(cfg="cfail6")] | 
 | impl Foo { | 
 |     #[rustc_clean(cfg="cfail2", except="opt_hir_owner_nodes,optimized_mir")] | 
 |     #[rustc_clean(cfg="cfail3")] | 
 |     #[rustc_clean(cfg="cfail5", except="opt_hir_owner_nodes,optimized_mir")] | 
 |     #[rustc_clean(cfg="cfail6")] | 
 |     pub fn change_method_parameter_order(&self, b: i64, a: i64) { } | 
 | } | 
 |  | 
 |  | 
 |  | 
 | // Make method unsafe ---------------------------------------------------------- | 
 | #[cfg(any(cfail1,cfail4))] | 
 | impl Foo { | 
 |     //---------------------------------------------------------------------- | 
 |     //-------------------------- | 
 |     //---------------------------------------------------------------------- | 
 |     //-------------------------- | 
 |     pub        fn make_method_unsafe(&self) { } | 
 | } | 
 |  | 
 | #[cfg(not(any(cfail1,cfail4)))] | 
 | #[rustc_clean(cfg="cfail2")] | 
 | #[rustc_clean(cfg="cfail3")] | 
 | #[rustc_clean(cfg="cfail5")] | 
 | #[rustc_clean(cfg="cfail6")] | 
 | impl Foo { | 
 |     #[rustc_clean(cfg="cfail2", except="opt_hir_owner_nodes,fn_sig,typeck")] | 
 |     #[rustc_clean(cfg="cfail3")] | 
 |     #[rustc_clean(cfg="cfail5", except="opt_hir_owner_nodes,fn_sig,typeck")] | 
 |     #[rustc_clean(cfg="cfail6")] | 
 |     pub unsafe fn make_method_unsafe(&self) { } | 
 | } | 
 |  | 
 |  | 
 |  | 
 | // Make method extern ---------------------------------------------------------- | 
 | #[cfg(any(cfail1,cfail4))] | 
 | impl Foo { | 
 |     //---------------------------------------------------------------------- | 
 |     //-------------------------- | 
 |     //---------------------------------------------------------------------- | 
 |     //-------------------------- | 
 |     pub            fn make_method_extern(&self) { } | 
 | } | 
 |  | 
 | #[cfg(not(any(cfail1,cfail4)))] | 
 | #[rustc_clean(cfg="cfail2")] | 
 | #[rustc_clean(cfg="cfail3")] | 
 | #[rustc_clean(cfg="cfail5")] | 
 | #[rustc_clean(cfg="cfail6")] | 
 | impl Foo { | 
 |     #[rustc_clean(cfg="cfail2", except="opt_hir_owner_nodes,fn_sig,typeck")] | 
 |     #[rustc_clean(cfg="cfail3")] | 
 |     #[rustc_clean(cfg="cfail5", except="opt_hir_owner_nodes,fn_sig,typeck")] | 
 |     #[rustc_clean(cfg="cfail6")] | 
 |     pub extern "C" fn make_method_extern(&self) { } | 
 | } | 
 |  | 
 |  | 
 |  | 
 | // Change method calling convention -------------------------------------------- | 
 | #[cfg(any(cfail1,cfail4))] | 
 | impl Foo { | 
 |     //---------------------------------------------------------------------- | 
 |     //-------------------------- | 
 |     //---------------------------------------------------------------------- | 
 |     //-------------------------- | 
 |     pub extern "C"      fn change_method_calling_convention(&self) { } | 
 | } | 
 |  | 
 | #[cfg(not(any(cfail1,cfail4)))] | 
 | #[rustc_clean(cfg="cfail2")] | 
 | #[rustc_clean(cfg="cfail3")] | 
 | #[rustc_clean(cfg="cfail5")] | 
 | #[rustc_clean(cfg="cfail6")] | 
 | impl Foo { | 
 |     #[rustc_clean(cfg="cfail2", except="opt_hir_owner_nodes,fn_sig,typeck")] | 
 |     #[rustc_clean(cfg="cfail3")] | 
 |     #[rustc_clean(cfg="cfail5", except="opt_hir_owner_nodes,fn_sig,typeck")] | 
 |     #[rustc_clean(cfg="cfail6")] | 
 |     pub extern "system" fn change_method_calling_convention(&self) { } | 
 | } | 
 |  | 
 |  | 
 |  | 
 | // Add Lifetime Parameter to Method -------------------------------------------- | 
 | #[cfg(any(cfail1,cfail4))] | 
 | impl Foo { | 
 |     // ----------------------------------------------------- | 
 |     // --------------------------------------------------------- | 
 |     // ---------------------------------------------------------- | 
 |     // ------------------------------------------------------- | 
 |     // ------------------------------------------------------- | 
 |     // -------------------------------------------------------- | 
 |     // ---------------------------------------------------------- | 
 |     // ----------------------------------------------------------- | 
 |     // ---------------------------------------------------------- | 
 |     // -------------------------------------------------------------- | 
 |     // ------------------------- | 
 |     // -------------------------------------------------------------------------- | 
 |     // ------------------------- | 
 |     pub fn add_lifetime_parameter_to_method    (&self) { } | 
 | } | 
 |  | 
 | #[cfg(not(any(cfail1,cfail4)))] | 
 | #[rustc_clean(cfg="cfail2")] | 
 | #[rustc_clean(cfg="cfail3")] | 
 | #[rustc_clean(cfg="cfail5")] | 
 | #[rustc_clean(cfg="cfail6")] | 
 | impl Foo { | 
 |     // Warning: Note that `typeck` are coming up clean here. | 
 |     // The addition or removal of lifetime parameters that don't | 
 |     // appear in the arguments or fn body in any way does not, in | 
 |     // fact, affect the `typeck` in any semantic way (at least | 
 |     // as of this writing). **However,** altering the order of | 
 |     // lowering **can** cause it appear to affect the `typeck`: | 
 |     // if we lower generics before the body, then the `HirId` for | 
 |     // things in the body will be affected. So if you start to see | 
 |     // `typeck` appear dirty, that might be the cause. -nmatsakis | 
 |     #[rustc_clean(cfg="cfail2", except="opt_hir_owner_nodes,fn_sig")] | 
 |     #[rustc_clean(cfg="cfail3")] | 
 |     #[rustc_clean(cfg="cfail5", except="opt_hir_owner_nodes,fn_sig,generics_of")] | 
 |     #[rustc_clean(cfg="cfail6")] | 
 |     pub fn add_lifetime_parameter_to_method<'a>(&self) { } | 
 | } | 
 |  | 
 |  | 
 |  | 
 | // Add Type Parameter To Method ------------------------------------------------ | 
 | #[cfg(any(cfail1,cfail4))] | 
 | impl Foo { | 
 |     // ----------------------------------------------------- | 
 |     // --------------------------------------------------------------- | 
 |     // ------------------------------------------------------------- | 
 |     // ----------------------------------------------------- | 
 |     // ------------------------------------------------------------- | 
 |     // --------------------------------------------------- | 
 |     // ------------------------------------------------------------ | 
 |     // ------------------------------------------------------ | 
 |     // ------------------------------------------------- | 
 |     // ----------- | 
 |     // -------------- | 
 |     // ---------------------------------------------------------------- | 
 |     // | 
 |     // ------------------------- | 
 |     // ----------- | 
 |     // -------------- | 
 |     // ---------------------------------------------------------------- | 
 |     // | 
 |     // ------------------------- | 
 |     pub fn add_type_parameter_to_method   (&self) { } | 
 | } | 
 |  | 
 | #[cfg(not(any(cfail1,cfail4)))] | 
 | #[rustc_clean(cfg="cfail2")] | 
 | #[rustc_clean(cfg="cfail3")] | 
 | #[rustc_clean(cfg="cfail5")] | 
 | #[rustc_clean(cfg="cfail6")] | 
 | impl Foo { | 
 |     // Warning: Note that `typeck` are coming up clean here. | 
 |     // The addition or removal of type parameters that don't appear in | 
 |     // the arguments or fn body in any way does not, in fact, affect | 
 |     // the `typeck` in any semantic way (at least as of this | 
 |     // writing). **However,** altering the order of lowering **can** | 
 |     // cause it appear to affect the `typeck`: if we lower | 
 |     // generics before the body, then the `HirId` for things in the | 
 |     // body will be affected. So if you start to see `typeck` | 
 |     // appear dirty, that might be the cause. -nmatsakis | 
 |     #[rustc_clean( | 
 |         cfg="cfail2", | 
 |         except="opt_hir_owner_nodes,generics_of,predicates_of,type_of", | 
 |     )] | 
 |     #[rustc_clean(cfg="cfail3")] | 
 |     #[rustc_clean( | 
 |         cfg="cfail5", | 
 |         except="opt_hir_owner_nodes,generics_of,predicates_of,type_of", | 
 |     )] | 
 |     #[rustc_clean(cfg="cfail6")] | 
 |     pub fn add_type_parameter_to_method<T>(&self) { } | 
 | } | 
 |  | 
 |  | 
 |  | 
 | // Add Lifetime Bound to Lifetime Parameter of Method -------------------------- | 
 | #[cfg(any(cfail1,cfail4))] | 
 | impl Foo { | 
 |     //------------ | 
 |     //--------------- | 
 |     //----------------------------------------------------------------------- | 
 |     // | 
 |     //-------------------------- | 
 |     //------------ | 
 |     //--------------- | 
 |     //----------------------------------------------------------------------- | 
 |     // | 
 |     //-------------------------- | 
 |     pub fn add_lifetime_bound_to_lifetime_param_of_method<'a, 'b    >(&self) { } | 
 | } | 
 |  | 
 | #[cfg(not(any(cfail1,cfail4)))] | 
 | #[rustc_clean(cfg="cfail2")] | 
 | #[rustc_clean(cfg="cfail3")] | 
 | #[rustc_clean(cfg="cfail5")] | 
 | #[rustc_clean(cfg="cfail6")] | 
 | impl Foo { | 
 |     #[rustc_clean( | 
 |         cfg="cfail2", | 
 |         except="opt_hir_owner_nodes,generics_of,predicates_of,type_of,fn_sig" | 
 |     )] | 
 |     #[rustc_clean(cfg="cfail3")] | 
 |     #[rustc_clean( | 
 |         cfg="cfail5", | 
 |         except="opt_hir_owner_nodes,generics_of,predicates_of,type_of,fn_sig" | 
 |     )] | 
 |     #[rustc_clean(cfg="cfail6")] | 
 |     pub fn add_lifetime_bound_to_lifetime_param_of_method<'a, 'b: 'a>(&self) { } | 
 | } | 
 |  | 
 |  | 
 |  | 
 | // Add Lifetime Bound to Type Parameter of Method ------------------------------ | 
 | #[cfg(any(cfail1,cfail4))] | 
 | impl Foo { | 
 |     // ----------------------------------------------------- | 
 |     // ---------------------------------------------------------- | 
 |     // ------------------------------------------------------------- | 
 |     // ------------------------------------------------- | 
 |     // ------------------------------------------------------------- | 
 |     // --------------------------------------------------- | 
 |     // ------------------------------------------------------------ | 
 |     // ------------------------------------------------------ | 
 |     // ------------------------------------------------- | 
 |     // ----------- | 
 |     // -------------- | 
 |     // ---------------------------------------------------------------------- | 
 |     // | 
 |     // ------------------------- | 
 |     // ----------- | 
 |     // -------------- | 
 |     // ---------------------------------------------------------------------- | 
 |     // | 
 |     // ------------------------- | 
 |     pub fn add_lifetime_bound_to_type_param_of_method<'a, T    >(&self) { } | 
 | } | 
 |  | 
 | #[cfg(not(any(cfail1,cfail4)))] | 
 | #[rustc_clean(cfg="cfail2")] | 
 | #[rustc_clean(cfg="cfail3")] | 
 | #[rustc_clean(cfg="cfail5")] | 
 | #[rustc_clean(cfg="cfail6")] | 
 | impl Foo { | 
 |     // Warning: Note that `typeck` are coming up clean here. | 
 |     // The addition or removal of bounds that don't appear in the | 
 |     // arguments or fn body in any way does not, in fact, affect the | 
 |     // `typeck` in any semantic way (at least as of this | 
 |     // writing). **However,** altering the order of lowering **can** | 
 |     // cause it appear to affect the `typeck`: if we lower | 
 |     // generics before the body, then the `HirId` for things in the | 
 |     // body will be affected. So if you start to see `typeck` | 
 |     // appear dirty, that might be the cause. -nmatsakis | 
 |     #[rustc_clean( | 
 |         cfg="cfail2", | 
 |         except="opt_hir_owner_nodes,generics_of,predicates_of,type_of,fn_sig" | 
 |     )] | 
 |     #[rustc_clean(cfg="cfail3")] | 
 |     #[rustc_clean( | 
 |         cfg="cfail5", | 
 |         except="opt_hir_owner_nodes,generics_of,predicates_of,type_of,fn_sig" | 
 |     )] | 
 |     #[rustc_clean(cfg="cfail6")] | 
 |     pub fn add_lifetime_bound_to_type_param_of_method<'a, T: 'a>(&self) { } | 
 | } | 
 |  | 
 |  | 
 |  | 
 | // Add Trait Bound to Type Parameter of Method ------------------------------ | 
 | #[cfg(any(cfail1,cfail4))] | 
 | impl Foo { | 
 |     // ----------------------------------------------------- | 
 |     // ---------------------------------------------------------- | 
 |     // ------------------------------------------------------------- | 
 |     // ------------------------------------------------- | 
 |     // ------------------------------------------------------------- | 
 |     // --------------------------------------------------- | 
 |     // ------------------------------------------------------------ | 
 |     // ------------------------------------------------------ | 
 |     // ------------------------------------------------- | 
 |     // --------------------------------------------------------------------- | 
 |     // ------------------------- | 
 |     // --------------------------------------------------------------------- | 
 |     // ------------------------- | 
 |     pub fn add_trait_bound_to_type_param_of_method<T       >(&self) { } | 
 | } | 
 |  | 
 | #[cfg(not(any(cfail1,cfail4)))] | 
 | #[rustc_clean(cfg="cfail2")] | 
 | #[rustc_clean(cfg="cfail3")] | 
 | #[rustc_clean(cfg="cfail5")] | 
 | #[rustc_clean(cfg="cfail6")] | 
 | impl Foo { | 
 |     // Warning: Note that `typeck` are coming up clean here. | 
 |     // The addition or removal of bounds that don't appear in the | 
 |     // arguments or fn body in any way does not, in fact, affect the | 
 |     // `typeck` in any semantic way (at least as of this | 
 |     // writing). **However,** altering the order of lowering **can** | 
 |     // cause it appear to affect the `typeck`: if we lower | 
 |     // generics before the body, then the `HirId` for things in the | 
 |     // body will be affected. So if you start to see `typeck` | 
 |     // appear dirty, that might be the cause. -nmatsakis | 
 |     #[rustc_clean(cfg="cfail2", except="opt_hir_owner_nodes,predicates_of")] | 
 |     #[rustc_clean(cfg="cfail3")] | 
 |     #[rustc_clean(cfg="cfail5", except="opt_hir_owner_nodes,predicates_of")] | 
 |     #[rustc_clean(cfg="cfail6")] | 
 |     pub fn add_trait_bound_to_type_param_of_method<T: Clone>(&self) { } | 
 | } | 
 |  | 
 |  | 
 |  | 
 | // Add #[no_mangle] to Method -------------------------------------------------- | 
 | #[cfg(any(cfail1,cfail4))] | 
 | impl Foo { | 
 |     //-------------------------- | 
 |     //-------------------------- | 
 |     //-------------------------- | 
 |     //-------------------------- | 
 |     //---------- | 
 |     pub fn add_no_mangle_to_method(&self) { } | 
 | } | 
 |  | 
 | #[cfg(not(any(cfail1,cfail4)))] | 
 | #[rustc_clean(cfg="cfail2")] | 
 | #[rustc_clean(cfg="cfail3")] | 
 | #[rustc_clean(cfg="cfail5")] | 
 | #[rustc_clean(cfg="cfail6")] | 
 | impl Foo { | 
 |     #[rustc_clean(cfg="cfail2")] | 
 |     #[rustc_clean(cfg="cfail3")] | 
 |     #[rustc_clean(cfg="cfail5")] | 
 |     #[rustc_clean(cfg="cfail6")] | 
 |     #[no_mangle] | 
 |     pub fn add_no_mangle_to_method(&self) { } | 
 | } | 
 |  | 
 |  | 
 |  | 
 | struct Bar<T>(T); | 
 |  | 
 | // Add Type Parameter To Impl -------------------------------------------------- | 
 | #[cfg(any(cfail1,cfail4))] | 
 | impl Bar<u32> { | 
 |     pub fn add_type_parameter_to_impl(&self) { } | 
 | } | 
 |  | 
 | #[cfg(not(any(cfail1,cfail4)))] | 
 | #[rustc_clean(cfg="cfail2", except="opt_hir_owner_nodes,generics_of")] | 
 | #[rustc_clean(cfg="cfail3")] | 
 | #[rustc_clean(cfg="cfail5", except="opt_hir_owner_nodes,generics_of")] | 
 | #[rustc_clean(cfg="cfail6")] | 
 | impl<T> Bar<T> { | 
 |     #[rustc_clean( | 
 |         cfg="cfail2", | 
 |         except="generics_of,fn_sig,typeck,type_of,optimized_mir" | 
 |     )] | 
 |     #[rustc_clean(cfg="cfail3")] | 
 |     #[rustc_clean( | 
 |         cfg="cfail5", | 
 |         except="generics_of,fn_sig,typeck,type_of,optimized_mir" | 
 |     )] | 
 |     #[rustc_clean(cfg="cfail6")] | 
 |     pub fn add_type_parameter_to_impl(&self) { } | 
 | } | 
 |  | 
 |  | 
 |  | 
 | // Change Self Type of Impl ---------------------------------------------------- | 
 | #[cfg(any(cfail1,cfail4))] | 
 | impl Bar<u32> { | 
 |     pub fn change_impl_self_type(&self) { } | 
 | } | 
 |  | 
 | #[cfg(not(any(cfail1,cfail4)))] | 
 | #[rustc_clean(cfg="cfail2", except="opt_hir_owner_nodes")] | 
 | #[rustc_clean(cfg="cfail3")] | 
 | #[rustc_clean(cfg="cfail5", except="opt_hir_owner_nodes")] | 
 | #[rustc_clean(cfg="cfail6")] | 
 | impl Bar<u64> { | 
 |     #[rustc_clean(cfg="cfail2", except="fn_sig,optimized_mir,typeck")] | 
 |     #[rustc_clean(cfg="cfail3")] | 
 |     #[rustc_clean(cfg="cfail5", except="fn_sig,optimized_mir,typeck")] | 
 |     #[rustc_clean(cfg="cfail6")] | 
 |     pub fn change_impl_self_type(&self) { } | 
 | } | 
 |  | 
 |  | 
 |  | 
 | // Add Lifetime Bound to Impl -------------------------------------------------- | 
 | #[cfg(any(cfail1,cfail4))] | 
 | impl<T> Bar<T> { | 
 |     pub fn add_lifetime_bound_to_impl_parameter(&self) { } | 
 | } | 
 |  | 
 | #[cfg(not(any(cfail1,cfail4)))] | 
 | #[rustc_clean(cfg="cfail2", except="opt_hir_owner_nodes")] | 
 | #[rustc_clean(cfg="cfail3")] | 
 | #[rustc_clean(cfg="cfail5", except="opt_hir_owner_nodes")] | 
 | #[rustc_clean(cfg="cfail6")] | 
 | impl<T: 'static> Bar<T> { | 
 |     #[rustc_clean(cfg="cfail2")] | 
 |     #[rustc_clean(cfg="cfail3")] | 
 |     #[rustc_clean(cfg="cfail5")] | 
 |     #[rustc_clean(cfg="cfail6")] | 
 |     pub fn add_lifetime_bound_to_impl_parameter(&self) { } | 
 | } | 
 |  | 
 |  | 
 |  | 
 | // Add Trait Bound to Impl Parameter ------------------------------------------- | 
 | #[cfg(any(cfail1,cfail4))] | 
 | impl<T> Bar<T> { | 
 |     pub fn add_trait_bound_to_impl_parameter(&self) { } | 
 | } | 
 |  | 
 | #[cfg(not(any(cfail1,cfail4)))] | 
 | #[rustc_clean(cfg="cfail2", except="opt_hir_owner_nodes")] | 
 | #[rustc_clean(cfg="cfail3")] | 
 | #[rustc_clean(cfg="cfail5", except="opt_hir_owner_nodes")] | 
 | #[rustc_clean(cfg="cfail6")] | 
 | impl<T: Clone> Bar<T> { | 
 |     #[rustc_clean(cfg="cfail2")] | 
 |     #[rustc_clean(cfg="cfail3")] | 
 |     #[rustc_clean(cfg="cfail5")] | 
 |     #[rustc_clean(cfg="cfail6")] | 
 |     pub fn add_trait_bound_to_impl_parameter(&self) { } | 
 | } | 
 |  | 
 |  | 
 | // Force instantiation of some fns so we can check their hash. | 
 | pub fn instantiation_root() { | 
 |     Foo::method_privacy(); | 
 |  | 
 |     #[cfg(any(cfail1,cfail4))] | 
 |     { | 
 |         Bar(0u32).change_impl_self_type(); | 
 |     } | 
 |  | 
 |     #[cfg(not(any(cfail1,cfail4)))] | 
 |     { | 
 |         Bar(0u64).change_impl_self_type(); | 
 |     } | 
 | } |