@@ -181,7 +181,8 @@ pub(crate) enum RibKind<'a> {
181
181
FnOrCoroutine ,
182
182
183
183
/// We passed through an item scope. Disallow upvars.
184
- Item ( HasGenericParams ) ,
184
+ /// Note if this is a static/const to help with some confusing diagnostics
185
+ Item ( HasGenericParams , DefKind ) ,
185
186
186
187
/// We're in a constant item. Can't refer to dynamic stuff.
187
188
///
@@ -221,7 +222,7 @@ impl RibKind<'_> {
221
222
| RibKind :: MacroDefinition ( _)
222
223
| RibKind :: ConstParamTy
223
224
| RibKind :: InlineAsmSym => false ,
224
- RibKind :: AssocItem | RibKind :: Item ( _ ) | RibKind :: ForwardGenericParamBan => true ,
225
+ RibKind :: AssocItem | RibKind :: Item ( .. ) | RibKind :: ForwardGenericParamBan => true ,
225
226
}
226
227
}
227
228
@@ -870,7 +871,7 @@ impl<'a: 'ast, 'ast, 'tcx> Visitor<'ast> for LateResolutionVisitor<'a, '_, 'ast,
870
871
ForeignItemKind :: TyAlias ( box TyAlias { ref generics, .. } ) => {
871
872
self . with_generic_param_rib (
872
873
& generics. params ,
873
- RibKind :: Item ( HasGenericParams :: Yes ( generics. span ) ) ,
874
+ RibKind :: Item ( HasGenericParams :: Yes ( generics. span ) , DefKind :: ForeignTy ) ,
874
875
LifetimeRibKind :: Generics {
875
876
binder : foreign_item. id ,
876
877
kind : LifetimeBinderKind :: Item ,
@@ -882,7 +883,7 @@ impl<'a: 'ast, 'ast, 'tcx> Visitor<'ast> for LateResolutionVisitor<'a, '_, 'ast,
882
883
ForeignItemKind :: Fn ( box Fn { ref generics, .. } ) => {
883
884
self . with_generic_param_rib (
884
885
& generics. params ,
885
- RibKind :: Item ( HasGenericParams :: Yes ( generics. span ) ) ,
886
+ RibKind :: Item ( HasGenericParams :: Yes ( generics. span ) , DefKind :: Fn ) ,
886
887
LifetimeRibKind :: Generics {
887
888
binder : foreign_item. id ,
888
889
kind : LifetimeBinderKind :: Function ,
@@ -891,8 +892,8 @@ impl<'a: 'ast, 'ast, 'tcx> Visitor<'ast> for LateResolutionVisitor<'a, '_, 'ast,
891
892
|this| visit:: walk_foreign_item ( this, foreign_item) ,
892
893
) ;
893
894
}
894
- ForeignItemKind :: Static ( .. ) => {
895
- self . with_static_rib ( |this| {
895
+ ForeignItemKind :: Static ( _ , mutability , _ ) => {
896
+ self . with_static_rib ( mutability , |this| {
896
897
visit:: walk_foreign_item ( this, foreign_item) ;
897
898
} ) ;
898
899
}
@@ -2268,10 +2269,17 @@ impl<'a: 'ast, 'b, 'ast, 'tcx> LateResolutionVisitor<'a, 'b, 'ast, 'tcx> {
2268
2269
2269
2270
fn resolve_adt ( & mut self , item : & ' ast Item , generics : & ' ast Generics ) {
2270
2271
debug ! ( "resolve_adt" ) ;
2272
+ let kind = match item. kind {
2273
+ ItemKind :: Enum ( _, _) => DefKind :: Enum ,
2274
+ ItemKind :: Struct ( _, _) => DefKind :: Struct ,
2275
+ ItemKind :: Union ( _, _) => DefKind :: Union ,
2276
+ // only called if `item` is one of the above
2277
+ _ => unreachable ! ( ) ,
2278
+ } ;
2271
2279
self . with_current_self_item ( item, |this| {
2272
2280
this. with_generic_param_rib (
2273
2281
& generics. params ,
2274
- RibKind :: Item ( HasGenericParams :: Yes ( generics. span ) ) ,
2282
+ RibKind :: Item ( HasGenericParams :: Yes ( generics. span ) , kind ) ,
2275
2283
LifetimeRibKind :: Generics {
2276
2284
binder : item. id ,
2277
2285
kind : LifetimeBinderKind :: Item ,
@@ -2349,7 +2357,7 @@ impl<'a: 'ast, 'b, 'ast, 'tcx> LateResolutionVisitor<'a, 'b, 'ast, 'tcx> {
2349
2357
ItemKind :: TyAlias ( box TyAlias { ref generics, .. } ) => {
2350
2358
self . with_generic_param_rib (
2351
2359
& generics. params ,
2352
- RibKind :: Item ( HasGenericParams :: Yes ( generics. span ) ) ,
2360
+ RibKind :: Item ( HasGenericParams :: Yes ( generics. span ) , DefKind :: TyAlias ) ,
2353
2361
LifetimeRibKind :: Generics {
2354
2362
binder : item. id ,
2355
2363
kind : LifetimeBinderKind :: Item ,
@@ -2362,7 +2370,7 @@ impl<'a: 'ast, 'b, 'ast, 'tcx> LateResolutionVisitor<'a, 'b, 'ast, 'tcx> {
2362
2370
ItemKind :: Fn ( box Fn { ref generics, .. } ) => {
2363
2371
self . with_generic_param_rib (
2364
2372
& generics. params ,
2365
- RibKind :: Item ( HasGenericParams :: Yes ( generics. span ) ) ,
2373
+ RibKind :: Item ( HasGenericParams :: Yes ( generics. span ) , DefKind :: Fn ) ,
2366
2374
LifetimeRibKind :: Generics {
2367
2375
binder : item. id ,
2368
2376
kind : LifetimeBinderKind :: Function ,
@@ -2401,7 +2409,7 @@ impl<'a: 'ast, 'b, 'ast, 'tcx> LateResolutionVisitor<'a, 'b, 'ast, 'tcx> {
2401
2409
// Create a new rib for the trait-wide type parameters.
2402
2410
self . with_generic_param_rib (
2403
2411
& generics. params ,
2404
- RibKind :: Item ( HasGenericParams :: Yes ( generics. span ) ) ,
2412
+ RibKind :: Item ( HasGenericParams :: Yes ( generics. span ) , DefKind :: Trait ) ,
2405
2413
LifetimeRibKind :: Generics {
2406
2414
binder : item. id ,
2407
2415
kind : LifetimeBinderKind :: Item ,
@@ -2422,7 +2430,7 @@ impl<'a: 'ast, 'b, 'ast, 'tcx> LateResolutionVisitor<'a, 'b, 'ast, 'tcx> {
2422
2430
// Create a new rib for the trait-wide type parameters.
2423
2431
self . with_generic_param_rib (
2424
2432
& generics. params ,
2425
- RibKind :: Item ( HasGenericParams :: Yes ( generics. span ) ) ,
2433
+ RibKind :: Item ( HasGenericParams :: Yes ( generics. span ) , DefKind :: TraitAlias ) ,
2426
2434
LifetimeRibKind :: Generics {
2427
2435
binder : item. id ,
2428
2436
kind : LifetimeBinderKind :: Item ,
@@ -2455,8 +2463,8 @@ impl<'a: 'ast, 'b, 'ast, 'tcx> LateResolutionVisitor<'a, 'b, 'ast, 'tcx> {
2455
2463
} ) ;
2456
2464
}
2457
2465
2458
- ItemKind :: Static ( box ast:: StaticItem { ref ty, ref expr, .. } ) => {
2459
- self . with_static_rib ( |this| {
2466
+ ItemKind :: Static ( box ast:: StaticItem { ref ty, ref expr, mutability } ) => {
2467
+ self . with_static_rib ( mutability , |this| {
2460
2468
this. with_lifetime_rib ( LifetimeRibKind :: Elided ( LifetimeRes :: Static ) , |this| {
2461
2469
this. visit_ty ( ty) ;
2462
2470
} ) ;
@@ -2471,11 +2479,14 @@ impl<'a: 'ast, 'b, 'ast, 'tcx> LateResolutionVisitor<'a, 'b, 'ast, 'tcx> {
2471
2479
ItemKind :: Const ( box ast:: ConstItem { ref generics, ref ty, ref expr, .. } ) => {
2472
2480
self . with_generic_param_rib (
2473
2481
& generics. params ,
2474
- RibKind :: Item ( if self . r . tcx . features ( ) . generic_const_items {
2475
- HasGenericParams :: Yes ( generics. span )
2476
- } else {
2477
- HasGenericParams :: No
2478
- } ) ,
2482
+ RibKind :: Item (
2483
+ if self . r . tcx . features ( ) . generic_const_items {
2484
+ HasGenericParams :: Yes ( generics. span )
2485
+ } else {
2486
+ HasGenericParams :: No
2487
+ } ,
2488
+ DefKind :: Const ,
2489
+ ) ,
2479
2490
LifetimeRibKind :: Generics {
2480
2491
binder : item. id ,
2481
2492
kind : LifetimeBinderKind :: ConstItem ,
@@ -2560,7 +2571,7 @@ impl<'a: 'ast, 'b, 'ast, 'tcx> LateResolutionVisitor<'a, 'b, 'ast, 'tcx> {
2560
2571
let mut add_bindings_for_ns = |ns| {
2561
2572
let parent_rib = self . ribs [ ns]
2562
2573
. iter ( )
2563
- . rfind ( |r| matches ! ( r. kind, RibKind :: Item ( _ ) ) )
2574
+ . rfind ( |r| matches ! ( r. kind, RibKind :: Item ( .. ) ) )
2564
2575
. expect ( "associated item outside of an item" ) ;
2565
2576
seen_bindings. extend ( parent_rib. bindings . keys ( ) . map ( |ident| ( * ident, ident. span ) ) ) ;
2566
2577
} ;
@@ -2695,8 +2706,8 @@ impl<'a: 'ast, 'b, 'ast, 'tcx> LateResolutionVisitor<'a, 'b, 'ast, 'tcx> {
2695
2706
self . label_ribs . pop ( ) ;
2696
2707
}
2697
2708
2698
- fn with_static_rib ( & mut self , f : impl FnOnce ( & mut Self ) ) {
2699
- let kind = RibKind :: Item ( HasGenericParams :: No ) ;
2709
+ fn with_static_rib ( & mut self , mutability : Mutability , f : impl FnOnce ( & mut Self ) ) {
2710
+ let kind = RibKind :: Item ( HasGenericParams :: No , DefKind :: Static ( mutability ) ) ;
2700
2711
self . with_rib ( ValueNS , kind, |this| this. with_rib ( TypeNS , kind, f) )
2701
2712
}
2702
2713
@@ -2877,7 +2888,7 @@ impl<'a: 'ast, 'b, 'ast, 'tcx> LateResolutionVisitor<'a, 'b, 'ast, 'tcx> {
2877
2888
// If applicable, create a rib for the type parameters.
2878
2889
self . with_generic_param_rib (
2879
2890
& generics. params ,
2880
- RibKind :: Item ( HasGenericParams :: Yes ( generics. span ) ) ,
2891
+ RibKind :: Item ( HasGenericParams :: Yes ( generics. span ) , DefKind :: Impl { of_trait : opt_trait_reference . is_some ( ) } ) ,
2881
2892
LifetimeRibKind :: Generics {
2882
2893
span : generics. span ,
2883
2894
binder : item_id,
0 commit comments