@@ -11,7 +11,7 @@ use rustc_data_structures::parallel;
1111use rustc_data_structures:: steal:: Steal ;
1212use rustc_data_structures:: sync:: { Lrc , OnceCell , WorkerLocal } ;
1313use rustc_errors:: PResult ;
14- use rustc_expand:: base:: { ExtCtxt , LintStoreExpand , ResolverExpand } ;
14+ use rustc_expand:: base:: { ExtCtxt , LintStoreExpand } ;
1515use rustc_hir:: def_id:: { StableCrateId , LOCAL_CRATE } ;
1616use rustc_lint:: { unerased_lint_store, BufferedEarlyLint , EarlyCheckNode , LintStore } ;
1717use rustc_metadata:: creader:: CStore ;
@@ -178,7 +178,7 @@ fn configure_and_expand(mut krate: ast::Crate, resolver: &mut Resolver<'_, '_>)
178178 let sess = tcx. sess ;
179179 let lint_store = unerased_lint_store ( tcx) ;
180180 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) ;
182182 rustc_builtin_macros:: register_builtin_macros ( resolver) ;
183183
184184 krate = sess. time ( "crate_injection" , || {
@@ -302,6 +302,16 @@ fn configure_and_expand(mut krate: ast::Crate, resolver: &mut Resolver<'_, '_>)
302302
303303 // Done with macro expansion!
304304
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+
305315 if sess. opts . unstable_opts . input_stats {
306316 eprintln ! ( "Post-expansion node count: {}" , count_nodes( & krate) ) ;
307317 }
@@ -310,8 +320,6 @@ fn configure_and_expand(mut krate: ast::Crate, resolver: &mut Resolver<'_, '_>)
310320 hir_stats:: print_ast_stats ( & krate, "POST EXPANSION AST STATS" , "ast-stats-2" ) ;
311321 }
312322
313- resolver. resolve_crate ( & krate) ;
314-
315323 // Needs to go *after* expansion to be able to check the results of macro expansion.
316324 sess. time ( "complete_gated_feature_checking" , || {
317325 rustc_ast_passes:: feature_gate:: check_crate ( & krate, sess) ;
@@ -321,7 +329,7 @@ fn configure_and_expand(mut krate: ast::Crate, resolver: &mut Resolver<'_, '_>)
321329 sess. parse_sess . buffered_lints . with_lock ( |buffered_lints| {
322330 info ! ( "{} parse sess buffered_lints" , buffered_lints. len( ) ) ;
323331 for early_lint in buffered_lints. drain ( ..) {
324- resolver . lint_buffer ( ) . add_early_lint ( early_lint) ;
332+ lint_buffer. add_early_lint ( early_lint) ;
325333 }
326334 } ) ;
327335
@@ -340,20 +348,16 @@ fn configure_and_expand(mut krate: ast::Crate, resolver: &mut Resolver<'_, '_>)
340348 }
341349 } ) ;
342350
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+ )
357361}
358362
359363// Returns all the paths that correspond to generated files.
@@ -557,6 +561,7 @@ fn resolver_for_lowering<'tcx>(
557561 ( ) : ( ) ,
558562) -> & ' tcx Steal < ( ty:: ResolverAstLowering , Lrc < ast:: Crate > ) > {
559563 let arenas = Resolver :: arenas ( ) ;
564+ let _ = tcx. registered_tools ( ( ) ) ; // Uses `crate_for_resolver`.
560565 let krate = tcx. crate_for_resolver ( ( ) ) . steal ( ) ;
561566 let mut resolver = Resolver :: new ( tcx, & krate, & arenas) ;
562567 let krate = configure_and_expand ( krate, & mut resolver) ;
@@ -629,6 +634,7 @@ pub static DEFAULT_QUERY_PROVIDERS: LazyLock<Providers> = LazyLock::new(|| {
629634 providers. hir_crate = rustc_ast_lowering:: lower_to_hir;
630635 providers. output_filenames = output_filenames;
631636 providers. resolver_for_lowering = resolver_for_lowering;
637+ providers. early_lint_checks = early_lint_checks;
632638 proc_macro_decls:: provide ( providers) ;
633639 rustc_const_eval:: provide ( providers) ;
634640 rustc_middle:: hir:: provide ( providers) ;
@@ -637,6 +643,7 @@ pub static DEFAULT_QUERY_PROVIDERS: LazyLock<Providers> = LazyLock::new(|| {
637643 rustc_mir_transform:: provide ( providers) ;
638644 rustc_monomorphize:: provide ( providers) ;
639645 rustc_privacy:: provide ( providers) ;
646+ rustc_resolve:: provide ( providers) ;
640647 rustc_hir_analysis:: provide ( providers) ;
641648 rustc_hir_typeck:: provide ( providers) ;
642649 ty:: provide ( providers) ;
0 commit comments