@@ -11,7 +11,7 @@ use rustc_data_structures::parallel;
11
11
use rustc_data_structures:: steal:: Steal ;
12
12
use rustc_data_structures:: sync:: { Lrc , OnceCell , WorkerLocal } ;
13
13
use rustc_errors:: PResult ;
14
- use rustc_expand:: base:: { ExtCtxt , LintStoreExpand , ResolverExpand } ;
14
+ use rustc_expand:: base:: { ExtCtxt , LintStoreExpand } ;
15
15
use rustc_hir:: def_id:: { StableCrateId , LOCAL_CRATE } ;
16
16
use rustc_lint:: { unerased_lint_store, BufferedEarlyLint , EarlyCheckNode , LintStore } ;
17
17
use rustc_metadata:: creader:: CStore ;
@@ -178,7 +178,7 @@ fn configure_and_expand(mut krate: ast::Crate, resolver: &mut Resolver<'_, '_>)
178
178
let sess = tcx. sess ;
179
179
let lint_store = unerased_lint_store ( tcx) ;
180
180
let crate_name = tcx. crate_name ( LOCAL_CRATE ) ;
181
- pre_expansion_lint ( sess, lint_store, resolver . registered_tools ( ) , & krate, crate_name) ;
181
+ pre_expansion_lint ( sess, lint_store, tcx . registered_tools ( ( ) ) , & krate, crate_name) ;
182
182
rustc_builtin_macros:: register_builtin_macros ( resolver) ;
183
183
184
184
krate = sess. time ( "crate_injection" , || {
@@ -302,6 +302,16 @@ fn configure_and_expand(mut krate: ast::Crate, resolver: &mut Resolver<'_, '_>)
302
302
303
303
// Done with macro expansion!
304
304
305
+ resolver. resolve_crate ( & krate) ;
306
+
307
+ krate
308
+ }
309
+
310
+ fn early_lint_checks ( tcx : TyCtxt < ' _ > , ( ) : ( ) ) {
311
+ let sess = tcx. sess ;
312
+ let ( resolver, krate) = & * tcx. resolver_for_lowering ( ( ) ) . borrow ( ) ;
313
+ let mut lint_buffer = resolver. lint_buffer . steal ( ) ;
314
+
305
315
if sess. opts . unstable_opts . input_stats {
306
316
eprintln ! ( "Post-expansion node count: {}" , count_nodes( & krate) ) ;
307
317
}
@@ -310,8 +320,6 @@ fn configure_and_expand(mut krate: ast::Crate, resolver: &mut Resolver<'_, '_>)
310
320
hir_stats:: print_ast_stats ( & krate, "POST EXPANSION AST STATS" , "ast-stats-2" ) ;
311
321
}
312
322
313
- resolver. resolve_crate ( & krate) ;
314
-
315
323
// Needs to go *after* expansion to be able to check the results of macro expansion.
316
324
sess. time ( "complete_gated_feature_checking" , || {
317
325
rustc_ast_passes:: feature_gate:: check_crate ( & krate, sess) ;
@@ -321,7 +329,7 @@ fn configure_and_expand(mut krate: ast::Crate, resolver: &mut Resolver<'_, '_>)
321
329
sess. parse_sess . buffered_lints . with_lock ( |buffered_lints| {
322
330
info ! ( "{} parse sess buffered_lints" , buffered_lints. len( ) ) ;
323
331
for early_lint in buffered_lints. drain ( ..) {
324
- resolver . lint_buffer ( ) . add_early_lint ( early_lint) ;
332
+ lint_buffer. add_early_lint ( early_lint) ;
325
333
}
326
334
} ) ;
327
335
@@ -340,20 +348,16 @@ fn configure_and_expand(mut krate: ast::Crate, resolver: &mut Resolver<'_, '_>)
340
348
}
341
349
} ) ;
342
350
343
- sess. time ( "early_lint_checks" , || {
344
- let lint_buffer = Some ( std:: mem:: take ( resolver. lint_buffer ( ) ) ) ;
345
- rustc_lint:: check_ast_node (
346
- sess,
347
- false ,
348
- lint_store,
349
- resolver. registered_tools ( ) ,
350
- lint_buffer,
351
- rustc_lint:: BuiltinCombinedEarlyLintPass :: new ( ) ,
352
- & krate,
353
- )
354
- } ) ;
355
-
356
- krate
351
+ let lint_store = unerased_lint_store ( tcx) ;
352
+ rustc_lint:: check_ast_node (
353
+ sess,
354
+ false ,
355
+ lint_store,
356
+ tcx. registered_tools ( ( ) ) ,
357
+ Some ( lint_buffer) ,
358
+ rustc_lint:: BuiltinCombinedEarlyLintPass :: new ( ) ,
359
+ & * * krate,
360
+ )
357
361
}
358
362
359
363
// Returns all the paths that correspond to generated files.
@@ -557,6 +561,7 @@ fn resolver_for_lowering<'tcx>(
557
561
( ) : ( ) ,
558
562
) -> & ' tcx Steal < ( ty:: ResolverAstLowering , Lrc < ast:: Crate > ) > {
559
563
let arenas = Resolver :: arenas ( ) ;
564
+ let _ = tcx. registered_tools ( ( ) ) ; // Uses `crate_for_resolver`.
560
565
let krate = tcx. crate_for_resolver ( ( ) ) . steal ( ) ;
561
566
let mut resolver = Resolver :: new ( tcx, & krate, & arenas) ;
562
567
let krate = configure_and_expand ( krate, & mut resolver) ;
@@ -629,6 +634,7 @@ pub static DEFAULT_QUERY_PROVIDERS: LazyLock<Providers> = LazyLock::new(|| {
629
634
providers. hir_crate = rustc_ast_lowering:: lower_to_hir;
630
635
providers. output_filenames = output_filenames;
631
636
providers. resolver_for_lowering = resolver_for_lowering;
637
+ providers. early_lint_checks = early_lint_checks;
632
638
proc_macro_decls:: provide ( providers) ;
633
639
rustc_const_eval:: provide ( providers) ;
634
640
rustc_middle:: hir:: provide ( providers) ;
@@ -637,6 +643,7 @@ pub static DEFAULT_QUERY_PROVIDERS: LazyLock<Providers> = LazyLock::new(|| {
637
643
rustc_mir_transform:: provide ( providers) ;
638
644
rustc_monomorphize:: provide ( providers) ;
639
645
rustc_privacy:: provide ( providers) ;
646
+ rustc_resolve:: provide ( providers) ;
640
647
rustc_hir_analysis:: provide ( providers) ;
641
648
rustc_hir_typeck:: provide ( providers) ;
642
649
ty:: provide ( providers) ;
0 commit comments