Skip to main content

rustc_query_impl/
lib.rs

1// tidy-alphabetical-start
2#![allow(internal_features)]
3#![feature(core_intrinsics)]
4#![feature(min_specialization)]
5#![feature(rustc_attrs)]
6#![feature(try_blocks)]
7// tidy-alphabetical-end
8
9use rustc_data_structures::sync::{AtomicU64, Lock};
10use rustc_middle::arena::Arena;
11use rustc_middle::queries::{ExternProviders, Providers};
12use rustc_middle::query::QuerySystem;
13use rustc_middle::query::on_disk_cache::OnDiskCache;
14
15pub use crate::job::{
16    CollectActiveJobsKind, QueryJobMap, break_query_cycle, collect_active_query_jobs,
17    print_query_stack,
18};
19
20mod dep_kind_vtables;
21mod diagnostics;
22mod execution;
23mod handle_cycle_error;
24mod incremental;
25mod job;
26mod query_vtables;
27mod self_profile;
28
29pub fn query_system<'tcx>(
30    arena: &'tcx Arena<'tcx>,
31    local_providers: Providers,
32    extern_providers: ExternProviders,
33    on_disk_cache: Option<OnDiskCache>,
34    incremental: bool,
35) -> QuerySystem<'tcx> {
36    QuerySystem {
37        arenas: Default::default(),
38        dep_kind_vtables: dep_kind_vtables::make_dep_kind_vtables(arena),
39        query_vtables: query_vtables::make_query_vtables(incremental),
40        side_effects: Default::default(),
41        used_features: Default::default(),
42        on_disk_cache,
43        local_providers,
44        extern_providers,
45        jobs: AtomicU64::new(1),
46        cycle_handler_nesting: Lock::new(0),
47    }
48}
49
50pub fn provide(providers: &mut rustc_middle::util::Providers) {
51    providers.hooks.alloc_self_profile_query_strings =
52        self_profile::alloc_self_profile_query_strings;
53    providers.hooks.verify_query_key_hashes = incremental::verify_query_key_hashes;
54    providers.hooks.encode_query_values = incremental::encode_query_values;
55}