@@ -30,9 +30,8 @@ pub fn provide(providers: &mut Providers) {
30
30
/// Determine which generic parameters are used by the function/method/closure represented by
31
31
/// `def_id`. Returns a bitset where bits representing unused parameters are set (`is_empty`
32
32
/// indicates all parameters are used).
33
+ #[ instrument( skip( tcx) ) ]
33
34
fn unused_generic_params ( tcx : TyCtxt < ' _ > , def_id : DefId ) -> FiniteBitSet < u32 > {
34
- debug ! ( "unused_generic_params({:?})" , def_id) ;
35
-
36
35
if !tcx. sess . opts . debugging_opts . polymorphize {
37
36
// If polymorphization disabled, then all parameters are used.
38
37
return FiniteBitSet :: new_empty ( ) ;
@@ -46,7 +45,7 @@ fn unused_generic_params(tcx: TyCtxt<'_>, def_id: DefId) -> FiniteBitSet<u32> {
46
45
}
47
46
48
47
let generics = tcx. generics_of ( def_id) ;
49
- debug ! ( "unused_generic_params: generics={:?}" , generics) ;
48
+ debug ! ( ? generics) ;
50
49
51
50
// Exit early when there are no parameters to be unused.
52
51
if generics. count ( ) == 0 {
@@ -57,11 +56,11 @@ fn unused_generic_params(tcx: TyCtxt<'_>, def_id: DefId) -> FiniteBitSet<u32> {
57
56
let context = tcx. hir ( ) . body_const_context ( def_id. expect_local ( ) ) ;
58
57
match context {
59
58
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" ) ;
61
60
return FiniteBitSet :: new_empty ( ) ;
62
61
}
63
62
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" ) ;
65
64
return FiniteBitSet :: new_empty ( ) ;
66
65
}
67
66
_ => { }
@@ -72,9 +71,9 @@ fn unused_generic_params(tcx: TyCtxt<'_>, def_id: DefId) -> FiniteBitSet<u32> {
72
71
generics. count ( ) . try_into ( ) . expect ( "more generic parameters than can fit into a `u32`" ) ;
73
72
let mut unused_parameters = FiniteBitSet :: < u32 > :: new_empty ( ) ;
74
73
unused_parameters. set_range ( 0 ..generics_count) ;
75
- debug ! ( "unused_generic_params: (start) unused_parameters={:?}" , unused_parameters ) ;
74
+ debug ! ( ?unused_parameters , " (start)" ) ;
76
75
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)" ) ;
78
77
79
78
// Visit MIR and accumululate used generic parameters.
80
79
let body = match context {
@@ -85,10 +84,10 @@ fn unused_generic_params(tcx: TyCtxt<'_>, def_id: DefId) -> FiniteBitSet<u32> {
85
84
} ;
86
85
let mut vis = MarkUsedGenericParams { tcx, def_id, unused_parameters : & mut unused_parameters } ;
87
86
vis. visit_body ( body) ;
88
- debug ! ( "unused_generic_params: (after visitor) unused_parameters={:?}" , unused_parameters ) ;
87
+ debug ! ( ?unused_parameters , " (after visitor)" ) ;
89
88
90
89
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)" ) ;
92
91
93
92
// Emit errors for debugging and testing if enabled.
94
93
if !unused_parameters. is_empty ( ) {
@@ -101,6 +100,7 @@ fn unused_generic_params(tcx: TyCtxt<'_>, def_id: DefId) -> FiniteBitSet<u32> {
101
100
/// Some parameters are considered used-by-default, such as non-generic parameters and the dummy
102
101
/// generic parameters from closures, this function marks them as used. `leaf_is_closure` should
103
102
/// be `true` if the item that `unused_generic_params` was invoked on is a closure.
103
+ #[ instrument( skip( tcx, def_id, generics, unused_parameters) ) ]
104
104
fn mark_used_by_default_parameters < ' tcx > (
105
105
tcx : TyCtxt < ' tcx > ,
106
106
def_id : DefId ,
@@ -109,12 +109,12 @@ fn mark_used_by_default_parameters<'tcx>(
109
109
) {
110
110
if !tcx. is_trait ( def_id) && ( tcx. is_closure ( def_id) || tcx. type_of ( def_id) . is_generator ( ) ) {
111
111
for param in & generics. params {
112
- debug ! ( "mark_used_by_default_parameters: (closure/gen) param={:?}" , param ) ;
112
+ debug ! ( ?param , " (closure/gen)" ) ;
113
113
unused_parameters. clear ( param. index ) ;
114
114
}
115
115
} else {
116
116
for param in & generics. params {
117
- debug ! ( "mark_used_by_default_parameters: (other) param={:?}" , param ) ;
117
+ debug ! ( ?param , " (other)" ) ;
118
118
if let ty:: GenericParamDefKind :: Lifetime = param. kind {
119
119
unused_parameters. clear ( param. index ) ;
120
120
}
@@ -128,23 +128,20 @@ fn mark_used_by_default_parameters<'tcx>(
128
128
129
129
/// Search the predicates on used generic parameters for any unused generic parameters, and mark
130
130
/// those as used.
131
+ #[ instrument( skip( tcx, def_id) ) ]
131
132
fn mark_used_by_predicates < ' tcx > (
132
133
tcx : TyCtxt < ' tcx > ,
133
134
def_id : DefId ,
134
135
unused_parameters : & mut FiniteBitSet < u32 > ,
135
136
) {
136
137
let def_id = tcx. closure_base_def_id ( def_id) ;
137
138
let predicates = tcx. explicit_predicates_of ( def_id) ;
138
- debug ! ( "mark_used_by_predicates: predicates_of={:?}" , predicates) ;
139
139
140
140
let mut current_unused_parameters = FiniteBitSet :: new_empty ( ) ;
141
141
// Run to a fixed point to support `where T: Trait<U>, U: Trait<V>`, starting with an empty
142
142
// bit set so that this is skipped if all parameters are already used.
143
143
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
- ) ;
144
+ debug ! ( ?current_unused_parameters, ?unused_parameters) ;
148
145
current_unused_parameters = * unused_parameters;
149
146
150
147
for ( predicate, _) in predicates. predicates {
@@ -169,13 +166,13 @@ fn mark_used_by_predicates<'tcx>(
169
166
170
167
/// Emit errors for the function annotated by `#[rustc_polymorphize_error]`, labelling each generic
171
168
/// parameter which was unused.
169
+ #[ instrument( skip( tcx, generics) ) ]
172
170
fn emit_unused_generic_params_error < ' tcx > (
173
171
tcx : TyCtxt < ' tcx > ,
174
172
def_id : DefId ,
175
173
generics : & ' tcx ty:: Generics ,
176
174
unused_parameters : & FiniteBitSet < u32 > ,
177
175
) {
178
- debug ! ( "emit_unused_generic_params_error: def_id={:?}" , def_id) ;
179
176
let base_def_id = tcx. closure_base_def_id ( def_id) ;
180
177
if !tcx
181
178
. get_attrs ( base_def_id)
@@ -185,7 +182,6 @@ fn emit_unused_generic_params_error<'tcx>(
185
182
return ;
186
183
}
187
184
188
- debug ! ( "emit_unused_generic_params_error: unused_parameters={:?}" , unused_parameters) ;
189
185
let fn_span = match tcx. opt_item_name ( def_id) {
190
186
Some ( ident) => ident. span ,
191
187
_ => tcx. def_span ( def_id) ,
@@ -197,7 +193,7 @@ fn emit_unused_generic_params_error<'tcx>(
197
193
while let Some ( generics) = next_generics {
198
194
for param in & generics. params {
199
195
if unused_parameters. contains ( param. index ) . unwrap_or ( false ) {
200
- debug ! ( "emit_unused_generic_params_error: param={:?}" , param) ;
196
+ debug ! ( ? param) ;
201
197
let def_span = tcx. def_span ( param. def_id ) ;
202
198
err. span_label ( def_span, & format ! ( "generic parameter `{}` is unused" , param. name) ) ;
203
199
}
@@ -219,33 +215,31 @@ struct MarkUsedGenericParams<'a, 'tcx> {
219
215
impl < ' a , ' tcx > MarkUsedGenericParams < ' a , ' tcx > {
220
216
/// Invoke `unused_generic_params` on a body contained within the current item (e.g.
221
217
/// a closure, generator or constant).
218
+ #[ instrument( skip( self , def_id, substs) ) ]
222
219
fn visit_child_body ( & mut self , def_id : DefId , substs : SubstsRef < ' tcx > ) {
223
220
let unused = self . tcx . unused_generic_params ( def_id) ;
224
- debug ! (
225
- "visit_child_body: unused_parameters={:?} unused={:?}" ,
226
- self . unused_parameters, unused
227
- ) ;
221
+ debug ! ( ?self . unused_parameters, ?unused) ;
228
222
for ( i, arg) in substs. iter ( ) . enumerate ( ) {
229
223
let i = i. try_into ( ) . unwrap ( ) ;
230
224
if !unused. contains ( i) . unwrap_or ( false ) {
231
225
arg. visit_with ( self ) ;
232
226
}
233
227
}
234
- debug ! ( "visit_child_body: unused_parameters={:?}" , self . unused_parameters) ;
228
+ debug ! ( ? self . unused_parameters) ;
235
229
}
236
230
}
237
231
238
232
impl < ' a , ' tcx > Visitor < ' tcx > for MarkUsedGenericParams < ' a , ' tcx > {
233
+ #[ instrument( skip( self , local) ) ]
239
234
fn visit_local_decl ( & mut self , local : Local , local_decl : & LocalDecl < ' tcx > ) {
240
- debug ! ( "visit_local_decl: local_decl={:?}" , local_decl) ;
241
235
if local == Local :: from_usize ( 1 ) {
242
236
let def_kind = self . tcx . def_kind ( self . def_id ) ;
243
237
if matches ! ( def_kind, DefKind :: Closure | DefKind :: Generator ) {
244
238
// Skip visiting the closure/generator that is currently being processed. This only
245
239
// happens because the first argument to the closure is a reference to itself and
246
240
// that will call `visit_substs`, resulting in each generic parameter captured being
247
241
// considered used by default.
248
- debug ! ( "visit_local_decl: skipping closure substs" ) ;
242
+ debug ! ( "skipping closure substs" ) ;
249
243
return ;
250
244
}
251
245
}
@@ -263,15 +257,15 @@ impl<'a, 'tcx> Visitor<'tcx> for MarkUsedGenericParams<'a, 'tcx> {
263
257
}
264
258
265
259
impl < ' a , ' tcx > TypeVisitor < ' tcx > for MarkUsedGenericParams < ' a , ' tcx > {
260
+ #[ instrument( skip( self ) ) ]
266
261
fn visit_const ( & mut self , c : & ' tcx Const < ' tcx > ) -> ControlFlow < Self :: BreakTy > {
267
- debug ! ( "visit_const: c={:?}" , c) ;
268
262
if !c. has_param_types_or_consts ( ) {
269
263
return ControlFlow :: CONTINUE ;
270
264
}
271
265
272
266
match c. val {
273
267
ty:: ConstKind :: Param ( param) => {
274
- debug ! ( "visit_const: param={:?}" , param) ;
268
+ debug ! ( ? param) ;
275
269
self . unused_parameters . clear ( param. index ) ;
276
270
ControlFlow :: CONTINUE
277
271
}
@@ -296,15 +290,15 @@ impl<'a, 'tcx> TypeVisitor<'tcx> for MarkUsedGenericParams<'a, 'tcx> {
296
290
}
297
291
}
298
292
293
+ #[ instrument( skip( self ) ) ]
299
294
fn visit_ty ( & mut self , ty : Ty < ' tcx > ) -> ControlFlow < Self :: BreakTy > {
300
- debug ! ( "visit_ty: ty={:?}" , ty) ;
301
295
if !ty. has_param_types_or_consts ( ) {
302
296
return ControlFlow :: CONTINUE ;
303
297
}
304
298
305
299
match * ty. kind ( ) {
306
300
ty:: Closure ( def_id, substs) | ty:: Generator ( def_id, substs, ..) => {
307
- debug ! ( "visit_ty: def_id={:?}" , def_id) ;
301
+ debug ! ( ? def_id) ;
308
302
// Avoid cycle errors with generators.
309
303
if def_id == self . def_id {
310
304
return ControlFlow :: CONTINUE ;
@@ -316,7 +310,7 @@ impl<'a, 'tcx> TypeVisitor<'tcx> for MarkUsedGenericParams<'a, 'tcx> {
316
310
ControlFlow :: CONTINUE
317
311
}
318
312
ty:: Param ( param) => {
319
- debug ! ( "visit_ty: param={:?}" , param) ;
313
+ debug ! ( ? param) ;
320
314
self . unused_parameters . clear ( param. index ) ;
321
315
ControlFlow :: CONTINUE
322
316
}
@@ -333,8 +327,8 @@ struct HasUsedGenericParams<'a> {
333
327
impl < ' a , ' tcx > TypeVisitor < ' tcx > for HasUsedGenericParams < ' a > {
334
328
type BreakTy = ( ) ;
335
329
330
+ #[ instrument( skip( self ) ) ]
336
331
fn visit_const ( & mut self , c : & ' tcx Const < ' tcx > ) -> ControlFlow < Self :: BreakTy > {
337
- debug ! ( "visit_const: c={:?}" , c) ;
338
332
if !c. has_param_types_or_consts ( ) {
339
333
return ControlFlow :: CONTINUE ;
340
334
}
@@ -351,8 +345,8 @@ impl<'a, 'tcx> TypeVisitor<'tcx> for HasUsedGenericParams<'a> {
351
345
}
352
346
}
353
347
348
+ #[ instrument( skip( self ) ) ]
354
349
fn visit_ty ( & mut self , ty : Ty < ' tcx > ) -> ControlFlow < Self :: BreakTy > {
355
- debug ! ( "visit_ty: ty={:?}" , ty) ;
356
350
if !ty. has_param_types_or_consts ( ) {
357
351
return ControlFlow :: CONTINUE ;
358
352
}
0 commit comments