@@ -109,6 +109,14 @@ pub(crate) enum HasGenericParams {
109
109
No ,
110
110
}
111
111
112
+ /// Is this a `static` or `const` item?
113
+ #[ derive( Copy , Clone , Debug ) ]
114
+ pub ( crate ) enum IsStaticOrConst {
115
+ No ,
116
+ Static ,
117
+ Const ,
118
+ }
119
+
112
120
/// May this constant have generics?
113
121
#[ derive( Copy , Clone , Debug , Eq , PartialEq ) ]
114
122
pub ( crate ) enum ConstantHasGenerics {
@@ -181,7 +189,8 @@ pub(crate) enum RibKind<'a> {
181
189
FnOrCoroutine ,
182
190
183
191
/// We passed through an item scope. Disallow upvars.
184
- Item ( HasGenericParams ) ,
192
+ /// Note if this is a static/const to help with some confusing diagnostics
193
+ Item ( HasGenericParams , IsStaticOrConst ) ,
185
194
186
195
/// We're in a constant item. Can't refer to dynamic stuff.
187
196
///
@@ -221,7 +230,7 @@ impl RibKind<'_> {
221
230
| RibKind :: MacroDefinition ( _)
222
231
| RibKind :: ConstParamTy
223
232
| RibKind :: InlineAsmSym => false ,
224
- RibKind :: AssocItem | RibKind :: Item ( _ ) | RibKind :: ForwardGenericParamBan => true ,
233
+ RibKind :: AssocItem | RibKind :: Item ( .. ) | RibKind :: ForwardGenericParamBan => true ,
225
234
}
226
235
}
227
236
@@ -870,7 +879,7 @@ impl<'a: 'ast, 'ast, 'tcx> Visitor<'ast> for LateResolutionVisitor<'a, '_, 'ast,
870
879
ForeignItemKind :: TyAlias ( box TyAlias { ref generics, .. } ) => {
871
880
self . with_generic_param_rib (
872
881
& generics. params ,
873
- RibKind :: Item ( HasGenericParams :: Yes ( generics. span ) ) ,
882
+ RibKind :: Item ( HasGenericParams :: Yes ( generics. span ) , IsStaticOrConst :: No ) ,
874
883
LifetimeRibKind :: Generics {
875
884
binder : foreign_item. id ,
876
885
kind : LifetimeBinderKind :: Item ,
@@ -882,7 +891,7 @@ impl<'a: 'ast, 'ast, 'tcx> Visitor<'ast> for LateResolutionVisitor<'a, '_, 'ast,
882
891
ForeignItemKind :: Fn ( box Fn { ref generics, .. } ) => {
883
892
self . with_generic_param_rib (
884
893
& generics. params ,
885
- RibKind :: Item ( HasGenericParams :: Yes ( generics. span ) ) ,
894
+ RibKind :: Item ( HasGenericParams :: Yes ( generics. span ) , IsStaticOrConst :: No ) ,
886
895
LifetimeRibKind :: Generics {
887
896
binder : foreign_item. id ,
888
897
kind : LifetimeBinderKind :: Function ,
@@ -2271,7 +2280,7 @@ impl<'a: 'ast, 'b, 'ast, 'tcx> LateResolutionVisitor<'a, 'b, 'ast, 'tcx> {
2271
2280
self . with_current_self_item ( item, |this| {
2272
2281
this. with_generic_param_rib (
2273
2282
& generics. params ,
2274
- RibKind :: Item ( HasGenericParams :: Yes ( generics. span ) ) ,
2283
+ RibKind :: Item ( HasGenericParams :: Yes ( generics. span ) , IsStaticOrConst :: No ) ,
2275
2284
LifetimeRibKind :: Generics {
2276
2285
binder : item. id ,
2277
2286
kind : LifetimeBinderKind :: Item ,
@@ -2349,7 +2358,7 @@ impl<'a: 'ast, 'b, 'ast, 'tcx> LateResolutionVisitor<'a, 'b, 'ast, 'tcx> {
2349
2358
ItemKind :: TyAlias ( box TyAlias { ref generics, .. } ) => {
2350
2359
self . with_generic_param_rib (
2351
2360
& generics. params ,
2352
- RibKind :: Item ( HasGenericParams :: Yes ( generics. span ) ) ,
2361
+ RibKind :: Item ( HasGenericParams :: Yes ( generics. span ) , IsStaticOrConst :: No ) ,
2353
2362
LifetimeRibKind :: Generics {
2354
2363
binder : item. id ,
2355
2364
kind : LifetimeBinderKind :: Item ,
@@ -2362,7 +2371,7 @@ impl<'a: 'ast, 'b, 'ast, 'tcx> LateResolutionVisitor<'a, 'b, 'ast, 'tcx> {
2362
2371
ItemKind :: Fn ( box Fn { ref generics, .. } ) => {
2363
2372
self . with_generic_param_rib (
2364
2373
& generics. params ,
2365
- RibKind :: Item ( HasGenericParams :: Yes ( generics. span ) ) ,
2374
+ RibKind :: Item ( HasGenericParams :: Yes ( generics. span ) , IsStaticOrConst :: No ) ,
2366
2375
LifetimeRibKind :: Generics {
2367
2376
binder : item. id ,
2368
2377
kind : LifetimeBinderKind :: Function ,
@@ -2401,7 +2410,7 @@ impl<'a: 'ast, 'b, 'ast, 'tcx> LateResolutionVisitor<'a, 'b, 'ast, 'tcx> {
2401
2410
// Create a new rib for the trait-wide type parameters.
2402
2411
self . with_generic_param_rib (
2403
2412
& generics. params ,
2404
- RibKind :: Item ( HasGenericParams :: Yes ( generics. span ) ) ,
2413
+ RibKind :: Item ( HasGenericParams :: Yes ( generics. span ) , IsStaticOrConst :: No ) ,
2405
2414
LifetimeRibKind :: Generics {
2406
2415
binder : item. id ,
2407
2416
kind : LifetimeBinderKind :: Item ,
@@ -2422,7 +2431,7 @@ impl<'a: 'ast, 'b, 'ast, 'tcx> LateResolutionVisitor<'a, 'b, 'ast, 'tcx> {
2422
2431
// Create a new rib for the trait-wide type parameters.
2423
2432
self . with_generic_param_rib (
2424
2433
& generics. params ,
2425
- RibKind :: Item ( HasGenericParams :: Yes ( generics. span ) ) ,
2434
+ RibKind :: Item ( HasGenericParams :: Yes ( generics. span ) , IsStaticOrConst :: No ) ,
2426
2435
LifetimeRibKind :: Generics {
2427
2436
binder : item. id ,
2428
2437
kind : LifetimeBinderKind :: Item ,
@@ -2471,11 +2480,14 @@ impl<'a: 'ast, 'b, 'ast, 'tcx> LateResolutionVisitor<'a, 'b, 'ast, 'tcx> {
2471
2480
ItemKind :: Const ( box ast:: ConstItem { ref generics, ref ty, ref expr, .. } ) => {
2472
2481
self . with_generic_param_rib (
2473
2482
& generics. params ,
2474
- RibKind :: Item ( if self . r . tcx . features ( ) . generic_const_items {
2475
- HasGenericParams :: Yes ( generics. span )
2476
- } else {
2477
- HasGenericParams :: No
2478
- } ) ,
2483
+ RibKind :: Item (
2484
+ if self . r . tcx . features ( ) . generic_const_items {
2485
+ HasGenericParams :: Yes ( generics. span )
2486
+ } else {
2487
+ HasGenericParams :: No
2488
+ } ,
2489
+ IsStaticOrConst :: Const ,
2490
+ ) ,
2479
2491
LifetimeRibKind :: Generics {
2480
2492
binder : item. id ,
2481
2493
kind : LifetimeBinderKind :: ConstItem ,
@@ -2560,7 +2572,7 @@ impl<'a: 'ast, 'b, 'ast, 'tcx> LateResolutionVisitor<'a, 'b, 'ast, 'tcx> {
2560
2572
let mut add_bindings_for_ns = |ns| {
2561
2573
let parent_rib = self . ribs [ ns]
2562
2574
. iter ( )
2563
- . rfind ( |r| matches ! ( r. kind, RibKind :: Item ( _ ) ) )
2575
+ . rfind ( |r| matches ! ( r. kind, RibKind :: Item ( .. ) ) )
2564
2576
. expect ( "associated item outside of an item" ) ;
2565
2577
seen_bindings. extend ( parent_rib. bindings . keys ( ) . map ( |ident| ( * ident, ident. span ) ) ) ;
2566
2578
} ;
@@ -2696,7 +2708,7 @@ impl<'a: 'ast, 'b, 'ast, 'tcx> LateResolutionVisitor<'a, 'b, 'ast, 'tcx> {
2696
2708
}
2697
2709
2698
2710
fn with_static_rib ( & mut self , f : impl FnOnce ( & mut Self ) ) {
2699
- let kind = RibKind :: Item ( HasGenericParams :: No ) ;
2711
+ let kind = RibKind :: Item ( HasGenericParams :: No , IsStaticOrConst :: Static ) ;
2700
2712
self . with_rib ( ValueNS , kind, |this| this. with_rib ( TypeNS , kind, f) )
2701
2713
}
2702
2714
@@ -2877,7 +2889,7 @@ impl<'a: 'ast, 'b, 'ast, 'tcx> LateResolutionVisitor<'a, 'b, 'ast, 'tcx> {
2877
2889
// If applicable, create a rib for the type parameters.
2878
2890
self . with_generic_param_rib (
2879
2891
& generics. params ,
2880
- RibKind :: Item ( HasGenericParams :: Yes ( generics. span ) ) ,
2892
+ RibKind :: Item ( HasGenericParams :: Yes ( generics. span ) , IsStaticOrConst :: No ) ,
2881
2893
LifetimeRibKind :: Generics {
2882
2894
span : generics. span ,
2883
2895
binder : item_id,
0 commit comments