|  | // This test case tests the incremental compilation hash (ICH) implementation | 
|  | // for enum 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 enum 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 enum'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)] | 
|  | #![feature(stmt_expr_attributes)] | 
|  | #![crate_type="rlib"] | 
|  |  | 
|  |  | 
|  |  | 
|  | // Change enum visibility ----------------------------------------------------- | 
|  | #[cfg(any(cfail1,cfail4))] | 
|  | enum     EnumVisibility { A } | 
|  |  | 
|  | #[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")] | 
|  | pub enum EnumVisibility { A } | 
|  |  | 
|  |  | 
|  |  | 
|  | // Change name of a c-style variant ------------------------------------------- | 
|  | #[cfg(any(cfail1,cfail4))] | 
|  | enum EnumChangeNameCStyleVariant { | 
|  | Variant1, | 
|  | Variant2, | 
|  | } | 
|  |  | 
|  | #[cfg(not(any(cfail1,cfail4)))] | 
|  | #[rustc_clean(cfg="cfail2", except="opt_hir_owner_nodes,type_of")] | 
|  | #[rustc_clean(cfg="cfail3")] | 
|  | #[rustc_clean(cfg="cfail5", except="opt_hir_owner_nodes,type_of")] | 
|  | #[rustc_clean(cfg="cfail6")] | 
|  | enum EnumChangeNameCStyleVariant { | 
|  | Variant1, | 
|  | Variant2Changed, | 
|  | } | 
|  |  | 
|  |  | 
|  |  | 
|  | // Change name of a tuple-style variant --------------------------------------- | 
|  | #[cfg(any(cfail1,cfail4))] | 
|  | enum EnumChangeNameTupleStyleVariant { | 
|  | Variant1, | 
|  | Variant2(u32, f32), | 
|  | } | 
|  |  | 
|  | #[cfg(not(any(cfail1,cfail4)))] | 
|  | #[rustc_clean(cfg="cfail2", except="opt_hir_owner_nodes,type_of")] | 
|  | #[rustc_clean(cfg="cfail3")] | 
|  | #[rustc_clean(cfg="cfail5", except="opt_hir_owner_nodes,type_of")] | 
|  | #[rustc_clean(cfg="cfail6")] | 
|  | enum EnumChangeNameTupleStyleVariant { | 
|  | Variant1, | 
|  | Variant2Changed(u32, f32), | 
|  | } | 
|  |  | 
|  |  | 
|  |  | 
|  | // Change name of a struct-style variant -------------------------------------- | 
|  | #[cfg(any(cfail1,cfail4))] | 
|  | enum EnumChangeNameStructStyleVariant { | 
|  | Variant1, | 
|  | Variant2 { a: u32, b: f32 }, | 
|  | } | 
|  |  | 
|  | #[cfg(not(any(cfail1,cfail4)))] | 
|  | #[rustc_clean(cfg="cfail2", except="opt_hir_owner_nodes,type_of")] | 
|  | #[rustc_clean(cfg="cfail3")] | 
|  | #[rustc_clean(cfg="cfail5", except="opt_hir_owner_nodes,type_of")] | 
|  | #[rustc_clean(cfg="cfail6")] | 
|  | enum EnumChangeNameStructStyleVariant { | 
|  | Variant1, | 
|  | Variant2Changed { a: u32, b: f32 }, | 
|  | } | 
|  |  | 
|  |  | 
|  |  | 
|  | // Change the value of a c-style variant -------------------------------------- | 
|  | #[cfg(any(cfail1,cfail4))] | 
|  | enum EnumChangeValueCStyleVariant0 { | 
|  | Variant1, | 
|  | Variant2 = 11, | 
|  | } | 
|  |  | 
|  | #[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")] | 
|  | enum EnumChangeValueCStyleVariant0 { | 
|  | Variant1, | 
|  | Variant2 = 22, | 
|  | } | 
|  |  | 
|  | #[cfg(any(cfail1,cfail4))] | 
|  | enum EnumChangeValueCStyleVariant1 { | 
|  | Variant1, | 
|  | Variant2, | 
|  | } | 
|  |  | 
|  | #[cfg(not(any(cfail1,cfail4)))] | 
|  | #[rustc_clean(cfg="cfail2", except="opt_hir_owner_nodes,type_of")] | 
|  | #[rustc_clean(cfg="cfail3")] | 
|  | #[rustc_clean(cfg="cfail5", except="opt_hir_owner_nodes,type_of")] | 
|  | #[rustc_clean(cfg="cfail6")] | 
|  | enum EnumChangeValueCStyleVariant1 { | 
|  | Variant1, | 
|  | Variant2 = 11, | 
|  | } | 
|  |  | 
|  |  | 
|  |  | 
|  | // Add a c-style variant ------------------------------------------------------ | 
|  | #[cfg(any(cfail1,cfail4))] | 
|  | enum EnumAddCStyleVariant { | 
|  | Variant1, | 
|  | } | 
|  |  | 
|  | #[cfg(not(any(cfail1,cfail4)))] | 
|  | #[rustc_clean(cfg="cfail2", except="opt_hir_owner_nodes,type_of")] | 
|  | #[rustc_clean(cfg="cfail3")] | 
|  | #[rustc_clean(cfg="cfail5", except="opt_hir_owner_nodes,type_of")] | 
|  | #[rustc_clean(cfg="cfail6")] | 
|  | enum EnumAddCStyleVariant { | 
|  | Variant1, | 
|  | Variant2, | 
|  | } | 
|  |  | 
|  |  | 
|  |  | 
|  | // Remove a c-style variant --------------------------------------------------- | 
|  | #[cfg(any(cfail1,cfail4))] | 
|  | enum EnumRemoveCStyleVariant { | 
|  | Variant1, | 
|  | Variant2, | 
|  | } | 
|  |  | 
|  | #[cfg(not(any(cfail1,cfail4)))] | 
|  | #[rustc_clean(cfg="cfail2", except="opt_hir_owner_nodes,type_of")] | 
|  | #[rustc_clean(cfg="cfail3")] | 
|  | #[rustc_clean(cfg="cfail5", except="opt_hir_owner_nodes,type_of")] | 
|  | #[rustc_clean(cfg="cfail6")] | 
|  | enum EnumRemoveCStyleVariant { | 
|  | Variant1, | 
|  | } | 
|  |  | 
|  |  | 
|  |  | 
|  | // Add a tuple-style variant -------------------------------------------------- | 
|  | #[cfg(any(cfail1,cfail4))] | 
|  | enum EnumAddTupleStyleVariant { | 
|  | Variant1, | 
|  | } | 
|  |  | 
|  | #[cfg(not(any(cfail1,cfail4)))] | 
|  | #[rustc_clean(cfg="cfail2", except="opt_hir_owner_nodes,type_of")] | 
|  | #[rustc_clean(cfg="cfail3")] | 
|  | #[rustc_clean(cfg="cfail5", except="opt_hir_owner_nodes,type_of")] | 
|  | #[rustc_clean(cfg="cfail6")] | 
|  | enum EnumAddTupleStyleVariant { | 
|  | Variant1, | 
|  | Variant2(u32, f32), | 
|  | } | 
|  |  | 
|  |  | 
|  |  | 
|  | // Remove a tuple-style variant ----------------------------------------------- | 
|  | #[cfg(any(cfail1,cfail4))] | 
|  | enum EnumRemoveTupleStyleVariant { | 
|  | Variant1, | 
|  | Variant2(u32, f32), | 
|  | } | 
|  |  | 
|  | #[cfg(not(any(cfail1,cfail4)))] | 
|  | #[rustc_clean(cfg="cfail2", except="opt_hir_owner_nodes,type_of")] | 
|  | #[rustc_clean(cfg="cfail3")] | 
|  | #[rustc_clean(cfg="cfail5", except="opt_hir_owner_nodes,type_of")] | 
|  | #[rustc_clean(cfg="cfail6")] | 
|  | enum EnumRemoveTupleStyleVariant { | 
|  | Variant1, | 
|  | } | 
|  |  | 
|  |  | 
|  |  | 
|  | // Add a struct-style variant ------------------------------------------------- | 
|  | #[cfg(any(cfail1,cfail4))] | 
|  | enum EnumAddStructStyleVariant { | 
|  | Variant1, | 
|  | } | 
|  |  | 
|  | #[cfg(not(any(cfail1,cfail4)))] | 
|  | #[rustc_clean(cfg="cfail2", except="opt_hir_owner_nodes,type_of")] | 
|  | #[rustc_clean(cfg="cfail3")] | 
|  | #[rustc_clean(cfg="cfail5", except="opt_hir_owner_nodes,type_of")] | 
|  | #[rustc_clean(cfg="cfail6")] | 
|  | enum EnumAddStructStyleVariant { | 
|  | Variant1, | 
|  | Variant2 { a: u32, b: f32 }, | 
|  | } | 
|  |  | 
|  |  | 
|  |  | 
|  | // Remove a struct-style variant ---------------------------------------------- | 
|  | #[cfg(any(cfail1,cfail4))] | 
|  | enum EnumRemoveStructStyleVariant { | 
|  | Variant1, | 
|  | Variant2 { a: u32, b: f32 }, | 
|  | } | 
|  |  | 
|  | #[cfg(not(any(cfail1,cfail4)))] | 
|  | #[rustc_clean(cfg="cfail2", except="opt_hir_owner_nodes,type_of")] | 
|  | #[rustc_clean(cfg="cfail3")] | 
|  | #[rustc_clean(cfg="cfail5", except="opt_hir_owner_nodes,type_of")] | 
|  | #[rustc_clean(cfg="cfail6")] | 
|  | enum EnumRemoveStructStyleVariant { | 
|  | Variant1, | 
|  | } | 
|  |  | 
|  |  | 
|  |  | 
|  | // Change the type of a field in a tuple-style variant ------------------------ | 
|  | #[cfg(any(cfail1,cfail4))] | 
|  | enum EnumChangeFieldTypeTupleStyleVariant { | 
|  | Variant1(u32, u32), | 
|  | } | 
|  |  | 
|  | #[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")] | 
|  | enum EnumChangeFieldTypeTupleStyleVariant { | 
|  | Variant1(u32, | 
|  | u64), | 
|  | } | 
|  |  | 
|  |  | 
|  |  | 
|  | // Change the type of a field in a struct-style variant ----------------------- | 
|  | #[cfg(any(cfail1,cfail4))] | 
|  | enum EnumChangeFieldTypeStructStyleVariant { | 
|  | Variant1, | 
|  | Variant2 { a: u32, b: u32 }, | 
|  | } | 
|  |  | 
|  | #[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")] | 
|  | enum EnumChangeFieldTypeStructStyleVariant { | 
|  | Variant1, | 
|  | Variant2 { | 
|  | a: u32, | 
|  | b: u64 | 
|  | }, | 
|  | } | 
|  |  | 
|  |  | 
|  |  | 
|  | // Change the name of a field in a struct-style variant ----------------------- | 
|  | #[cfg(any(cfail1,cfail4))] | 
|  | enum EnumChangeFieldNameStructStyleVariant { | 
|  | Variant1 { a: u32, b: u32 }, | 
|  | } | 
|  |  | 
|  | #[cfg(not(any(cfail1,cfail4)))] | 
|  | #[rustc_clean(cfg="cfail2", except="opt_hir_owner_nodes,type_of")] | 
|  | #[rustc_clean(cfg="cfail3")] | 
|  | #[rustc_clean(cfg="cfail5", except="opt_hir_owner_nodes,type_of")] | 
|  | #[rustc_clean(cfg="cfail6")] | 
|  | enum EnumChangeFieldNameStructStyleVariant { | 
|  | Variant1 { a: u32, c: u32 }, | 
|  | } | 
|  |  | 
|  |  | 
|  |  | 
|  | // Change order of fields in a tuple-style variant ---------------------------- | 
|  | #[cfg(any(cfail1,cfail4))] | 
|  | enum EnumChangeOrderTupleStyleVariant { | 
|  | Variant1(u32, u64), | 
|  | } | 
|  |  | 
|  | #[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")] | 
|  | enum EnumChangeOrderTupleStyleVariant { | 
|  | Variant1( | 
|  | u64, | 
|  | u32), | 
|  | } | 
|  |  | 
|  |  | 
|  |  | 
|  | // Change order of fields in a struct-style variant --------------------------- | 
|  | #[cfg(any(cfail1,cfail4))] | 
|  | enum EnumChangeFieldOrderStructStyleVariant { | 
|  | Variant1 { a: u32, b: f32 }, | 
|  | } | 
|  |  | 
|  | #[cfg(not(any(cfail1,cfail4)))] | 
|  | #[rustc_clean(cfg="cfail2", except="opt_hir_owner_nodes,type_of")] | 
|  | #[rustc_clean(cfg="cfail3")] | 
|  | #[rustc_clean(cfg="cfail5", except="opt_hir_owner_nodes,type_of")] | 
|  | #[rustc_clean(cfg="cfail6")] | 
|  | enum EnumChangeFieldOrderStructStyleVariant { | 
|  | Variant1 { b: f32, a: u32 }, | 
|  | } | 
|  |  | 
|  |  | 
|  |  | 
|  | // Add a field to a tuple-style variant --------------------------------------- | 
|  | #[cfg(any(cfail1,cfail4))] | 
|  | enum EnumAddFieldTupleStyleVariant { | 
|  | Variant1(u32, u32), | 
|  | } | 
|  |  | 
|  | #[cfg(not(any(cfail1,cfail4)))] | 
|  | #[rustc_clean(cfg="cfail2", except="opt_hir_owner_nodes,type_of")] | 
|  | #[rustc_clean(cfg="cfail3")] | 
|  | #[rustc_clean(cfg="cfail5", except="opt_hir_owner_nodes,type_of")] | 
|  | #[rustc_clean(cfg="cfail6")] | 
|  | enum EnumAddFieldTupleStyleVariant { | 
|  | Variant1(u32, u32, u32), | 
|  | } | 
|  |  | 
|  |  | 
|  |  | 
|  | // Add a field to a struct-style variant -------------------------------------- | 
|  | #[cfg(any(cfail1,cfail4))] | 
|  | enum EnumAddFieldStructStyleVariant { | 
|  | Variant1 { a: u32, b: u32 }, | 
|  | } | 
|  |  | 
|  | #[cfg(not(any(cfail1,cfail4)))] | 
|  | #[rustc_clean(cfg="cfail2", except="opt_hir_owner_nodes,type_of")] | 
|  | #[rustc_clean(cfg="cfail3")] | 
|  | #[rustc_clean(cfg="cfail5", except="opt_hir_owner_nodes,type_of")] | 
|  | #[rustc_clean(cfg="cfail6")] | 
|  | enum EnumAddFieldStructStyleVariant { | 
|  | Variant1 { a: u32, b: u32, c: u32 }, | 
|  | } | 
|  |  | 
|  |  | 
|  |  | 
|  | // Add #[must_use] to the enum ------------------------------------------------ | 
|  | #[cfg(any(cfail1,cfail4))] | 
|  | enum EnumAddMustUse { | 
|  | Variant1, | 
|  | Variant2, | 
|  | } | 
|  |  | 
|  | #[cfg(not(any(cfail1,cfail4)))] | 
|  | #[rustc_clean(cfg="cfail2")] | 
|  | #[rustc_clean(cfg="cfail3")] | 
|  | #[rustc_clean(cfg="cfail5")] | 
|  | #[rustc_clean(cfg="cfail6")] | 
|  | #[must_use] | 
|  | enum EnumAddMustUse { | 
|  | Variant1, | 
|  | Variant2, | 
|  | } | 
|  |  | 
|  |  | 
|  |  | 
|  | // Add #[repr(C)] to the enum ------------------------------------------------- | 
|  | #[cfg(any(cfail1,cfail4))] | 
|  | enum EnumAddReprC { | 
|  | Variant1, | 
|  | Variant2, | 
|  | } | 
|  |  | 
|  | #[cfg(not(any(cfail1,cfail4)))] | 
|  | #[rustc_clean(cfg="cfail2", except="type_of")] | 
|  | #[rustc_clean(cfg="cfail3")] | 
|  | #[rustc_clean(cfg="cfail5", except="type_of")] | 
|  | #[rustc_clean(cfg="cfail6")] | 
|  | #[repr(C)] | 
|  | enum EnumAddReprC { | 
|  | Variant1, | 
|  | Variant2, | 
|  | } | 
|  |  | 
|  |  | 
|  |  | 
|  | // Change the name of a type parameter ---------------------------------------- | 
|  | #[cfg(any(cfail1,cfail4))] | 
|  | enum EnumChangeNameOfTypeParameter<S> { | 
|  | Variant1(S), | 
|  | } | 
|  |  | 
|  | #[cfg(not(any(cfail1,cfail4)))] | 
|  | #[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")] | 
|  | enum EnumChangeNameOfTypeParameter<T> { | 
|  | Variant1(T), | 
|  | } | 
|  |  | 
|  |  | 
|  |  | 
|  | // Add a type parameter ------------------------------------------------------ | 
|  | #[cfg(any(cfail1,cfail4))] | 
|  | enum EnumAddTypeParameter<S> { | 
|  | Variant1(S), | 
|  | Variant2(S), | 
|  | } | 
|  |  | 
|  | #[cfg(not(any(cfail1,cfail4)))] | 
|  | #[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")] | 
|  | enum EnumAddTypeParameter<S, T> { | 
|  | Variant1(S), | 
|  | Variant2(T), | 
|  | } | 
|  |  | 
|  |  | 
|  |  | 
|  | // Change the name of a lifetime parameter ------------------------------------ | 
|  | #[cfg(any(cfail1,cfail4))] | 
|  | enum EnumChangeNameOfLifetimeParameter<'a> { | 
|  | Variant1(&'a u32), | 
|  | } | 
|  |  | 
|  | #[cfg(not(any(cfail1,cfail4)))] | 
|  | #[rustc_clean(cfg="cfail2", except="opt_hir_owner_nodes,generics_of,type_of")] | 
|  | #[rustc_clean(cfg="cfail3")] | 
|  | #[rustc_clean(cfg="cfail5", except="opt_hir_owner_nodes,generics_of,type_of")] | 
|  | #[rustc_clean(cfg="cfail6")] | 
|  | enum EnumChangeNameOfLifetimeParameter<'b> { | 
|  | Variant1(&'b u32), | 
|  | } | 
|  |  | 
|  |  | 
|  |  | 
|  | // Add a lifetime parameter --------------------------------------------------- | 
|  | #[cfg(any(cfail1,cfail4))] | 
|  | enum EnumAddLifetimeParameter<'a> { | 
|  | Variant1(&'a u32), | 
|  | Variant2(&'a u32), | 
|  | } | 
|  |  | 
|  | #[cfg(not(any(cfail1,cfail4)))] | 
|  | #[rustc_clean(cfg="cfail2", except="opt_hir_owner_nodes,generics_of,type_of")] | 
|  | #[rustc_clean(cfg="cfail3")] | 
|  | #[rustc_clean(cfg="cfail5", except="opt_hir_owner_nodes,generics_of,type_of")] | 
|  | #[rustc_clean(cfg="cfail6")] | 
|  | enum EnumAddLifetimeParameter<'a, 'b> { | 
|  | Variant1(&'a u32), | 
|  | Variant2(&'b u32), | 
|  | } | 
|  |  | 
|  |  | 
|  |  | 
|  | // Add a lifetime bound to a lifetime parameter ------------------------------- | 
|  | #[cfg(any(cfail1,cfail4))] | 
|  | enum EnumAddLifetimeParameterBound<'a, 'b> { | 
|  | Variant1(&'a u32), | 
|  | Variant2(&'b u32), | 
|  | } | 
|  |  | 
|  | #[cfg(not(any(cfail1,cfail4)))] | 
|  | #[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")] | 
|  | enum EnumAddLifetimeParameterBound<'a, 'b: 'a> { | 
|  | Variant1(&'a u32), | 
|  | Variant2(&'b u32), | 
|  | } | 
|  |  | 
|  | // Add a lifetime bound to a type parameter ----------------------------------- | 
|  | #[cfg(any(cfail1,cfail4))] | 
|  | enum EnumAddLifetimeBoundToParameter<'a, T> { | 
|  | Variant1(T), | 
|  | Variant2(&'a u32), | 
|  | } | 
|  |  | 
|  | #[cfg(not(any(cfail1,cfail4)))] | 
|  | #[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")] | 
|  | enum EnumAddLifetimeBoundToParameter<'a, T: 'a> { | 
|  | Variant1(T), | 
|  | Variant2(&'a u32), | 
|  | } | 
|  |  | 
|  |  | 
|  |  | 
|  | // Add a trait bound to a type parameter -------------------------------------- | 
|  | #[cfg(any(cfail1,cfail4))] | 
|  | enum EnumAddTraitBound<S> { | 
|  | Variant1(S), | 
|  | } | 
|  |  | 
|  | #[cfg(not(any(cfail1,cfail4)))] | 
|  | #[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")] | 
|  | enum EnumAddTraitBound<T: Sync> { | 
|  | Variant1(T), | 
|  | } | 
|  |  | 
|  |  | 
|  |  | 
|  | // Add a lifetime bound to a lifetime parameter in where clause --------------- | 
|  | #[cfg(any(cfail1,cfail4))] | 
|  | enum EnumAddLifetimeParameterBoundWhere<'a, 'b> { | 
|  | Variant1(&'a u32), | 
|  | Variant2(&'b u32), | 
|  | } | 
|  |  | 
|  | #[cfg(not(any(cfail1,cfail4)))] | 
|  | #[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")] | 
|  | enum EnumAddLifetimeParameterBoundWhere<'a, 'b> where 'b: 'a { | 
|  | Variant1(&'a u32), | 
|  | Variant2(&'b u32), | 
|  | } | 
|  |  | 
|  |  | 
|  |  | 
|  | // Add a lifetime bound to a type parameter in where clause ------------------- | 
|  | #[cfg(any(cfail1,cfail4))] | 
|  | enum EnumAddLifetimeBoundToParameterWhere<'a, T> { | 
|  | Variant1(T), | 
|  | Variant2(&'a u32), | 
|  | } | 
|  |  | 
|  | #[cfg(not(any(cfail1,cfail4)))] | 
|  | #[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")] | 
|  | enum EnumAddLifetimeBoundToParameterWhere<'a, T> where T: 'a { | 
|  | Variant1(T), | 
|  | Variant2(&'a u32), | 
|  | } | 
|  |  | 
|  |  | 
|  |  | 
|  | // Add a trait bound to a type parameter in where clause ---------------------- | 
|  | #[cfg(any(cfail1,cfail4))] | 
|  | enum EnumAddTraitBoundWhere<S> { | 
|  | Variant1(S), | 
|  | } | 
|  |  | 
|  | #[cfg(not(any(cfail1,cfail4)))] | 
|  | #[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")] | 
|  | enum EnumAddTraitBoundWhere<T> where T: Sync { | 
|  | Variant1(T), | 
|  | } | 
|  |  | 
|  |  | 
|  |  | 
|  | // In an enum with two variants, swap usage of type parameters ---------------- | 
|  | #[cfg(any(cfail1,cfail4))] | 
|  | enum EnumSwapUsageTypeParameters<A, B> { | 
|  | Variant1 { a: A }, | 
|  | Variant2 { a: B }, | 
|  | } | 
|  |  | 
|  | #[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")] | 
|  | enum EnumSwapUsageTypeParameters<A, B> { | 
|  | Variant1 { | 
|  | a: B | 
|  | }, | 
|  | Variant2 { | 
|  | a: A | 
|  | }, | 
|  | } | 
|  |  | 
|  |  | 
|  |  | 
|  | // In an enum with two variants, swap usage of lifetime parameters ------------ | 
|  | #[cfg(any(cfail1,cfail4))] | 
|  | enum EnumSwapUsageLifetimeParameters<'a, 'b> { | 
|  | Variant1 { a: &'a u32 }, | 
|  | Variant2 { b: &'b u32 }, | 
|  | } | 
|  |  | 
|  | #[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")] | 
|  | enum EnumSwapUsageLifetimeParameters<'a, 'b> { | 
|  | Variant1 { | 
|  | a: &'b u32 | 
|  | }, | 
|  | Variant2 { | 
|  | b: &'a u32 | 
|  | }, | 
|  | } | 
|  |  | 
|  |  | 
|  |  | 
|  | struct ReferencedType1; | 
|  | struct ReferencedType2; | 
|  |  | 
|  |  | 
|  |  | 
|  | // Change field type in tuple-style variant indirectly by modifying a use statement | 
|  | mod change_field_type_indirectly_tuple_style { | 
|  | #[cfg(any(cfail1,cfail4))] | 
|  | use super::ReferencedType1 as FieldType; | 
|  | #[cfg(not(any(cfail1,cfail4)))] | 
|  | use super::ReferencedType2 as FieldType; | 
|  |  | 
|  | #[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")] | 
|  | enum TupleStyle { | 
|  | Variant1( | 
|  | FieldType | 
|  | ) | 
|  | } | 
|  | } | 
|  |  | 
|  |  | 
|  |  | 
|  | // Change field type in record-style variant indirectly by modifying a use statement | 
|  | mod change_field_type_indirectly_struct_style { | 
|  | #[cfg(any(cfail1,cfail4))] | 
|  | use super::ReferencedType1 as FieldType; | 
|  | #[cfg(not(any(cfail1,cfail4)))] | 
|  | use super::ReferencedType2 as FieldType; | 
|  |  | 
|  | #[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")] | 
|  | enum StructStyle { | 
|  | Variant1 { | 
|  | a: FieldType | 
|  | } | 
|  | } | 
|  | } | 
|  |  | 
|  |  | 
|  |  | 
|  | trait ReferencedTrait1 {} | 
|  | trait ReferencedTrait2 {} | 
|  |  | 
|  |  | 
|  |  | 
|  | // Change trait bound of type parameter indirectly by modifying a use statement | 
|  | mod change_trait_bound_indirectly { | 
|  | #[cfg(any(cfail1,cfail4))] | 
|  | use super::ReferencedTrait1 as Trait; | 
|  | #[cfg(not(any(cfail1,cfail4)))] | 
|  | use super::ReferencedTrait2 as Trait; | 
|  |  | 
|  | #[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")] | 
|  | enum Enum<T: Trait> { | 
|  | Variant1(T) | 
|  | } | 
|  | } | 
|  |  | 
|  |  | 
|  |  | 
|  | // Change trait bound of type parameter in where clause indirectly by modifying a use statement | 
|  | mod change_trait_bound_indirectly_where { | 
|  | #[cfg(any(cfail1,cfail4))] | 
|  | use super::ReferencedTrait1 as Trait; | 
|  | #[cfg(not(any(cfail1,cfail4)))] | 
|  | use super::ReferencedTrait2 as Trait; | 
|  |  | 
|  | #[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")] | 
|  | enum Enum<T> where T: Trait { | 
|  | Variant1(T) | 
|  | } | 
|  | } |