Skip to content

Commit 4ed4913

Browse files
committed
Merge ExternProviders into the general Providers struct
1 parent 2ba911c commit 4ed4913

File tree

14 files changed

+30
-48
lines changed

14 files changed

+30
-48
lines changed

Diff for: compiler/rustc_codegen_ssa/src/back/symbol_export.rs

+4-6
Original file line numberDiff line numberDiff line change
@@ -11,10 +11,10 @@ use rustc_middle::middle::exported_symbols::{
1111
metadata_symbol_name, ExportedSymbol, SymbolExportInfo, SymbolExportKind, SymbolExportLevel,
1212
};
1313
use rustc_middle::query::LocalCrate;
14-
use rustc_middle::query::{ExternProviders, Providers};
1514
use rustc_middle::ty::Instance;
1615
use rustc_middle::ty::{self, SymbolName, TyCtxt};
1716
use rustc_middle::ty::{GenericArgKind, GenericArgsRef};
17+
use rustc_middle::util::Providers;
1818
use rustc_session::config::{CrateType, OomStrategy};
1919
use rustc_target::spec::SanitizerSet;
2020

@@ -457,11 +457,9 @@ pub fn provide(providers: &mut Providers) {
457457
providers.is_unreachable_local_definition = is_unreachable_local_definition_provider;
458458
providers.upstream_drop_glue_for = upstream_drop_glue_for_provider;
459459
providers.wasm_import_module_map = wasm_import_module_map;
460-
}
461-
462-
pub fn provide_extern(providers: &mut ExternProviders) {
463-
providers.is_reachable_non_generic = is_reachable_non_generic_provider_extern;
464-
providers.upstream_monomorphizations_for = upstream_monomorphizations_for_provider;
460+
providers.extern_queries.is_reachable_non_generic = is_reachable_non_generic_provider_extern;
461+
providers.extern_queries.upstream_monomorphizations_for =
462+
upstream_monomorphizations_for_provider;
465463
}
466464

467465
fn symbol_export_level(tcx: TyCtxt<'_>, sym_def_id: DefId) -> SymbolExportLevel {

Diff for: compiler/rustc_codegen_ssa/src/lib.rs

+1-5
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,7 @@ use rustc_middle::dep_graph::WorkProduct;
3131
use rustc_middle::middle::debugger_visualizer::DebuggerVisualizerFile;
3232
use rustc_middle::middle::dependency_format::Dependencies;
3333
use rustc_middle::middle::exported_symbols::SymbolExportKind;
34-
use rustc_middle::query::{ExternProviders, Providers};
34+
use rustc_middle::util::Providers;
3535
use rustc_serialize::opaque::{FileEncoder, MemDecoder};
3636
use rustc_serialize::{Decodable, Decoder, Encodable, Encoder};
3737
use rustc_session::config::{CrateType, OutputFilenames, OutputType, RUST_CGU_EXT};
@@ -190,10 +190,6 @@ pub fn provide(providers: &mut Providers) {
190190
crate::codegen_attrs::provide(providers);
191191
}
192192

193-
pub fn provide_extern(providers: &mut ExternProviders) {
194-
crate::back::symbol_export::provide_extern(providers);
195-
}
196-
197193
/// Checks if the given filename ends with the `.rcgu.o` extension that `rustc`
198194
/// uses for the object files it generates.
199195
pub fn looks_like_rust_object_file(filename: &str) -> bool {

Diff for: compiler/rustc_codegen_ssa/src/traits/backend.rs

-2
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,6 @@ use rustc_data_structures::sync::{DynSend, DynSync};
1111
use rustc_errors::ErrorGuaranteed;
1212
use rustc_metadata::EncodedMetadata;
1313
use rustc_middle::dep_graph::{WorkProduct, WorkProductId};
14-
use rustc_middle::query::ExternProviders;
1514
use rustc_middle::ty::layout::{FnAbiOf, HasTyCtxt, LayoutOf, TyAndLayout};
1615
use rustc_middle::ty::{Ty, TyCtxt};
1716
use rustc_middle::util::Providers;
@@ -86,7 +85,6 @@ pub trait CodegenBackend {
8685
}
8786

8887
fn provide(&self, _providers: &mut Providers) {}
89-
fn provide_extern(&self, _providers: &mut ExternProviders) {}
9088
fn codegen_crate<'tcx>(
9189
&self,
9290
tcx: TyCtxt<'tcx>,

Diff for: compiler/rustc_interface/src/interface.rs

+2-3
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,6 @@ use rustc_data_structures::sync::Lrc;
99
use rustc_errors::registry::Registry;
1010
use rustc_errors::{ErrorGuaranteed, Handler};
1111
use rustc_lint::LintStore;
12-
use rustc_middle::query::ExternProviders;
1312
use rustc_middle::util::Providers;
1413
use rustc_middle::{bug, ty};
1514
use rustc_parse::maybe_new_parser_from_source_str;
@@ -38,7 +37,7 @@ pub struct Compiler {
3837
pub(crate) sess: Lrc<Session>,
3938
codegen_backend: Lrc<dyn CodegenBackend>,
4039
pub(crate) register_lints: Option<Box<dyn Fn(&Session, &mut LintStore) + Send + Sync>>,
41-
pub(crate) override_queries: Option<fn(&Session, &mut Providers, &mut ExternProviders)>,
40+
pub(crate) override_queries: Option<fn(&Session, &mut Providers)>,
4241
}
4342

4443
impl Compiler {
@@ -272,7 +271,7 @@ pub struct Config {
272271
/// the list of queries.
273272
///
274273
/// The second parameter is local providers and the third parameter is external providers.
275-
pub override_queries: Option<fn(&Session, &mut Providers, &mut ExternProviders)>,
274+
pub override_queries: Option<fn(&Session, &mut Providers)>,
276275

277276
/// This is a callback from the driver that is called to create a codegen backend.
278277
pub make_codegen_backend:

Diff for: compiler/rustc_interface/src/lib.rs

+1-1
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,7 @@ pub mod util;
2525

2626
pub use callbacks::setup_callbacks;
2727
pub use interface::{run_compiler, Config};
28-
pub use passes::{DEFAULT_EXTERN_QUERY_PROVIDERS, DEFAULT_QUERY_PROVIDERS};
28+
pub use passes::DEFAULT_QUERY_PROVIDERS;
2929
pub use queries::Queries;
3030

3131
#[cfg(test)]

Diff for: compiler/rustc_interface/src/passes.rs

+2-13
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,6 @@ use rustc_lint::{unerased_lint_store, BufferedEarlyLint, EarlyCheckNode, LintSto
1818
use rustc_metadata::creader::CStore;
1919
use rustc_middle::arena::Arena;
2020
use rustc_middle::dep_graph::DepGraph;
21-
use rustc_middle::query::ExternProviders;
2221
use rustc_middle::ty::{self, GlobalCtxt, RegisteredTools, TyCtxt};
2322
use rustc_middle::util::Providers;
2423
use rustc_mir_build as mir_build;
@@ -676,13 +675,6 @@ pub static DEFAULT_QUERY_PROVIDERS: LazyLock<Providers> = LazyLock::new(|| {
676675
*providers
677676
});
678677

679-
pub static DEFAULT_EXTERN_QUERY_PROVIDERS: LazyLock<ExternProviders> = LazyLock::new(|| {
680-
let mut extern_providers = ExternProviders::default();
681-
rustc_metadata::provide_extern(&mut extern_providers);
682-
rustc_codegen_ssa::provide_extern(&mut extern_providers);
683-
extern_providers
684-
});
685-
686678
pub fn create_global_ctxt<'tcx>(
687679
compiler: &'tcx Compiler,
688680
crate_types: Vec<CrateType>,
@@ -706,11 +698,8 @@ pub fn create_global_ctxt<'tcx>(
706698
let mut providers = *DEFAULT_QUERY_PROVIDERS;
707699
codegen_backend.provide(&mut providers);
708700

709-
let mut extern_providers = *DEFAULT_EXTERN_QUERY_PROVIDERS;
710-
codegen_backend.provide_extern(&mut extern_providers);
711-
712701
if let Some(callback) = compiler.override_queries {
713-
callback(sess, &mut providers, &mut extern_providers);
702+
callback(sess, &mut providers);
714703
}
715704

716705
let incremental = dep_graph.is_fully_enabled();
@@ -729,7 +718,7 @@ pub fn create_global_ctxt<'tcx>(
729718
rustc_query_impl::query_callbacks(arena),
730719
rustc_query_impl::query_system(
731720
providers.queries,
732-
extern_providers,
721+
providers.extern_queries,
733722
query_result_on_disk_cache,
734723
incremental,
735724
),

Diff for: compiler/rustc_metadata/src/lib.rs

+1-1
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,7 @@ extern crate rustc_middle;
2626
#[macro_use]
2727
extern crate tracing;
2828

29-
pub use rmeta::{provide, provide_extern};
29+
pub use rmeta::provide;
3030
use rustc_errors::{DiagnosticMessage, SubdiagnosticMessage};
3131
use rustc_fluent_macro::fluent_messages;
3232

Diff for: compiler/rustc_metadata/src/rmeta/decoder.rs

-1
Original file line numberDiff line numberDiff line change
@@ -44,7 +44,6 @@ use std::sync::atomic::Ordering;
4444
use std::{io, iter, mem};
4545

4646
pub(super) use cstore_impl::provide;
47-
pub use cstore_impl::provide_extern;
4847
use rustc_span::hygiene::HygieneDecodeContext;
4948

5049
mod cstore_impl;

Diff for: compiler/rustc_metadata/src/rmeta/decoder/cstore_impl.rs

+6-4
Original file line numberDiff line numberDiff line change
@@ -14,10 +14,11 @@ use rustc_middle::arena::ArenaAllocatable;
1414
use rustc_middle::metadata::ModChild;
1515
use rustc_middle::middle::exported_symbols::ExportedSymbol;
1616
use rustc_middle::middle::stability::DeprecationEntry;
17+
use rustc_middle::query::ExternProviders;
1718
use rustc_middle::query::LocalCrate;
18-
use rustc_middle::query::{ExternProviders, Providers};
1919
use rustc_middle::ty::fast_reject::SimplifiedType;
2020
use rustc_middle::ty::{self, TyCtxt};
21+
use rustc_middle::util::Providers;
2122
use rustc_session::cstore::CrateStore;
2223
use rustc_session::{Session, StableCrateId};
2324
use rustc_span::hygiene::{ExpnHash, ExpnId};
@@ -147,7 +148,7 @@ macro_rules! provide_one {
147148
macro_rules! provide {
148149
($tcx:ident, $def_id:ident, $other:ident, $cdata:ident,
149150
$($name:ident => { $($compute:tt)* })*) => {
150-
pub fn provide_extern(providers: &mut ExternProviders) {
151+
fn provide_extern(providers: &mut ExternProviders) {
151152
$(provide_one! {
152153
$tcx, $def_id, $other, $cdata, $name => { $($compute)* }
153154
})*
@@ -385,7 +386,7 @@ pub(in crate::rmeta) fn provide(providers: &mut Providers) {
385386
// FIXME(#44234) - almost all of these queries have no sub-queries and
386387
// therefore no actual inputs, they're just reading tables calculated in
387388
// resolve! Does this work? Unsure! That's what the issue is about
388-
*providers = Providers {
389+
providers.queries = rustc_middle::query::Providers {
389390
allocator_kind: |tcx, ()| CStore::from_tcx(tcx).allocator_kind(),
390391
alloc_error_handler_kind: |tcx, ()| CStore::from_tcx(tcx).alloc_error_handler_kind(),
391392
is_private_dep: |_tcx, LocalCrate| false,
@@ -513,8 +514,9 @@ pub(in crate::rmeta) fn provide(providers: &mut Providers) {
513514
tcx.untracked().cstore.freeze();
514515
tcx.arena.alloc_from_iter(CStore::from_tcx(tcx).iter_crate_data().map(|(cnum, _)| cnum))
515516
},
516-
..*providers
517+
..providers.queries
517518
};
519+
provide_extern(&mut providers.extern_queries);
518520
}
519521

520522
impl CStore {

Diff for: compiler/rustc_metadata/src/rmeta/mod.rs

+1-2
Original file line numberDiff line numberDiff line change
@@ -21,10 +21,10 @@ use rustc_middle::middle::codegen_fn_attrs::CodegenFnAttrs;
2121
use rustc_middle::middle::exported_symbols::{ExportedSymbol, SymbolExportInfo};
2222
use rustc_middle::middle::resolve_bound_vars::ObjectLifetimeDefault;
2323
use rustc_middle::mir;
24-
use rustc_middle::query::Providers;
2524
use rustc_middle::ty::fast_reject::SimplifiedType;
2625
use rustc_middle::ty::{self, ReprOptions, Ty, UnusedGenericParams};
2726
use rustc_middle::ty::{DeducedParamAttrs, GeneratorDiagnosticData, ParameterizedOverTcx, TyCtxt};
27+
use rustc_middle::util::Providers;
2828
use rustc_serialize::opaque::FileEncoder;
2929
use rustc_session::config::SymbolManglingVersion;
3030
use rustc_session::cstore::{CrateDepKind, ForeignModule, LinkagePreference, NativeLib};
@@ -38,7 +38,6 @@ use rustc_target::spec::{PanicStrategy, TargetTriple};
3838
use std::marker::PhantomData;
3939
use std::num::NonZeroUsize;
4040

41-
pub use decoder::provide_extern;
4241
use decoder::DecodeContext;
4342
pub(crate) use decoder::{CrateMetadata, CrateNumMap, MetadataBlob};
4443
use encoder::EncodeContext;

Diff for: compiler/rustc_middle/src/util/mod.rs

+1
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@ pub use find_self_call::find_self_call;
99
#[derive(Default, Copy, Clone)]
1010
pub struct Providers {
1111
pub queries: rustc_middle::query::Providers,
12+
pub extern_queries: rustc_middle::query::ExternProviders,
1213
pub hooks: rustc_middle::hooks::Providers,
1314
}
1415

Diff for: src/librustdoc/core.rs

+1-1
Original file line numberDiff line numberDiff line change
@@ -263,7 +263,7 @@ pub(crate) fn create_config(
263263
lint_caps,
264264
parse_sess_created: None,
265265
register_lints: Some(Box::new(crate::lint::register_lints)),
266-
override_queries: Some(|_sess, providers, _external_providers| {
266+
override_queries: Some(|_sess, providers| {
267267
// We do not register late module lints, so this only runs `MissingDoc`.
268268
// Most lints will require typechecking, so just don't run them.
269269
providers.lint_mod = |tcx, module_def_id| late_lint_mod(tcx, module_def_id, MissingDoc);

Diff for: src/tools/miri/src/bin/miri.rs

+8-7
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,8 @@ use rustc_middle::{
2828
middle::exported_symbols::{
2929
ExportedSymbol, SymbolExportInfo, SymbolExportKind, SymbolExportLevel,
3030
},
31-
query::{ExternProviders, LocalCrate},
31+
query::{LocalCrate},
32+
util::Providers,
3233
ty::TyCtxt,
3334
};
3435
use rustc_session::config::{CrateType, ErrorOutputType, OptLevel};
@@ -43,11 +44,11 @@ struct MiriCompilerCalls {
4344

4445
impl rustc_driver::Callbacks for MiriCompilerCalls {
4546
fn config(&mut self, config: &mut Config) {
46-
config.override_queries = Some(|_, _, external_providers| {
47-
external_providers.used_crate_source = |tcx, cnum| {
48-
let mut providers = ExternProviders::default();
49-
rustc_metadata::provide_extern(&mut providers);
50-
let mut crate_source = (providers.used_crate_source)(tcx, cnum);
47+
config.override_queries = Some(|_, providers| {
48+
providers.extern_queries.used_crate_source = |tcx, cnum| {
49+
let mut providers = Providers::default();
50+
rustc_metadata::provide(&mut providers);
51+
let mut crate_source = (providers.extern_queries.used_crate_source)(tcx, cnum);
5152
// HACK: rustc will emit "crate ... required to be available in rlib format, but
5253
// was not found in this form" errors once we use `tcx.dependency_formats()` if
5354
// there's no rlib provided, so setting a dummy path here to workaround those errors.
@@ -125,7 +126,7 @@ impl rustc_driver::Callbacks for MiriBeRustCompilerCalls {
125126
if config.opts.prints.is_empty() && self.target_crate {
126127
// Queries overridden here affect the data stored in `rmeta` files of dependencies,
127128
// which will be used later in non-`MIRI_BE_RUSTC` mode.
128-
config.override_queries = Some(|_, local_providers, _| {
129+
config.override_queries = Some(|_, local_providers| {
129130
// `exported_symbols` and `reachable_non_generics` provided by rustc always returns
130131
// an empty result if `tcx.sess.opts.output_types.should_codegen()` is false.
131132
local_providers.exported_symbols = |tcx, LocalCrate| {

Diff for: tests/run-make-fulldeps/obtain-borrowck/driver.rs

+2-2
Original file line numberDiff line numberDiff line change
@@ -25,8 +25,8 @@ use rustc_hir::def_id::LocalDefId;
2525
use rustc_interface::interface::Compiler;
2626
use rustc_interface::{Config, Queries};
2727
use rustc_middle::query::queries::mir_borrowck::ProvidedValue;
28-
use rustc_middle::query::{ExternProviders, Providers};
2928
use rustc_middle::ty::TyCtxt;
29+
use rustc_middle::util::Providers;
3030
use rustc_session::Session;
3131
use std::cell::RefCell;
3232
use std::collections::HashMap;
@@ -110,7 +110,7 @@ impl rustc_driver::Callbacks for CompilerCalls {
110110
}
111111
}
112112

113-
fn override_queries(_session: &Session, local: &mut Providers, _external: &mut ExternProviders) {
113+
fn override_queries(_session: &Session, local: &mut Providers) {
114114
local.mir_borrowck = mir_borrowck;
115115
}
116116

0 commit comments

Comments
 (0)