@@ -3,6 +3,7 @@ use crate::proc_macro_decls;
33use crate :: util;
44
55use log:: { info, log_enabled, warn} ;
6+ use once_cell:: sync:: Lazy ;
67use rustc_ast:: mut_visit:: MutVisitor ;
78use rustc_ast:: { self , ast, visit} ;
89use rustc_codegen_ssa:: back:: link:: emit_metadata;
@@ -19,6 +20,7 @@ use rustc_middle::arena::Arena;
1920use rustc_middle:: dep_graph:: DepGraph ;
2021use rustc_middle:: middle;
2122use rustc_middle:: middle:: cstore:: { CrateStore , MetadataLoader , MetadataLoaderDyn } ;
23+ use rustc_middle:: ty:: query:: Providers ;
2224use rustc_middle:: ty:: steal:: Steal ;
2325use rustc_middle:: ty:: { self , GlobalCtxt , ResolverOutputs , TyCtxt } ;
2426use rustc_mir as mir;
@@ -719,7 +721,8 @@ pub fn prepare_outputs(
719721 Ok ( outputs)
720722}
721723
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 ( ) ;
723726 providers. analysis = analysis;
724727 proc_macro_decls:: provide ( providers) ;
725728 plugin:: build:: provide ( providers) ;
@@ -738,12 +741,15 @@ pub fn default_provide(providers: &mut ty::query::Providers) {
738741 rustc_lint:: provide ( providers) ;
739742 rustc_symbol_mangling:: provide ( providers) ;
740743 rustc_codegen_ssa:: provide ( providers) ;
741- }
744+ * providers
745+ } ) ;
742746
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+ } ) ;
747753
748754pub struct QueryContext < ' tcx > ( & ' tcx GlobalCtxt < ' tcx > ) ;
749755
@@ -780,12 +786,11 @@ pub fn create_global_ctxt<'tcx>(
780786 let query_result_on_disk_cache = rustc_incremental:: load_query_result_cache ( sess) ;
781787
782788 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 ;
785790 codegen_backend. provide ( & mut local_providers) ;
786791
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) ;
789794 codegen_backend. provide_extern ( & mut extern_providers) ;
790795
791796 if let Some ( callback) = compiler. override_queries {
0 commit comments