@@ -3,6 +3,7 @@ use crate::proc_macro_decls;
3
3
use crate :: util;
4
4
5
5
use log:: { info, log_enabled, warn} ;
6
+ use once_cell:: sync:: Lazy ;
6
7
use rustc_ast:: mut_visit:: MutVisitor ;
7
8
use rustc_ast:: { self , ast, visit} ;
8
9
use rustc_codegen_ssa:: back:: link:: emit_metadata;
@@ -19,6 +20,7 @@ use rustc_middle::arena::Arena;
19
20
use rustc_middle:: dep_graph:: DepGraph ;
20
21
use rustc_middle:: middle;
21
22
use rustc_middle:: middle:: cstore:: { CrateStore , MetadataLoader , MetadataLoaderDyn } ;
23
+ use rustc_middle:: ty:: query:: Providers ;
22
24
use rustc_middle:: ty:: steal:: Steal ;
23
25
use rustc_middle:: ty:: { self , GlobalCtxt , ResolverOutputs , TyCtxt } ;
24
26
use rustc_mir as mir;
@@ -719,7 +721,8 @@ pub fn prepare_outputs(
719
721
Ok ( outputs)
720
722
}
721
723
722
- pub fn default_provide ( providers : & mut ty:: query:: Providers ) {
724
+ pub static DEFAULT_QUERY_PROVIDERS : Lazy < Providers > = Lazy :: new ( || {
725
+ let providers = & mut Providers :: default ( ) ;
723
726
providers. analysis = analysis;
724
727
proc_macro_decls:: provide ( providers) ;
725
728
plugin:: build:: provide ( providers) ;
@@ -738,12 +741,15 @@ pub fn default_provide(providers: &mut ty::query::Providers) {
738
741
rustc_lint:: provide ( providers) ;
739
742
rustc_symbol_mangling:: provide ( providers) ;
740
743
rustc_codegen_ssa:: provide ( providers) ;
741
- }
744
+ * providers
745
+ } ) ;
742
746
743
- pub fn default_provide_extern ( providers : & mut ty:: query:: Providers ) {
744
- rustc_metadata:: provide_extern ( providers) ;
745
- rustc_codegen_ssa:: provide_extern ( providers) ;
746
- }
747
+ pub static DEFAULT_EXTERN_QUERY_PROVIDERS : Lazy < Providers > = Lazy :: new ( || {
748
+ let mut extern_providers = * DEFAULT_QUERY_PROVIDERS ;
749
+ rustc_metadata:: provide_extern ( & mut extern_providers) ;
750
+ rustc_codegen_ssa:: provide_extern ( & mut extern_providers) ;
751
+ extern_providers
752
+ } ) ;
747
753
748
754
pub struct QueryContext < ' tcx > ( & ' tcx GlobalCtxt < ' tcx > ) ;
749
755
@@ -780,12 +786,11 @@ pub fn create_global_ctxt<'tcx>(
780
786
let query_result_on_disk_cache = rustc_incremental:: load_query_result_cache ( sess) ;
781
787
782
788
let codegen_backend = compiler. codegen_backend ( ) ;
783
- let mut local_providers = ty:: query:: Providers :: default ( ) ;
784
- default_provide ( & mut local_providers) ;
789
+ let mut local_providers = * DEFAULT_QUERY_PROVIDERS ;
785
790
codegen_backend. provide ( & mut local_providers) ;
786
791
787
- let mut extern_providers = local_providers ;
788
- default_provide_extern ( & mut extern_providers) ;
792
+ let mut extern_providers = * DEFAULT_EXTERN_QUERY_PROVIDERS ;
793
+ codegen_backend . provide ( & mut extern_providers) ;
789
794
codegen_backend. provide_extern ( & mut extern_providers) ;
790
795
791
796
if let Some ( callback) = compiler. override_queries {
0 commit comments