@@ -349,11 +349,26 @@ pub(super) fn late_lint_mod<'tcx, T: LateLintPass<'tcx> + 'tcx>(
349
349
only_module : true ,
350
350
} ;
351
351
352
+ // Note: `passes` is often empty. In that case, it's faster to run
353
+ // `builtin_lints` directly rather than bundling it up into the
354
+ // `RuntimeCombinedLateLintPass`.
352
355
let mut passes: Vec < _ > =
353
356
unerased_lint_store ( tcx) . late_module_passes . iter ( ) . map ( |mk_pass| ( mk_pass) ( tcx) ) . collect ( ) ;
354
- passes. push ( Box :: new ( builtin_lints) ) ;
355
- let pass = RuntimeCombinedLateLintPass { passes : & mut passes[ ..] } ;
357
+ if passes. is_empty ( ) {
358
+ late_lint_mod_inner ( tcx, module_def_id, context, builtin_lints) ;
359
+ } else {
360
+ passes. push ( Box :: new ( builtin_lints) ) ;
361
+ let pass = RuntimeCombinedLateLintPass { passes : & mut passes[ ..] } ;
362
+ late_lint_mod_inner ( tcx, module_def_id, context, pass) ;
363
+ }
364
+ }
356
365
366
+ fn late_lint_mod_inner < ' tcx , T : LateLintPass < ' tcx > > (
367
+ tcx : TyCtxt < ' tcx > ,
368
+ module_def_id : LocalDefId ,
369
+ context : LateContext < ' tcx > ,
370
+ pass : T ,
371
+ ) {
357
372
let mut cx = LateContextAndPass { context, pass } ;
358
373
359
374
let ( module, _span, hir_id) = tcx. hir ( ) . get_module ( module_def_id) ;
@@ -380,11 +395,25 @@ fn late_lint_crate<'tcx, T: LateLintPass<'tcx> + 'tcx>(tcx: TyCtxt<'tcx>, builti
380
395
only_module : false ,
381
396
} ;
382
397
398
+ // Note: `passes` is often empty. In that case, it's faster to run
399
+ // `builtin_lints` directly rather than bundling it up into the
400
+ // `RuntimeCombinedLateLintPass`.
383
401
let mut passes: Vec < _ > =
384
402
unerased_lint_store ( tcx) . late_passes . iter ( ) . map ( |mk_pass| ( mk_pass) ( tcx) ) . collect ( ) ;
385
- passes. push ( Box :: new ( builtin_lints) ) ;
386
- let pass = RuntimeCombinedLateLintPass { passes : & mut passes[ ..] } ;
403
+ if passes. is_empty ( ) {
404
+ late_lint_crate_inner ( tcx, context, builtin_lints) ;
405
+ } else {
406
+ passes. push ( Box :: new ( builtin_lints) ) ;
407
+ let pass = RuntimeCombinedLateLintPass { passes : & mut passes[ ..] } ;
408
+ late_lint_crate_inner ( tcx, context, pass) ;
409
+ }
410
+ }
387
411
412
+ fn late_lint_crate_inner < ' tcx , T : LateLintPass < ' tcx > > (
413
+ tcx : TyCtxt < ' tcx > ,
414
+ context : LateContext < ' tcx > ,
415
+ pass : T ,
416
+ ) {
388
417
let mut cx = LateContextAndPass { context, pass } ;
389
418
390
419
// Visit the whole crate.
0 commit comments