Skip to content

Commit 2ba911c

Browse files
committed
Have a single struct for queries and hook
1 parent 9defc97 commit 2ba911c

File tree

8 files changed

+46
-26
lines changed

8 files changed

+46
-26
lines changed

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

+2-3
Original file line numberDiff line numberDiff line change
@@ -80,9 +80,8 @@ use rustc_errors::{DiagnosticMessage, ErrorGuaranteed, Handler, SubdiagnosticMes
8080
use rustc_fluent_macro::fluent_messages;
8181
use rustc_metadata::EncodedMetadata;
8282
use rustc_middle::dep_graph::{WorkProduct, WorkProductId};
83-
use rustc_middle::query::Providers;
83+
use rustc_middle::util::Providers;
8484
use rustc_middle::ty::TyCtxt;
85-
use rustc_middle::hooks;
8685
use rustc_session::config::{Lto, OptLevel, OutputFilenames};
8786
use rustc_session::Session;
8887
use rustc_span::Symbol;
@@ -128,7 +127,7 @@ impl CodegenBackend for GccCodegenBackend {
128127
*self.supports_128bit_integers.lock().expect("lock") = check_context.get_last_error() == Ok(None);
129128
}
130129

131-
fn provide(&self, providers: &mut Providers, _: &mut hooks::Providers) {
130+
fn provide(&self, providers: &mut Providers) {
132131
// FIXME(antoyo) compute list of enabled features from cli flags
133132
providers.global_backend_features = |_tcx, ()| vec![];
134133
}

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

+2-3
Original file line numberDiff line numberDiff line change
@@ -39,9 +39,8 @@ use rustc_errors::{DiagnosticMessage, ErrorGuaranteed, FatalError, Handler, Subd
3939
use rustc_fluent_macro::fluent_messages;
4040
use rustc_metadata::EncodedMetadata;
4141
use rustc_middle::dep_graph::{WorkProduct, WorkProductId};
42-
use rustc_middle::hooks;
43-
use rustc_middle::query::Providers;
4442
use rustc_middle::ty::TyCtxt;
43+
use rustc_middle::util::Providers;
4544
use rustc_session::config::{OptLevel, OutputFilenames, PrintKind, PrintRequest};
4645
use rustc_session::Session;
4746
use rustc_span::symbol::Symbol;
@@ -269,7 +268,7 @@ impl CodegenBackend for LlvmCodegenBackend {
269268
llvm_util::init(sess); // Make sure llvm is inited
270269
}
271270

272-
fn provide(&self, providers: &mut Providers, _hooks: &mut hooks::Providers) {
271+
fn provide(&self, providers: &mut Providers) {
273272
providers.global_backend_features =
274273
|tcx, ()| llvm_util::global_llvm_features(tcx.sess, true)
275274
}

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

+3-3
Original file line numberDiff line numberDiff line change
@@ -11,10 +11,10 @@ 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::hooks;
15-
use rustc_middle::query::{ExternProviders, Providers};
14+
use rustc_middle::query::ExternProviders;
1615
use rustc_middle::ty::layout::{FnAbiOf, HasTyCtxt, LayoutOf, TyAndLayout};
1716
use rustc_middle::ty::{Ty, TyCtxt};
17+
use rustc_middle::util::Providers;
1818
use rustc_session::{
1919
config::{self, OutputFilenames, PrintRequest},
2020
cstore::MetadataLoaderDyn,
@@ -85,7 +85,7 @@ pub trait CodegenBackend {
8585
Box::new(crate::back::metadata::DefaultMetadataLoader)
8686
}
8787

88-
fn provide(&self, _providers: &mut Providers, _hooks: &mut hooks::Providers) {}
88+
fn provide(&self, _providers: &mut Providers) {}
8989
fn provide_extern(&self, _providers: &mut ExternProviders) {}
9090
fn codegen_crate<'tcx>(
9191
&self,

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

+3-4
Original file line numberDiff line numberDiff line change
@@ -38,12 +38,11 @@ pub use errors::ReportErrorExt;
3838

3939
use rustc_errors::{DiagnosticMessage, SubdiagnosticMessage};
4040
use rustc_fluent_macro::fluent_messages;
41-
use rustc_middle::query::Providers;
42-
use rustc_middle::{hooks, ty};
41+
use rustc_middle::{ty, util::Providers};
4342

4443
fluent_messages! { "../messages.ftl" }
4544

46-
pub fn provide(providers: &mut Providers, hooks: &mut hooks::Providers) {
45+
pub fn provide(providers: &mut Providers) {
4746
const_eval::provide(providers);
4847
providers.eval_to_const_value_raw = const_eval::eval_to_const_value_raw_provider;
4948
providers.eval_to_allocation_raw = const_eval::eval_to_allocation_raw_provider;
@@ -52,7 +51,7 @@ pub fn provide(providers: &mut Providers, hooks: &mut hooks::Providers) {
5251
let (param_env, raw) = param_env_and_value.into_parts();
5352
const_eval::eval_to_valtree(tcx, param_env, raw)
5453
};
55-
hooks.try_destructure_mir_constant_for_diagnostics =
54+
providers.hooks.try_destructure_mir_constant_for_diagnostics =
5655
const_eval::try_destructure_mir_constant_for_diagnostics;
5756
providers.valtree_to_const_val = |tcx, (ty, valtree)| {
5857
const_eval::valtree_to_const_value(tcx, ty::ParamEnv::empty().and(ty), valtree)

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

+2-1
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,8 @@ 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, Providers};
12+
use rustc_middle::query::ExternProviders;
13+
use rustc_middle::util::Providers;
1314
use rustc_middle::{bug, ty};
1415
use rustc_parse::maybe_new_parser_from_source_str;
1516
use rustc_query_impl::QueryCtxt;

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

+10-11
Original file line numberDiff line numberDiff line change
@@ -18,9 +18,9 @@ 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::hooks;
22-
use rustc_middle::query::{ExternProviders, Providers};
21+
use rustc_middle::query::ExternProviders;
2322
use rustc_middle::ty::{self, GlobalCtxt, RegisteredTools, TyCtxt};
23+
use rustc_middle::util::Providers;
2424
use rustc_mir_build as mir_build;
2525
use rustc_parse::{parse_crate_from_file, parse_crate_from_source_str, validate_attr};
2626
use rustc_passes::{self, abi_test, hir_stats, layout_test};
@@ -646,16 +646,15 @@ fn output_filenames(tcx: TyCtxt<'_>, (): ()) -> Arc<OutputFilenames> {
646646
outputs.into()
647647
}
648648

649-
pub static DEFAULT_QUERY_PROVIDERS: LazyLock<(Providers, hooks::Providers)> = LazyLock::new(|| {
649+
pub static DEFAULT_QUERY_PROVIDERS: LazyLock<Providers> = LazyLock::new(|| {
650650
let providers = &mut Providers::default();
651-
let hooks = &mut hooks::Providers::default();
652651
providers.analysis = analysis;
653652
providers.hir_crate = rustc_ast_lowering::lower_to_hir;
654653
providers.output_filenames = output_filenames;
655654
providers.resolver_for_lowering = resolver_for_lowering;
656655
providers.early_lint_checks = early_lint_checks;
657656
proc_macro_decls::provide(providers);
658-
rustc_const_eval::provide(providers, hooks);
657+
rustc_const_eval::provide(providers);
659658
rustc_middle::hir::provide(providers);
660659
mir_borrowck::provide(providers);
661660
mir_build::provide(providers);
@@ -674,7 +673,7 @@ pub static DEFAULT_QUERY_PROVIDERS: LazyLock<(Providers, hooks::Providers)> = La
674673
rustc_lint::provide(providers);
675674
rustc_symbol_mangling::provide(providers);
676675
rustc_codegen_ssa::provide(providers);
677-
(*providers, *hooks)
676+
*providers
678677
});
679678

680679
pub static DEFAULT_EXTERN_QUERY_PROVIDERS: LazyLock<ExternProviders> = LazyLock::new(|| {
@@ -704,14 +703,14 @@ pub fn create_global_ctxt<'tcx>(
704703
let query_result_on_disk_cache = rustc_incremental::load_query_result_cache(sess);
705704

706705
let codegen_backend = compiler.codegen_backend();
707-
let (mut local_providers, mut hooks) = *DEFAULT_QUERY_PROVIDERS;
708-
codegen_backend.provide(&mut local_providers, &mut hooks);
706+
let mut providers = *DEFAULT_QUERY_PROVIDERS;
707+
codegen_backend.provide(&mut providers);
709708

710709
let mut extern_providers = *DEFAULT_EXTERN_QUERY_PROVIDERS;
711710
codegen_backend.provide_extern(&mut extern_providers);
712711

713712
if let Some(callback) = compiler.override_queries {
714-
callback(sess, &mut local_providers, &mut extern_providers);
713+
callback(sess, &mut providers, &mut extern_providers);
715714
}
716715

717716
let incremental = dep_graph.is_fully_enabled();
@@ -729,12 +728,12 @@ pub fn create_global_ctxt<'tcx>(
729728
dep_graph,
730729
rustc_query_impl::query_callbacks(arena),
731730
rustc_query_impl::query_system(
732-
local_providers,
731+
providers.queries,
733732
extern_providers,
734733
query_result_on_disk_cache,
735734
incremental,
736735
),
737-
hooks,
736+
providers.hooks,
738737
)
739738
})
740739
})

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

+23
Original file line numberDiff line numberDiff line change
@@ -5,3 +5,26 @@ pub mod find_self_call;
55

66
pub use call_kind::{call_kind, CallDesugaringKind, CallKind};
77
pub use find_self_call::find_self_call;
8+
9+
#[derive(Default, Copy, Clone)]
10+
pub struct Providers {
11+
pub queries: rustc_middle::query::Providers,
12+
pub hooks: rustc_middle::hooks::Providers,
13+
}
14+
15+
/// Backwards compatibility hack to keep the diff small. This
16+
/// gives direct access to the `queries` field's fields, which
17+
/// are what almost everything wants access to.
18+
impl std::ops::DerefMut for Providers {
19+
fn deref_mut(&mut self) -> &mut Self::Target {
20+
&mut self.queries
21+
}
22+
}
23+
24+
impl std::ops::Deref for Providers {
25+
type Target = rustc_middle::query::Providers;
26+
27+
fn deref(&self) -> &Self::Target {
28+
&self.queries
29+
}
30+
}

Diff for: src/librustdoc/core.rs

+1-1
Original file line numberDiff line numberDiff line change
@@ -286,7 +286,7 @@ pub(crate) fn create_config(
286286
let body = hir.body(hir.body_owned_by(def_id));
287287
debug!("visiting body for {def_id:?}");
288288
EmitIgnoredResolutionErrors::new(tcx).visit_body(body);
289-
(rustc_interface::DEFAULT_QUERY_PROVIDERS.0.typeck)(tcx, def_id)
289+
(rustc_interface::DEFAULT_QUERY_PROVIDERS.typeck)(tcx, def_id)
290290
};
291291
}),
292292
make_codegen_backend: None,

0 commit comments

Comments
 (0)