Skip to content

Commit 95fcbf6

Browse files
Auto merge of #142912 - Kobzol:early-lint-skip, r=<try>
[perf] Try to skip some early lints with `--cap-lints` Opening for perf. r? `@ghost`
2 parents 99b18d6 + 8b9d949 commit 95fcbf6

File tree

4 files changed

+33
-5
lines changed

4 files changed

+33
-5
lines changed

compiler/rustc_interface/src/passes.rs

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -91,6 +91,7 @@ fn pre_expansion_lint<'a>(
9191
registered_tools,
9292
None,
9393
rustc_lint::BuiltinCombinedPreExpansionLintPass::new(),
94+
None::<rustc_lint::BuiltinCombinedPreExpansionLintPass>,
9495
check_node,
9596
);
9697
},
@@ -443,6 +444,7 @@ fn early_lint_checks(tcx: TyCtxt<'_>, (): ()) {
443444
tcx.registered_tools(()),
444445
Some(lint_buffer),
445446
rustc_lint::BuiltinCombinedEarlyLintPass::new(),
447+
Some(rustc_lint::BuiltinCombinedEarlyLintPassMustRun::new()),
446448
(&**krate, &*krate.attrs),
447449
)
448450
}

compiler/rustc_lint/src/early.rs

Lines changed: 16 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -10,8 +10,8 @@ use rustc_ast::{self as ast, HasAttrs};
1010
use rustc_data_structures::stack::ensure_sufficient_stack;
1111
use rustc_feature::Features;
1212
use rustc_middle::ty::{RegisteredTools, TyCtxt};
13-
use rustc_session::Session;
1413
use rustc_session::lint::{BufferedEarlyLint, LintBuffer, LintPass};
14+
use rustc_session::{Session, lint};
1515
use rustc_span::{Ident, Span};
1616
use tracing::debug;
1717

@@ -319,6 +319,7 @@ pub fn check_ast_node<'a>(
319319
registered_tools: &RegisteredTools,
320320
lint_buffer: Option<LintBuffer>,
321321
builtin_lints: impl EarlyLintPass + 'static,
322+
builtin_lints_2: Option<impl EarlyLintPass + 'static>,
322323
check_node: impl EarlyCheckNode<'a>,
323324
) {
324325
let context = EarlyContext::new(
@@ -336,10 +337,22 @@ pub fn check_ast_node<'a>(
336337
let passes =
337338
if pre_expansion { &lint_store.pre_expansion_passes } else { &lint_store.early_passes };
338339
if passes.is_empty() {
339-
check_ast_node_inner(sess, tcx, check_node, context, builtin_lints);
340+
if let Some(builtin_lints_2) = builtin_lints_2
341+
&& sess.opts.lint_cap.is_some_and(|cap| cap == lint::Allow)
342+
{
343+
check_ast_node_inner(sess, tcx, check_node, context, builtin_lints_2);
344+
} else {
345+
check_ast_node_inner(sess, tcx, check_node, context, builtin_lints);
346+
}
340347
} else {
341348
let mut passes: Vec<_> = passes.iter().map(|mk_pass| (mk_pass)()).collect();
342-
passes.push(Box::new(builtin_lints));
349+
if let Some(builtin_lints_2) = builtin_lints_2
350+
&& sess.opts.lint_cap.is_some_and(|cap| cap == lint::Allow)
351+
{
352+
passes.push(Box::new(builtin_lints_2));
353+
} else {
354+
passes.push(Box::new(builtin_lints));
355+
}
343356
let pass = RuntimeCombinedEarlyLintPass { passes: &mut passes[..] };
344357
check_ast_node_inner(sess, tcx, check_node, context, pass);
345358
}

compiler/rustc_lint/src/lib.rs

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -186,6 +186,19 @@ early_lint_methods!(
186186
]
187187
);
188188

189+
early_lint_methods!(
190+
declare_combined_early_lint_pass,
191+
[
192+
pub BuiltinCombinedEarlyLintPassMustRun,
193+
[
194+
UnsafeCode: UnsafeCode,
195+
AnonymousParameters: AnonymousParameters,
196+
EllipsisInclusiveRangePatterns: EllipsisInclusiveRangePatterns::default(),
197+
Expr2024: Expr2024,
198+
]
199+
]
200+
);
201+
189202
late_lint_methods!(
190203
declare_combined_late_lint_pass,
191204
[

compiler/rustc_lint/src/passes.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -240,10 +240,10 @@ macro_rules! declare_combined_early_lint_pass {
240240
#[allow(rustc::lint_pass_impl_without_macro)]
241241
impl $crate::LintPass for $name {
242242
fn name(&self) -> &'static str {
243-
panic!()
243+
stringify!($name)
244244
}
245245
fn get_lints(&self) -> LintVec {
246-
panic!()
246+
$name::get_lints()
247247
}
248248
}
249249
)

0 commit comments

Comments
 (0)