@@ -66,7 +66,7 @@ pub(crate) enum PatternSource {
6666} 
6767
6868#[ derive( Copy ,  Clone ,  Debug ,  PartialEq ,  Eq ) ]  
69- enum  IsRepeatExpr  { 
69+ pub ( crate )   enum  IsRepeatExpr  { 
7070    No , 
7171    Yes , 
7272} 
@@ -76,13 +76,28 @@ struct IsNeverPattern;
7676/// Describes whether an `AnonConst` is a type level const arg or 
7777/// some other form of anon const (i.e. inline consts or enum discriminants) 
7878#[ derive( Copy ,  Clone ,  Debug ,  PartialEq ,  Eq ) ]  
79- enum  AnonConstKind  { 
79+ pub ( crate )   enum  AnonConstKind  { 
8080    EnumDiscriminant , 
8181    FieldDefaultValue , 
8282    InlineConst , 
8383    ConstArg ( IsRepeatExpr ) , 
8484} 
8585
86+ impl  IntoDiagArg  for  AnonConstKind  { 
87+     fn  into_diag_arg ( self ,  _:  & mut  Option < std:: path:: PathBuf > )  -> DiagArgValue  { 
88+         DiagArgValue :: Str ( Cow :: Borrowed ( match  self  { 
89+             AnonConstKind :: EnumDiscriminant  => "enum discriminant" , 
90+             AnonConstKind :: FieldDefaultValue  => "field default value" , 
91+             AnonConstKind :: InlineConst  => "inline const" , 
92+             AnonConstKind :: ConstArg ( is_repeat_expr)  => match  is_repeat_expr { 
93+                     IsRepeatExpr :: No  => "array repeat expression" , 
94+                     IsRepeatExpr :: Yes  => "const generic args" , 
95+                 } 
96+             } , 
97+         ) ) 
98+     } 
99+ } 
100+ 
86101impl  PatternSource  { 
87102    fn  descr ( self )  -> & ' static  str  { 
88103        match  self  { 
@@ -209,7 +224,7 @@ pub(crate) enum RibKind<'ra> {
209224/// 
210225/// The item may reference generic parameters in trivial constant expressions. 
211226/// All other constants aren't allowed to use generic params at all. 
212- ConstantItem ( ConstantHasGenerics ,  Option < ( Ident ,  ConstantItemKind ) > ) , 
227+ ConstantItem ( ConstantHasGenerics ,  Option < ( Ident ,  ConstantItemKind ) > ,   Option < AnonConstKind > ) , 
213228
214229    /// We passed through a module. 
215230Module ( Module < ' ra > ) , 
@@ -3017,19 +3032,21 @@ impl<'a, 'ast, 'ra, 'tcx> LateResolutionVisitor<'a, 'ast, 'ra, 'tcx> {
30173032        & mut  self , 
30183033        is_repeat :  IsRepeatExpr , 
30193034        may_use_generics :  ConstantHasGenerics , 
3035+         anon_const_kind :  Option < AnonConstKind > , 
30203036        item :  Option < ( Ident ,  ConstantItemKind ) > , 
30213037        f :  impl  FnOnce ( & mut  Self ) , 
30223038    )  { 
30233039        let  f = |this :  & mut  Self | { 
3024-             this. with_rib ( ValueNS ,  RibKind :: ConstantItem ( may_use_generics,  item) ,  |this| { 
3040+             this. with_rib ( ValueNS ,  RibKind :: ConstantItem ( may_use_generics,  item,  anon_const_kind ) ,  |this| { 
30253041                this. with_rib ( 
30263042                    TypeNS , 
30273043                    RibKind :: ConstantItem ( 
30283044                        may_use_generics. force_yes_if ( is_repeat == IsRepeatExpr :: Yes ) , 
30293045                        item, 
3046+                         anon_const_kind, 
30303047                    ) , 
30313048                    |this| { 
3032-                         this. with_label_rib ( RibKind :: ConstantItem ( may_use_generics,  item) ,  f) ; 
3049+                         this. with_label_rib ( RibKind :: ConstantItem ( may_use_generics,  item,  anon_const_kind ) ,  f) ; 
30333050                    } , 
30343051                ) 
30353052            } ) 
@@ -3548,7 +3565,7 @@ impl<'a, 'ast, 'ra, 'tcx> LateResolutionVisitor<'a, 'ast, 'ra, 'tcx> {
35483565
35493566    fn  resolve_const_body ( & mut  self ,  expr :  & ' ast  Expr ,  item :  Option < ( Ident ,  ConstantItemKind ) > )  { 
35503567        self . with_lifetime_rib ( LifetimeRibKind :: Elided ( LifetimeRes :: Infer ) ,  |this| { 
3551-             this. with_constant_rib ( IsRepeatExpr :: No ,  ConstantHasGenerics :: Yes ,  item,  |this| { 
3568+             this. with_constant_rib ( IsRepeatExpr :: No ,  ConstantHasGenerics :: Yes ,  None ,   item,  |this| { 
35523569                this. visit_expr ( expr) 
35533570            } ) ; 
35543571        } ) 
@@ -4757,7 +4774,7 @@ impl<'a, 'ast, 'ra, 'tcx> LateResolutionVisitor<'a, 'ast, 'ra, 'tcx> {
47574774            } 
47584775        } ; 
47594776
4760-         self . with_constant_rib ( is_repeat_expr,  may_use_generics,  None ,  |this| { 
4777+         self . with_constant_rib ( is_repeat_expr,  may_use_generics,  Some ( anon_const_kind ) ,   None ,  |this| { 
47614778            this. with_lifetime_rib ( LifetimeRibKind :: Elided ( LifetimeRes :: Infer ) ,  |this| { 
47624779                resolve_expr ( this) ; 
47634780            } ) ; 
0 commit comments