@@ -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