// 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", except="opt_hir_owner_nodes")]
#[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();
    }
}
