@@ -30,9 +30,8 @@ pub fn provide(providers: &mut Providers) {
3030/// Determine which generic parameters are used by the function/method/closure represented by 
3131/// `def_id`. Returns a bitset where bits representing unused parameters are set (`is_empty` 
3232/// indicates all parameters are used). 
33+ #[ instrument( skip( tcx) ) ]  
3334fn  unused_generic_params ( tcx :  TyCtxt < ' _ > ,  def_id :  DefId )  -> FiniteBitSet < u32 >  { 
34-     debug ! ( "unused_generic_params({:?})" ,  def_id) ; 
35- 
3635    if  !tcx. sess . opts . debugging_opts . polymorphize  { 
3736        // If polymorphization disabled, then all parameters are used. 
3837        return  FiniteBitSet :: new_empty ( ) ; 
@@ -46,7 +45,7 @@ fn unused_generic_params(tcx: TyCtxt<'_>, def_id: DefId) -> FiniteBitSet<u32> {
4645    } 
4746
4847    let  generics = tcx. generics_of ( def_id) ; 
49-     debug ! ( "unused_generic_params: generics={:?}" ,   generics) ; 
48+     debug ! ( ? generics) ; 
5049
5150    // Exit early when there are no parameters to be unused. 
5251    if  generics. count ( )  == 0  { 
@@ -57,11 +56,11 @@ fn unused_generic_params(tcx: TyCtxt<'_>, def_id: DefId) -> FiniteBitSet<u32> {
5756    let  context = tcx. hir ( ) . body_const_context ( def_id. expect_local ( ) ) ; 
5857    match  context { 
5958        Some ( ConstContext :: ConstFn )  | None  if  !tcx. is_mir_available ( def_id)  => { 
60-             debug ! ( "unused_generic_params: ( no mir available) def_id={:?}"  ,  def_id ) ; 
59+             debug ! ( "no mir available"  ) ; 
6160            return  FiniteBitSet :: new_empty ( ) ; 
6261        } 
6362        Some ( _)  if  !tcx. is_ctfe_mir_available ( def_id)  => { 
64-             debug ! ( "unused_generic_params: ( no ctfe mir available) def_id={:?}"  ,  def_id ) ; 
63+             debug ! ( "no ctfe mir available"  ) ; 
6564            return  FiniteBitSet :: new_empty ( ) ; 
6665        } 
6766        _ => { } 
@@ -72,9 +71,9 @@ fn unused_generic_params(tcx: TyCtxt<'_>, def_id: DefId) -> FiniteBitSet<u32> {
7271        generics. count ( ) . try_into ( ) . expect ( "more generic parameters than can fit into a `u32`" ) ; 
7372    let  mut  unused_parameters = FiniteBitSet :: < u32 > :: new_empty ( ) ; 
7473    unused_parameters. set_range ( 0 ..generics_count) ; 
75-     debug ! ( "unused_generic_params:  (start) unused_parameters={:?}" ,  unused_parameters ) ; 
74+     debug ! ( ?unused_parameters ,   " (start)" ) ; 
7675    mark_used_by_default_parameters ( tcx,  def_id,  generics,  & mut  unused_parameters) ; 
77-     debug ! ( "unused_generic_params:  (after default) unused_parameters={:?}" ,  unused_parameters ) ; 
76+     debug ! ( ?unused_parameters ,   " (after default)" ) ; 
7877
7978    // Visit MIR and accumululate used generic parameters. 
8079    let  body = match  context { 
@@ -85,10 +84,10 @@ fn unused_generic_params(tcx: TyCtxt<'_>, def_id: DefId) -> FiniteBitSet<u32> {
8584    } ; 
8685    let  mut  vis = MarkUsedGenericParams  {  tcx,  def_id,  unused_parameters :  & mut  unused_parameters } ; 
8786    vis. visit_body ( body) ; 
88-     debug ! ( "unused_generic_params:  (after visitor) unused_parameters={:?}" ,  unused_parameters ) ; 
87+     debug ! ( ?unused_parameters ,   " (after visitor)" ) ; 
8988
9089    mark_used_by_predicates ( tcx,  def_id,  & mut  unused_parameters) ; 
91-     debug ! ( "unused_generic_params:  (end) unused_parameters={:?}" ,  unused_parameters ) ; 
90+     debug ! ( ?unused_parameters ,   " (end)" ) ; 
9291
9392    // Emit errors for debugging and testing if enabled. 
9493    if  !unused_parameters. is_empty ( )  { 
@@ -101,24 +100,55 @@ fn unused_generic_params(tcx: TyCtxt<'_>, def_id: DefId) -> FiniteBitSet<u32> {
101100/// Some parameters are considered used-by-default, such as non-generic parameters and the dummy 
102101/// generic parameters from closures, this function marks them as used. `leaf_is_closure` should 
103102/// be `true` if the item that `unused_generic_params` was invoked on is a closure. 
103+ #[ instrument( skip( tcx,  def_id,  generics,  unused_parameters) ) ]  
104104fn  mark_used_by_default_parameters < ' tcx > ( 
105105    tcx :  TyCtxt < ' tcx > , 
106106    def_id :  DefId , 
107107    generics :  & ' tcx  ty:: Generics , 
108108    unused_parameters :  & mut  FiniteBitSet < u32 > , 
109109)  { 
110-     if  !tcx. is_trait ( def_id)  && ( tcx. is_closure ( def_id)  || tcx. type_of ( def_id) . is_generator ( ) )  { 
111-         for  param in  & generics. params  { 
112-             debug ! ( "mark_used_by_default_parameters: (closure/gen) param={:?}" ,  param) ; 
113-             unused_parameters. clear ( param. index ) ; 
114-         } 
115-     }  else  { 
116-         for  param in  & generics. params  { 
117-             debug ! ( "mark_used_by_default_parameters: (other) param={:?}" ,  param) ; 
118-             if  let  ty:: GenericParamDefKind :: Lifetime  = param. kind  { 
110+     match  tcx. def_kind ( def_id)  { 
111+         DefKind :: Closure  | DefKind :: Generator  => { 
112+             for  param in  & generics. params  { 
113+                 debug ! ( ?param,  "(closure/gen)" ) ; 
119114                unused_parameters. clear ( param. index ) ; 
120115            } 
121116        } 
117+         DefKind :: Mod 
118+         | DefKind :: Struct 
119+         | DefKind :: Union 
120+         | DefKind :: Enum 
121+         | DefKind :: Variant 
122+         | DefKind :: Trait 
123+         | DefKind :: TyAlias 
124+         | DefKind :: ForeignTy 
125+         | DefKind :: TraitAlias 
126+         | DefKind :: AssocTy 
127+         | DefKind :: TyParam 
128+         | DefKind :: Fn 
129+         | DefKind :: Const 
130+         | DefKind :: ConstParam 
131+         | DefKind :: Static 
132+         | DefKind :: Ctor ( _,  _) 
133+         | DefKind :: AssocFn 
134+         | DefKind :: AssocConst 
135+         | DefKind :: Macro ( _) 
136+         | DefKind :: ExternCrate 
137+         | DefKind :: Use 
138+         | DefKind :: ForeignMod 
139+         | DefKind :: AnonConst 
140+         | DefKind :: OpaqueTy 
141+         | DefKind :: Field 
142+         | DefKind :: LifetimeParam 
143+         | DefKind :: GlobalAsm 
144+         | DefKind :: Impl  => { 
145+             for  param in  & generics. params  { 
146+                 debug ! ( ?param,  "(other)" ) ; 
147+                 if  let  ty:: GenericParamDefKind :: Lifetime  = param. kind  { 
148+                     unused_parameters. clear ( param. index ) ; 
149+                 } 
150+             } 
151+         } 
122152    } 
123153
124154    if  let  Some ( parent)  = generics. parent  { 
@@ -128,23 +158,20 @@ fn mark_used_by_default_parameters<'tcx>(
128158
129159/// Search the predicates on used generic parameters for any unused generic parameters, and mark 
130160/// those as used. 
161+ #[ instrument( skip( tcx,  def_id) ) ]  
131162fn  mark_used_by_predicates < ' tcx > ( 
132163    tcx :  TyCtxt < ' tcx > , 
133164    def_id :  DefId , 
134165    unused_parameters :  & mut  FiniteBitSet < u32 > , 
135166)  { 
136167    let  def_id = tcx. closure_base_def_id ( def_id) ; 
137168    let  predicates = tcx. explicit_predicates_of ( def_id) ; 
138-     debug ! ( "mark_used_by_predicates: predicates_of={:?}" ,  predicates) ; 
139169
140170    let  mut  current_unused_parameters = FiniteBitSet :: new_empty ( ) ; 
141171    // Run to a fixed point to support `where T: Trait<U>, U: Trait<V>`, starting with an empty 
142172    // bit set so that this is skipped if all parameters are already used. 
143173    while  current_unused_parameters != * unused_parameters { 
144-         debug ! ( 
145-             "mark_used_by_predicates: current_unused_parameters={:?} = unused_parameters={:?}" , 
146-             current_unused_parameters,  unused_parameters
147-         ) ; 
174+         debug ! ( ?current_unused_parameters,  ?unused_parameters) ; 
148175        current_unused_parameters = * unused_parameters; 
149176
150177        for  ( predicate,  _)  in  predicates. predicates  { 
@@ -169,13 +196,13 @@ fn mark_used_by_predicates<'tcx>(
169196
170197/// Emit errors for the function annotated by `#[rustc_polymorphize_error]`, labelling each generic 
171198/// parameter which was unused. 
199+ #[ instrument( skip( tcx,  generics) ) ]  
172200fn  emit_unused_generic_params_error < ' tcx > ( 
173201    tcx :  TyCtxt < ' tcx > , 
174202    def_id :  DefId , 
175203    generics :  & ' tcx  ty:: Generics , 
176204    unused_parameters :  & FiniteBitSet < u32 > , 
177205)  { 
178-     debug ! ( "emit_unused_generic_params_error: def_id={:?}" ,  def_id) ; 
179206    let  base_def_id = tcx. closure_base_def_id ( def_id) ; 
180207    if  !tcx
181208        . get_attrs ( base_def_id) 
@@ -185,7 +212,6 @@ fn emit_unused_generic_params_error<'tcx>(
185212        return ; 
186213    } 
187214
188-     debug ! ( "emit_unused_generic_params_error: unused_parameters={:?}" ,  unused_parameters) ; 
189215    let  fn_span = match  tcx. opt_item_name ( def_id)  { 
190216        Some ( ident)  => ident. span , 
191217        _ => tcx. def_span ( def_id) , 
@@ -197,7 +223,7 @@ fn emit_unused_generic_params_error<'tcx>(
197223    while  let  Some ( generics)  = next_generics { 
198224        for  param in  & generics. params  { 
199225            if  unused_parameters. contains ( param. index ) . unwrap_or ( false )  { 
200-                 debug ! ( "emit_unused_generic_params_error: param={:?}" ,   param) ; 
226+                 debug ! ( ? param) ; 
201227                let  def_span = tcx. def_span ( param. def_id ) ; 
202228                err. span_label ( def_span,  & format ! ( "generic parameter `{}` is unused" ,  param. name) ) ; 
203229            } 
@@ -219,33 +245,31 @@ struct MarkUsedGenericParams<'a, 'tcx> {
219245impl < ' a ,  ' tcx >  MarkUsedGenericParams < ' a ,  ' tcx >  { 
220246    /// Invoke `unused_generic_params` on a body contained within the current item (e.g. 
221247     /// a closure, generator or constant). 
248+      #[ instrument( skip( self ,  def_id,  substs) ) ]  
222249    fn  visit_child_body ( & mut  self ,  def_id :  DefId ,  substs :  SubstsRef < ' tcx > )  { 
223250        let  unused = self . tcx . unused_generic_params ( def_id) ; 
224-         debug ! ( 
225-             "visit_child_body: unused_parameters={:?} unused={:?}" , 
226-             self . unused_parameters,  unused
227-         ) ; 
251+         debug ! ( ?self . unused_parameters,  ?unused) ; 
228252        for  ( i,  arg)  in  substs. iter ( ) . enumerate ( )  { 
229253            let  i = i. try_into ( ) . unwrap ( ) ; 
230254            if  !unused. contains ( i) . unwrap_or ( false )  { 
231255                arg. visit_with ( self ) ; 
232256            } 
233257        } 
234-         debug ! ( "visit_child_body: unused_parameters={:?}" ,   self . unused_parameters) ; 
258+         debug ! ( ? self . unused_parameters) ; 
235259    } 
236260} 
237261
238262impl < ' a ,  ' tcx >  Visitor < ' tcx >  for  MarkUsedGenericParams < ' a ,  ' tcx >  { 
263+     #[ instrument( skip( self ,  local) ) ]  
239264    fn  visit_local_decl ( & mut  self ,  local :  Local ,  local_decl :  & LocalDecl < ' tcx > )  { 
240-         debug ! ( "visit_local_decl: local_decl={:?}" ,  local_decl) ; 
241265        if  local == Local :: from_usize ( 1 )  { 
242266            let  def_kind = self . tcx . def_kind ( self . def_id ) ; 
243267            if  matches ! ( def_kind,  DefKind :: Closure  | DefKind :: Generator )  { 
244268                // Skip visiting the closure/generator that is currently being processed. This only 
245269                // happens because the first argument to the closure is a reference to itself and 
246270                // that will call `visit_substs`, resulting in each generic parameter captured being 
247271                // considered used by default. 
248-                 debug ! ( "visit_local_decl:  skipping closure substs" ) ; 
272+                 debug ! ( "skipping closure substs" ) ; 
249273                return ; 
250274            } 
251275        } 
@@ -263,15 +287,15 @@ impl<'a, 'tcx> Visitor<'tcx> for MarkUsedGenericParams<'a, 'tcx> {
263287} 
264288
265289impl < ' a ,  ' tcx >  TypeVisitor < ' tcx >  for  MarkUsedGenericParams < ' a ,  ' tcx >  { 
290+     #[ instrument( skip( self ) ) ]  
266291    fn  visit_const ( & mut  self ,  c :  & ' tcx  Const < ' tcx > )  -> ControlFlow < Self :: BreakTy >  { 
267-         debug ! ( "visit_const: c={:?}" ,  c) ; 
268292        if  !c. has_param_types_or_consts ( )  { 
269293            return  ControlFlow :: CONTINUE ; 
270294        } 
271295
272296        match  c. val  { 
273297            ty:: ConstKind :: Param ( param)  => { 
274-                 debug ! ( "visit_const: param={:?}" ,   param) ; 
298+                 debug ! ( ? param) ; 
275299                self . unused_parameters . clear ( param. index ) ; 
276300                ControlFlow :: CONTINUE 
277301            } 
@@ -296,15 +320,15 @@ impl<'a, 'tcx> TypeVisitor<'tcx> for MarkUsedGenericParams<'a, 'tcx> {
296320        } 
297321    } 
298322
323+     #[ instrument( skip( self ) ) ]  
299324    fn  visit_ty ( & mut  self ,  ty :  Ty < ' tcx > )  -> ControlFlow < Self :: BreakTy >  { 
300-         debug ! ( "visit_ty: ty={:?}" ,  ty) ; 
301325        if  !ty. has_param_types_or_consts ( )  { 
302326            return  ControlFlow :: CONTINUE ; 
303327        } 
304328
305329        match  * ty. kind ( )  { 
306330            ty:: Closure ( def_id,  substs)  | ty:: Generator ( def_id,  substs,  ..)  => { 
307-                 debug ! ( "visit_ty: def_id={:?}" ,   def_id) ; 
331+                 debug ! ( ? def_id) ; 
308332                // Avoid cycle errors with generators. 
309333                if  def_id == self . def_id  { 
310334                    return  ControlFlow :: CONTINUE ; 
@@ -316,7 +340,7 @@ impl<'a, 'tcx> TypeVisitor<'tcx> for MarkUsedGenericParams<'a, 'tcx> {
316340                ControlFlow :: CONTINUE 
317341            } 
318342            ty:: Param ( param)  => { 
319-                 debug ! ( "visit_ty: param={:?}" ,   param) ; 
343+                 debug ! ( ? param) ; 
320344                self . unused_parameters . clear ( param. index ) ; 
321345                ControlFlow :: CONTINUE 
322346            } 
@@ -333,8 +357,8 @@ struct HasUsedGenericParams<'a> {
333357impl < ' a ,  ' tcx >  TypeVisitor < ' tcx >  for  HasUsedGenericParams < ' a >  { 
334358    type  BreakTy  = ( ) ; 
335359
360+     #[ instrument( skip( self ) ) ]  
336361    fn  visit_const ( & mut  self ,  c :  & ' tcx  Const < ' tcx > )  -> ControlFlow < Self :: BreakTy >  { 
337-         debug ! ( "visit_const: c={:?}" ,  c) ; 
338362        if  !c. has_param_types_or_consts ( )  { 
339363            return  ControlFlow :: CONTINUE ; 
340364        } 
@@ -351,8 +375,8 @@ impl<'a, 'tcx> TypeVisitor<'tcx> for HasUsedGenericParams<'a> {
351375        } 
352376    } 
353377
378+     #[ instrument( skip( self ) ) ]  
354379    fn  visit_ty ( & mut  self ,  ty :  Ty < ' tcx > )  -> ControlFlow < Self :: BreakTy >  { 
355-         debug ! ( "visit_ty: ty={:?}" ,  ty) ; 
356380        if  !ty. has_param_types_or_consts ( )  { 
357381            return  ControlFlow :: CONTINUE ; 
358382        } 
0 commit comments