@@ -572,12 +572,13 @@ pub struct Generics<'hir> {
572572}
573573
574574impl < ' hir > Generics < ' hir > {
575- pub const fn empty ( ) -> Generics < ' hir > {
576- Generics {
575+ pub const fn empty ( ) -> & ' hir Generics < ' hir > {
576+ const NOPE : Generics < ' _ > = Generics {
577577 params : & [ ] ,
578578 where_clause : WhereClause { predicates : & [ ] , span : DUMMY_SP } ,
579579 span : DUMMY_SP ,
580- }
580+ } ;
581+ & NOPE
581582 }
582583
583584 pub fn get_named ( & self , name : Symbol ) -> Option < & GenericParam < ' _ > > {
@@ -2075,7 +2076,7 @@ impl TraitItemId {
20752076pub struct TraitItem < ' hir > {
20762077 pub ident : Ident ,
20772078 pub def_id : LocalDefId ,
2078- pub generics : Generics < ' hir > ,
2079+ pub generics : & ' hir Generics < ' hir > ,
20792080 pub kind : TraitItemKind < ' hir > ,
20802081 pub span : Span ,
20812082}
@@ -2135,7 +2136,7 @@ impl ImplItemId {
21352136pub struct ImplItem < ' hir > {
21362137 pub ident : Ident ,
21372138 pub def_id : LocalDefId ,
2138- pub generics : Generics < ' hir > ,
2139+ pub generics : & ' hir Generics < ' hir > ,
21392140 pub kind : ImplItemKind < ' hir > ,
21402141 pub span : Span ,
21412142 pub vis_span : Span ,
@@ -2340,7 +2341,7 @@ pub struct BareFnTy<'hir> {
23402341
23412342#[ derive( Debug , HashStable_Generic ) ]
23422343pub struct OpaqueTy < ' hir > {
2343- pub generics : Generics < ' hir > ,
2344+ pub generics : & ' hir Generics < ' hir > ,
23442345 pub bounds : GenericBounds < ' hir > ,
23452346 pub origin : OpaqueTyOrigin ,
23462347}
@@ -2814,7 +2815,7 @@ pub enum ItemKind<'hir> {
28142815 /// A `const` item.
28152816 Const ( & ' hir Ty < ' hir > , BodyId ) ,
28162817 /// A function declaration.
2817- Fn ( FnSig < ' hir > , Generics < ' hir > , BodyId ) ,
2818+ Fn ( FnSig < ' hir > , & ' hir Generics < ' hir > , BodyId ) ,
28182819 /// A MBE macro definition (`macro_rules!` or `macro`).
28192820 Macro ( ast:: MacroDef , MacroKind ) ,
28202821 /// A module.
@@ -2824,22 +2825,22 @@ pub enum ItemKind<'hir> {
28242825 /// Module-level inline assembly (from `global_asm!`).
28252826 GlobalAsm ( & ' hir InlineAsm < ' hir > ) ,
28262827 /// A type alias, e.g., `type Foo = Bar<u8>`.
2827- TyAlias ( & ' hir Ty < ' hir > , Generics < ' hir > ) ,
2828+ TyAlias ( & ' hir Ty < ' hir > , & ' hir Generics < ' hir > ) ,
28282829 /// An opaque `impl Trait` type alias, e.g., `type Foo = impl Bar;`.
28292830 OpaqueTy ( OpaqueTy < ' hir > ) ,
28302831 /// An enum definition, e.g., `enum Foo<A, B> {C<A>, D<B>}`.
2831- Enum ( EnumDef < ' hir > , Generics < ' hir > ) ,
2832+ Enum ( EnumDef < ' hir > , & ' hir Generics < ' hir > ) ,
28322833 /// A struct definition, e.g., `struct Foo<A> {x: A}`.
2833- Struct ( VariantData < ' hir > , Generics < ' hir > ) ,
2834+ Struct ( VariantData < ' hir > , & ' hir Generics < ' hir > ) ,
28342835 /// A union definition, e.g., `union Foo<A, B> {x: A, y: B}`.
2835- Union ( VariantData < ' hir > , Generics < ' hir > ) ,
2836+ Union ( VariantData < ' hir > , & ' hir Generics < ' hir > ) ,
28362837 /// A trait definition.
2837- Trait ( IsAuto , Unsafety , Generics < ' hir > , GenericBounds < ' hir > , & ' hir [ TraitItemRef ] ) ,
2838+ Trait ( IsAuto , Unsafety , & ' hir Generics < ' hir > , GenericBounds < ' hir > , & ' hir [ TraitItemRef ] ) ,
28382839 /// A trait alias.
2839- TraitAlias ( Generics < ' hir > , GenericBounds < ' hir > ) ,
2840+ TraitAlias ( & ' hir Generics < ' hir > , GenericBounds < ' hir > ) ,
28402841
28412842 /// An implementation, e.g., `impl<A> Trait for Foo { .. }`.
2842- Impl ( Impl < ' hir > ) ,
2843+ Impl ( & ' hir Impl < ' hir > ) ,
28432844}
28442845
28452846#[ derive( Debug , HashStable_Generic ) ]
@@ -2851,7 +2852,7 @@ pub struct Impl<'hir> {
28512852 // decoding as `Span`s cannot be decoded when a `Session` is not available.
28522853 pub defaultness_span : Option < Span > ,
28532854 pub constness : Constness ,
2854- pub generics : Generics < ' hir > ,
2855+ pub generics : & ' hir Generics < ' hir > ,
28552856
28562857 /// The trait being implemented, if any.
28572858 pub of_trait : Option < TraitRef < ' hir > > ,
@@ -2993,7 +2994,7 @@ impl ForeignItem<'_> {
29932994#[ derive( Debug , HashStable_Generic ) ]
29942995pub enum ForeignItemKind < ' hir > {
29952996 /// A foreign function.
2996- Fn ( & ' hir FnDecl < ' hir > , & ' hir [ Ident ] , Generics < ' hir > ) ,
2997+ Fn ( & ' hir FnDecl < ' hir > , & ' hir [ Ident ] , & ' hir Generics < ' hir > ) ,
29972998 /// A foreign static item (`static ext: u8`).
29982999 Static ( & ' hir Ty < ' hir > , Mutability ) ,
29993000 /// A foreign type.
@@ -3326,9 +3327,11 @@ mod size_asserts {
33263327 rustc_data_structures:: static_assert_size!( super :: QPath <' static >, 24 ) ;
33273328 rustc_data_structures:: static_assert_size!( super :: Ty <' static >, 72 ) ;
33283329 rustc_data_structures:: static_assert_size!( super :: GenericBound <' _>, 48 ) ;
3330+ rustc_data_structures:: static_assert_size!( super :: Generics <' static >, 48 ) ;
3331+ rustc_data_structures:: static_assert_size!( super :: Impl <' static >, 80 ) ;
33293332
3330- rustc_data_structures:: static_assert_size!( super :: Item <' static >, 160 ) ;
3331- rustc_data_structures:: static_assert_size!( super :: TraitItem <' static >, 128 ) ;
3332- rustc_data_structures:: static_assert_size!( super :: ImplItem <' static >, 120 ) ;
3333- rustc_data_structures:: static_assert_size!( super :: ForeignItem <' static >, 112 ) ;
3333+ rustc_data_structures:: static_assert_size!( super :: Item <' static >, 80 ) ;
3334+ rustc_data_structures:: static_assert_size!( super :: TraitItem <' static >, 88 ) ;
3335+ rustc_data_structures:: static_assert_size!( super :: ImplItem <' static >, 80 ) ;
3336+ rustc_data_structures:: static_assert_size!( super :: ForeignItem <' static >, 72 ) ;
33343337}
0 commit comments