Skip to main content

rustc_query_impl/
profiling_support.rs

1use std::fmt::Debug;
2use std::io::Write;
3
4use measureme::{StringComponent, StringId};
5use rustc_data_structures::fx::FxHashMap;
6use rustc_data_structures::profiling::SelfProfiler;
7use rustc_hir::def_id::{CrateNum, DefId, DefIndex, LOCAL_CRATE, LocalDefId};
8use rustc_hir::definitions::DefPathData;
9use rustc_middle::query::{QueryCache, QueryVTable};
10use rustc_middle::ty::TyCtxt;
11
12use crate::query_impl::for_each_query_vtable;
13
14pub(crate) struct QueryKeyStringCache {
15    def_id_cache: FxHashMap<DefId, StringId>,
16}
17
18impl QueryKeyStringCache {
19    pub(crate) fn new() -> QueryKeyStringCache {
20        QueryKeyStringCache { def_id_cache: Default::default() }
21    }
22}
23
24struct QueryKeyStringBuilder<'a, 'tcx> {
25    profiler: &'a SelfProfiler,
26    tcx: TyCtxt<'tcx>,
27    string_cache: &'a mut QueryKeyStringCache,
28}
29
30impl<'a, 'tcx> QueryKeyStringBuilder<'a, 'tcx> {
31    fn new(
32        profiler: &'a SelfProfiler,
33        tcx: TyCtxt<'tcx>,
34        string_cache: &'a mut QueryKeyStringCache,
35    ) -> QueryKeyStringBuilder<'a, 'tcx> {
36        QueryKeyStringBuilder { profiler, tcx, string_cache }
37    }
38
39    // The current implementation is rather crude. In the future it might be a
40    // good idea to base this on `ty::print` in order to get nicer and more
41    // efficient query keys.
42    fn def_id_to_string_id(&mut self, def_id: DefId) -> StringId {
43        if let Some(&string_id) = self.string_cache.def_id_cache.get(&def_id) {
44            return string_id;
45        }
46
47        let def_key = self.tcx.def_key(def_id);
48
49        let (parent_string_id, start_index) = match def_key.parent {
50            Some(parent_index) => {
51                let parent_def_id = DefId { index: parent_index, krate: def_id.krate };
52
53                (self.def_id_to_string_id(parent_def_id), 0)
54            }
55            None => (StringId::INVALID, 2),
56        };
57
58        let dis_buffer = &mut [0u8; 16];
59        let crate_name;
60        let other_name;
61        let name;
62        let dis;
63        let end_index;
64
65        match def_key.disambiguated_data.data {
66            DefPathData::CrateRoot => {
67                crate_name = self.tcx.crate_name(def_id.krate);
68                name = crate_name.as_str();
69                dis = "";
70                end_index = 3;
71            }
72            other => {
73                other_name = other.to_string();
74                name = other_name.as_str();
75                if def_key.disambiguated_data.disambiguator == 0 {
76                    dis = "";
77                    end_index = 3;
78                } else {
79                    (&mut dis_buffer[..]).write_fmt(format_args!("[{0}]",
        def_key.disambiguated_data.disambiguator))write!(&mut dis_buffer[..], "[{}]", def_key.disambiguated_data.disambiguator)
80                        .unwrap();
81                    let end_of_dis = dis_buffer.iter().position(|&c| c == b']').unwrap();
82                    dis = std::str::from_utf8(&dis_buffer[..end_of_dis + 1]).unwrap();
83                    end_index = 4;
84                }
85            }
86        }
87
88        let components = [
89            StringComponent::Ref(parent_string_id),
90            StringComponent::Value("::"),
91            StringComponent::Value(name),
92            StringComponent::Value(dis),
93        ];
94
95        let string_id = self.profiler.alloc_string(&components[start_index..end_index]);
96
97        self.string_cache.def_id_cache.insert(def_id, string_id);
98
99        string_id
100    }
101}
102
103trait IntoSelfProfilingString {
104    fn to_self_profile_string(&self, builder: &mut QueryKeyStringBuilder<'_, '_>) -> StringId;
105}
106
107// The default implementation of `IntoSelfProfilingString` just uses `Debug`
108// which is slow and causes lots of duplication of string data.
109// The specialized impls below take care of making the `DefId` case more
110// efficient.
111impl<T: Debug> IntoSelfProfilingString for T {
112    default fn to_self_profile_string(
113        &self,
114        builder: &mut QueryKeyStringBuilder<'_, '_>,
115    ) -> StringId {
116        let s = ::alloc::__export::must_use({
        ::alloc::fmt::format(format_args!("{0:?}", self))
    })format!("{self:?}");
117        builder.profiler.alloc_string(&s[..])
118    }
119}
120
121impl<T: SpecIntoSelfProfilingString> IntoSelfProfilingString for T {
122    fn to_self_profile_string(&self, builder: &mut QueryKeyStringBuilder<'_, '_>) -> StringId {
123        self.spec_to_self_profile_string(builder)
124    }
125}
126
127#[rustc_specialization_trait]
128trait SpecIntoSelfProfilingString: Debug {
129    fn spec_to_self_profile_string(&self, builder: &mut QueryKeyStringBuilder<'_, '_>) -> StringId;
130}
131
132impl SpecIntoSelfProfilingString for DefId {
133    fn spec_to_self_profile_string(&self, builder: &mut QueryKeyStringBuilder<'_, '_>) -> StringId {
134        builder.def_id_to_string_id(*self)
135    }
136}
137
138impl SpecIntoSelfProfilingString for CrateNum {
139    fn spec_to_self_profile_string(&self, builder: &mut QueryKeyStringBuilder<'_, '_>) -> StringId {
140        builder.def_id_to_string_id(self.as_def_id())
141    }
142}
143
144impl SpecIntoSelfProfilingString for DefIndex {
145    fn spec_to_self_profile_string(&self, builder: &mut QueryKeyStringBuilder<'_, '_>) -> StringId {
146        builder.def_id_to_string_id(DefId { krate: LOCAL_CRATE, index: *self })
147    }
148}
149
150impl SpecIntoSelfProfilingString for LocalDefId {
151    fn spec_to_self_profile_string(&self, builder: &mut QueryKeyStringBuilder<'_, '_>) -> StringId {
152        builder.def_id_to_string_id(DefId { krate: LOCAL_CRATE, index: self.local_def_index })
153    }
154}
155
156impl<T0, T1> SpecIntoSelfProfilingString for (T0, T1)
157where
158    T0: SpecIntoSelfProfilingString,
159    T1: SpecIntoSelfProfilingString,
160{
161    fn spec_to_self_profile_string(&self, builder: &mut QueryKeyStringBuilder<'_, '_>) -> StringId {
162        let val0 = self.0.to_self_profile_string(builder);
163        let val1 = self.1.to_self_profile_string(builder);
164
165        let components = &[
166            StringComponent::Value("("),
167            StringComponent::Ref(val0),
168            StringComponent::Value(","),
169            StringComponent::Ref(val1),
170            StringComponent::Value(")"),
171        ];
172
173        builder.profiler.alloc_string(components)
174    }
175}
176
177/// All self-profiling events generated by the query engine use
178/// virtual `StringId`s for their `event_id`. This method makes all
179/// those virtual `StringId`s point to actual strings.
180///
181/// If we are recording only summary data, the ids will point to
182/// just the query names. If we are recording query keys too, we
183/// allocate the corresponding strings here.
184pub(crate) fn alloc_self_profile_query_strings(tcx: TyCtxt<'_>) {
185    if !tcx.prof.enabled() {
186        return;
187    }
188
189    let _prof_timer = tcx.sess.prof.generic_activity("self_profile_alloc_query_strings");
190
191    let mut string_cache = QueryKeyStringCache::new();
192
193    {
    let tcx: rustc_middle::ty::TyCtxt<'_> = tcx;
    let query: &rustc_middle::query::QueryVTable<'_, _> =
        &tcx.query_system.query_vtables.derive_macro_expansion;
    (|query|
            {
                alloc_self_profile_query_strings_inner(tcx, query,
                    &mut string_cache);
            })(query);
    let query: &rustc_middle::query::QueryVTable<'_, _> =
        &tcx.query_system.query_vtables.trigger_delayed_bug;
    (|query|
            {
                alloc_self_profile_query_strings_inner(tcx, query,
                    &mut string_cache);
            })(query);
    let query: &rustc_middle::query::QueryVTable<'_, _> =
        &tcx.query_system.query_vtables.registered_tools;
    (|query|
            {
                alloc_self_profile_query_strings_inner(tcx, query,
                    &mut string_cache);
            })(query);
    let query: &rustc_middle::query::QueryVTable<'_, _> =
        &tcx.query_system.query_vtables.early_lint_checks;
    (|query|
            {
                alloc_self_profile_query_strings_inner(tcx, query,
                    &mut string_cache);
            })(query);
    let query: &rustc_middle::query::QueryVTable<'_, _> =
        &tcx.query_system.query_vtables.env_var_os;
    (|query|
            {
                alloc_self_profile_query_strings_inner(tcx, query,
                    &mut string_cache);
            })(query);
    let query: &rustc_middle::query::QueryVTable<'_, _> =
        &tcx.query_system.query_vtables.resolutions;
    (|query|
            {
                alloc_self_profile_query_strings_inner(tcx, query,
                    &mut string_cache);
            })(query);
    let query: &rustc_middle::query::QueryVTable<'_, _> =
        &tcx.query_system.query_vtables.resolver_for_lowering_raw;
    (|query|
            {
                alloc_self_profile_query_strings_inner(tcx, query,
                    &mut string_cache);
            })(query);
    let query: &rustc_middle::query::QueryVTable<'_, _> =
        &tcx.query_system.query_vtables.source_span;
    (|query|
            {
                alloc_self_profile_query_strings_inner(tcx, query,
                    &mut string_cache);
            })(query);
    let query: &rustc_middle::query::QueryVTable<'_, _> =
        &tcx.query_system.query_vtables.hir_crate;
    (|query|
            {
                alloc_self_profile_query_strings_inner(tcx, query,
                    &mut string_cache);
            })(query);
    let query: &rustc_middle::query::QueryVTable<'_, _> =
        &tcx.query_system.query_vtables.lower_delayed_owner;
    (|query|
            {
                alloc_self_profile_query_strings_inner(tcx, query,
                    &mut string_cache);
            })(query);
    let query: &rustc_middle::query::QueryVTable<'_, _> =
        &tcx.query_system.query_vtables.delayed_owner;
    (|query|
            {
                alloc_self_profile_query_strings_inner(tcx, query,
                    &mut string_cache);
            })(query);
    let query: &rustc_middle::query::QueryVTable<'_, _> =
        &tcx.query_system.query_vtables.hir_crate_items;
    (|query|
            {
                alloc_self_profile_query_strings_inner(tcx, query,
                    &mut string_cache);
            })(query);
    let query: &rustc_middle::query::QueryVTable<'_, _> =
        &tcx.query_system.query_vtables.hir_module_items;
    (|query|
            {
                alloc_self_profile_query_strings_inner(tcx, query,
                    &mut string_cache);
            })(query);
    let query: &rustc_middle::query::QueryVTable<'_, _> =
        &tcx.query_system.query_vtables.local_def_id_to_hir_id;
    (|query|
            {
                alloc_self_profile_query_strings_inner(tcx, query,
                    &mut string_cache);
            })(query);
    let query: &rustc_middle::query::QueryVTable<'_, _> =
        &tcx.query_system.query_vtables.hir_owner_parent_q;
    (|query|
            {
                alloc_self_profile_query_strings_inner(tcx, query,
                    &mut string_cache);
            })(query);
    let query: &rustc_middle::query::QueryVTable<'_, _> =
        &tcx.query_system.query_vtables.opt_hir_owner_nodes;
    (|query|
            {
                alloc_self_profile_query_strings_inner(tcx, query,
                    &mut string_cache);
            })(query);
    let query: &rustc_middle::query::QueryVTable<'_, _> =
        &tcx.query_system.query_vtables.hir_attr_map;
    (|query|
            {
                alloc_self_profile_query_strings_inner(tcx, query,
                    &mut string_cache);
            })(query);
    let query: &rustc_middle::query::QueryVTable<'_, _> =
        &tcx.query_system.query_vtables.opt_ast_lowering_delayed_lints;
    (|query|
            {
                alloc_self_profile_query_strings_inner(tcx, query,
                    &mut string_cache);
            })(query);
    let query: &rustc_middle::query::QueryVTable<'_, _> =
        &tcx.query_system.query_vtables.const_param_default;
    (|query|
            {
                alloc_self_profile_query_strings_inner(tcx, query,
                    &mut string_cache);
            })(query);
    let query: &rustc_middle::query::QueryVTable<'_, _> =
        &tcx.query_system.query_vtables.const_of_item;
    (|query|
            {
                alloc_self_profile_query_strings_inner(tcx, query,
                    &mut string_cache);
            })(query);
    let query: &rustc_middle::query::QueryVTable<'_, _> =
        &tcx.query_system.query_vtables.type_of;
    (|query|
            {
                alloc_self_profile_query_strings_inner(tcx, query,
                    &mut string_cache);
            })(query);
    let query: &rustc_middle::query::QueryVTable<'_, _> =
        &tcx.query_system.query_vtables.type_of_opaque;
    (|query|
            {
                alloc_self_profile_query_strings_inner(tcx, query,
                    &mut string_cache);
            })(query);
    let query: &rustc_middle::query::QueryVTable<'_, _> =
        &tcx.query_system.query_vtables.type_of_opaque_hir_typeck;
    (|query|
            {
                alloc_self_profile_query_strings_inner(tcx, query,
                    &mut string_cache);
            })(query);
    let query: &rustc_middle::query::QueryVTable<'_, _> =
        &tcx.query_system.query_vtables.type_alias_is_lazy;
    (|query|
            {
                alloc_self_profile_query_strings_inner(tcx, query,
                    &mut string_cache);
            })(query);
    let query: &rustc_middle::query::QueryVTable<'_, _> =
        &tcx.query_system.query_vtables.collect_return_position_impl_trait_in_trait_tys;
    (|query|
            {
                alloc_self_profile_query_strings_inner(tcx, query,
                    &mut string_cache);
            })(query);
    let query: &rustc_middle::query::QueryVTable<'_, _> =
        &tcx.query_system.query_vtables.opaque_ty_origin;
    (|query|
            {
                alloc_self_profile_query_strings_inner(tcx, query,
                    &mut string_cache);
            })(query);
    let query: &rustc_middle::query::QueryVTable<'_, _> =
        &tcx.query_system.query_vtables.unsizing_params_for_adt;
    (|query|
            {
                alloc_self_profile_query_strings_inner(tcx, query,
                    &mut string_cache);
            })(query);
    let query: &rustc_middle::query::QueryVTable<'_, _> =
        &tcx.query_system.query_vtables.analysis;
    (|query|
            {
                alloc_self_profile_query_strings_inner(tcx, query,
                    &mut string_cache);
            })(query);
    let query: &rustc_middle::query::QueryVTable<'_, _> =
        &tcx.query_system.query_vtables.check_expectations;
    (|query|
            {
                alloc_self_profile_query_strings_inner(tcx, query,
                    &mut string_cache);
            })(query);
    let query: &rustc_middle::query::QueryVTable<'_, _> =
        &tcx.query_system.query_vtables.generics_of;
    (|query|
            {
                alloc_self_profile_query_strings_inner(tcx, query,
                    &mut string_cache);
            })(query);
    let query: &rustc_middle::query::QueryVTable<'_, _> =
        &tcx.query_system.query_vtables.predicates_of;
    (|query|
            {
                alloc_self_profile_query_strings_inner(tcx, query,
                    &mut string_cache);
            })(query);
    let query: &rustc_middle::query::QueryVTable<'_, _> =
        &tcx.query_system.query_vtables.opaque_types_defined_by;
    (|query|
            {
                alloc_self_profile_query_strings_inner(tcx, query,
                    &mut string_cache);
            })(query);
    let query: &rustc_middle::query::QueryVTable<'_, _> =
        &tcx.query_system.query_vtables.nested_bodies_within;
    (|query|
            {
                alloc_self_profile_query_strings_inner(tcx, query,
                    &mut string_cache);
            })(query);
    let query: &rustc_middle::query::QueryVTable<'_, _> =
        &tcx.query_system.query_vtables.explicit_item_bounds;
    (|query|
            {
                alloc_self_profile_query_strings_inner(tcx, query,
                    &mut string_cache);
            })(query);
    let query: &rustc_middle::query::QueryVTable<'_, _> =
        &tcx.query_system.query_vtables.explicit_item_self_bounds;
    (|query|
            {
                alloc_self_profile_query_strings_inner(tcx, query,
                    &mut string_cache);
            })(query);
    let query: &rustc_middle::query::QueryVTable<'_, _> =
        &tcx.query_system.query_vtables.item_bounds;
    (|query|
            {
                alloc_self_profile_query_strings_inner(tcx, query,
                    &mut string_cache);
            })(query);
    let query: &rustc_middle::query::QueryVTable<'_, _> =
        &tcx.query_system.query_vtables.item_self_bounds;
    (|query|
            {
                alloc_self_profile_query_strings_inner(tcx, query,
                    &mut string_cache);
            })(query);
    let query: &rustc_middle::query::QueryVTable<'_, _> =
        &tcx.query_system.query_vtables.item_non_self_bounds;
    (|query|
            {
                alloc_self_profile_query_strings_inner(tcx, query,
                    &mut string_cache);
            })(query);
    let query: &rustc_middle::query::QueryVTable<'_, _> =
        &tcx.query_system.query_vtables.impl_super_outlives;
    (|query|
            {
                alloc_self_profile_query_strings_inner(tcx, query,
                    &mut string_cache);
            })(query);
    let query: &rustc_middle::query::QueryVTable<'_, _> =
        &tcx.query_system.query_vtables.native_libraries;
    (|query|
            {
                alloc_self_profile_query_strings_inner(tcx, query,
                    &mut string_cache);
            })(query);
    let query: &rustc_middle::query::QueryVTable<'_, _> =
        &tcx.query_system.query_vtables.shallow_lint_levels_on;
    (|query|
            {
                alloc_self_profile_query_strings_inner(tcx, query,
                    &mut string_cache);
            })(query);
    let query: &rustc_middle::query::QueryVTable<'_, _> =
        &tcx.query_system.query_vtables.lint_expectations;
    (|query|
            {
                alloc_self_profile_query_strings_inner(tcx, query,
                    &mut string_cache);
            })(query);
    let query: &rustc_middle::query::QueryVTable<'_, _> =
        &tcx.query_system.query_vtables.lints_that_dont_need_to_run;
    (|query|
            {
                alloc_self_profile_query_strings_inner(tcx, query,
                    &mut string_cache);
            })(query);
    let query: &rustc_middle::query::QueryVTable<'_, _> =
        &tcx.query_system.query_vtables.expn_that_defined;
    (|query|
            {
                alloc_self_profile_query_strings_inner(tcx, query,
                    &mut string_cache);
            })(query);
    let query: &rustc_middle::query::QueryVTable<'_, _> =
        &tcx.query_system.query_vtables.is_panic_runtime;
    (|query|
            {
                alloc_self_profile_query_strings_inner(tcx, query,
                    &mut string_cache);
            })(query);
    let query: &rustc_middle::query::QueryVTable<'_, _> =
        &tcx.query_system.query_vtables.check_representability;
    (|query|
            {
                alloc_self_profile_query_strings_inner(tcx, query,
                    &mut string_cache);
            })(query);
    let query: &rustc_middle::query::QueryVTable<'_, _> =
        &tcx.query_system.query_vtables.check_representability_adt_ty;
    (|query|
            {
                alloc_self_profile_query_strings_inner(tcx, query,
                    &mut string_cache);
            })(query);
    let query: &rustc_middle::query::QueryVTable<'_, _> =
        &tcx.query_system.query_vtables.params_in_repr;
    (|query|
            {
                alloc_self_profile_query_strings_inner(tcx, query,
                    &mut string_cache);
            })(query);
    let query: &rustc_middle::query::QueryVTable<'_, _> =
        &tcx.query_system.query_vtables.thir_body;
    (|query|
            {
                alloc_self_profile_query_strings_inner(tcx, query,
                    &mut string_cache);
            })(query);
    let query: &rustc_middle::query::QueryVTable<'_, _> =
        &tcx.query_system.query_vtables.mir_keys;
    (|query|
            {
                alloc_self_profile_query_strings_inner(tcx, query,
                    &mut string_cache);
            })(query);
    let query: &rustc_middle::query::QueryVTable<'_, _> =
        &tcx.query_system.query_vtables.mir_const_qualif;
    (|query|
            {
                alloc_self_profile_query_strings_inner(tcx, query,
                    &mut string_cache);
            })(query);
    let query: &rustc_middle::query::QueryVTable<'_, _> =
        &tcx.query_system.query_vtables.mir_built;
    (|query|
            {
                alloc_self_profile_query_strings_inner(tcx, query,
                    &mut string_cache);
            })(query);
    let query: &rustc_middle::query::QueryVTable<'_, _> =
        &tcx.query_system.query_vtables.thir_abstract_const;
    (|query|
            {
                alloc_self_profile_query_strings_inner(tcx, query,
                    &mut string_cache);
            })(query);
    let query: &rustc_middle::query::QueryVTable<'_, _> =
        &tcx.query_system.query_vtables.mir_drops_elaborated_and_const_checked;
    (|query|
            {
                alloc_self_profile_query_strings_inner(tcx, query,
                    &mut string_cache);
            })(query);
    let query: &rustc_middle::query::QueryVTable<'_, _> =
        &tcx.query_system.query_vtables.mir_for_ctfe;
    (|query|
            {
                alloc_self_profile_query_strings_inner(tcx, query,
                    &mut string_cache);
            })(query);
    let query: &rustc_middle::query::QueryVTable<'_, _> =
        &tcx.query_system.query_vtables.mir_promoted;
    (|query|
            {
                alloc_self_profile_query_strings_inner(tcx, query,
                    &mut string_cache);
            })(query);
    let query: &rustc_middle::query::QueryVTable<'_, _> =
        &tcx.query_system.query_vtables.closure_typeinfo;
    (|query|
            {
                alloc_self_profile_query_strings_inner(tcx, query,
                    &mut string_cache);
            })(query);
    let query: &rustc_middle::query::QueryVTable<'_, _> =
        &tcx.query_system.query_vtables.closure_saved_names_of_captured_variables;
    (|query|
            {
                alloc_self_profile_query_strings_inner(tcx, query,
                    &mut string_cache);
            })(query);
    let query: &rustc_middle::query::QueryVTable<'_, _> =
        &tcx.query_system.query_vtables.mir_coroutine_witnesses;
    (|query|
            {
                alloc_self_profile_query_strings_inner(tcx, query,
                    &mut string_cache);
            })(query);
    let query: &rustc_middle::query::QueryVTable<'_, _> =
        &tcx.query_system.query_vtables.check_coroutine_obligations;
    (|query|
            {
                alloc_self_profile_query_strings_inner(tcx, query,
                    &mut string_cache);
            })(query);
    let query: &rustc_middle::query::QueryVTable<'_, _> =
        &tcx.query_system.query_vtables.check_potentially_region_dependent_goals;
    (|query|
            {
                alloc_self_profile_query_strings_inner(tcx, query,
                    &mut string_cache);
            })(query);
    let query: &rustc_middle::query::QueryVTable<'_, _> =
        &tcx.query_system.query_vtables.optimized_mir;
    (|query|
            {
                alloc_self_profile_query_strings_inner(tcx, query,
                    &mut string_cache);
            })(query);
    let query: &rustc_middle::query::QueryVTable<'_, _> =
        &tcx.query_system.query_vtables.coverage_attr_on;
    (|query|
            {
                alloc_self_profile_query_strings_inner(tcx, query,
                    &mut string_cache);
            })(query);
    let query: &rustc_middle::query::QueryVTable<'_, _> =
        &tcx.query_system.query_vtables.coverage_ids_info;
    (|query|
            {
                alloc_self_profile_query_strings_inner(tcx, query,
                    &mut string_cache);
            })(query);
    let query: &rustc_middle::query::QueryVTable<'_, _> =
        &tcx.query_system.query_vtables.promoted_mir;
    (|query|
            {
                alloc_self_profile_query_strings_inner(tcx, query,
                    &mut string_cache);
            })(query);
    let query: &rustc_middle::query::QueryVTable<'_, _> =
        &tcx.query_system.query_vtables.erase_and_anonymize_regions_ty;
    (|query|
            {
                alloc_self_profile_query_strings_inner(tcx, query,
                    &mut string_cache);
            })(query);
    let query: &rustc_middle::query::QueryVTable<'_, _> =
        &tcx.query_system.query_vtables.wasm_import_module_map;
    (|query|
            {
                alloc_self_profile_query_strings_inner(tcx, query,
                    &mut string_cache);
            })(query);
    let query: &rustc_middle::query::QueryVTable<'_, _> =
        &tcx.query_system.query_vtables.trait_explicit_predicates_and_bounds;
    (|query|
            {
                alloc_self_profile_query_strings_inner(tcx, query,
                    &mut string_cache);
            })(query);
    let query: &rustc_middle::query::QueryVTable<'_, _> =
        &tcx.query_system.query_vtables.explicit_predicates_of;
    (|query|
            {
                alloc_self_profile_query_strings_inner(tcx, query,
                    &mut string_cache);
            })(query);
    let query: &rustc_middle::query::QueryVTable<'_, _> =
        &tcx.query_system.query_vtables.inferred_outlives_of;
    (|query|
            {
                alloc_self_profile_query_strings_inner(tcx, query,
                    &mut string_cache);
            })(query);
    let query: &rustc_middle::query::QueryVTable<'_, _> =
        &tcx.query_system.query_vtables.explicit_super_predicates_of;
    (|query|
            {
                alloc_self_profile_query_strings_inner(tcx, query,
                    &mut string_cache);
            })(query);
    let query: &rustc_middle::query::QueryVTable<'_, _> =
        &tcx.query_system.query_vtables.explicit_implied_predicates_of;
    (|query|
            {
                alloc_self_profile_query_strings_inner(tcx, query,
                    &mut string_cache);
            })(query);
    let query: &rustc_middle::query::QueryVTable<'_, _> =
        &tcx.query_system.query_vtables.explicit_supertraits_containing_assoc_item;
    (|query|
            {
                alloc_self_profile_query_strings_inner(tcx, query,
                    &mut string_cache);
            })(query);
    let query: &rustc_middle::query::QueryVTable<'_, _> =
        &tcx.query_system.query_vtables.const_conditions;
    (|query|
            {
                alloc_self_profile_query_strings_inner(tcx, query,
                    &mut string_cache);
            })(query);
    let query: &rustc_middle::query::QueryVTable<'_, _> =
        &tcx.query_system.query_vtables.explicit_implied_const_bounds;
    (|query|
            {
                alloc_self_profile_query_strings_inner(tcx, query,
                    &mut string_cache);
            })(query);
    let query: &rustc_middle::query::QueryVTable<'_, _> =
        &tcx.query_system.query_vtables.type_param_predicates;
    (|query|
            {
                alloc_self_profile_query_strings_inner(tcx, query,
                    &mut string_cache);
            })(query);
    let query: &rustc_middle::query::QueryVTable<'_, _> =
        &tcx.query_system.query_vtables.trait_def;
    (|query|
            {
                alloc_self_profile_query_strings_inner(tcx, query,
                    &mut string_cache);
            })(query);
    let query: &rustc_middle::query::QueryVTable<'_, _> =
        &tcx.query_system.query_vtables.adt_def;
    (|query|
            {
                alloc_self_profile_query_strings_inner(tcx, query,
                    &mut string_cache);
            })(query);
    let query: &rustc_middle::query::QueryVTable<'_, _> =
        &tcx.query_system.query_vtables.adt_destructor;
    (|query|
            {
                alloc_self_profile_query_strings_inner(tcx, query,
                    &mut string_cache);
            })(query);
    let query: &rustc_middle::query::QueryVTable<'_, _> =
        &tcx.query_system.query_vtables.adt_async_destructor;
    (|query|
            {
                alloc_self_profile_query_strings_inner(tcx, query,
                    &mut string_cache);
            })(query);
    let query: &rustc_middle::query::QueryVTable<'_, _> =
        &tcx.query_system.query_vtables.adt_sizedness_constraint;
    (|query|
            {
                alloc_self_profile_query_strings_inner(tcx, query,
                    &mut string_cache);
            })(query);
    let query: &rustc_middle::query::QueryVTable<'_, _> =
        &tcx.query_system.query_vtables.adt_dtorck_constraint;
    (|query|
            {
                alloc_self_profile_query_strings_inner(tcx, query,
                    &mut string_cache);
            })(query);
    let query: &rustc_middle::query::QueryVTable<'_, _> =
        &tcx.query_system.query_vtables.constness;
    (|query|
            {
                alloc_self_profile_query_strings_inner(tcx, query,
                    &mut string_cache);
            })(query);
    let query: &rustc_middle::query::QueryVTable<'_, _> =
        &tcx.query_system.query_vtables.asyncness;
    (|query|
            {
                alloc_self_profile_query_strings_inner(tcx, query,
                    &mut string_cache);
            })(query);
    let query: &rustc_middle::query::QueryVTable<'_, _> =
        &tcx.query_system.query_vtables.is_promotable_const_fn;
    (|query|
            {
                alloc_self_profile_query_strings_inner(tcx, query,
                    &mut string_cache);
            })(query);
    let query: &rustc_middle::query::QueryVTable<'_, _> =
        &tcx.query_system.query_vtables.coroutine_by_move_body_def_id;
    (|query|
            {
                alloc_self_profile_query_strings_inner(tcx, query,
                    &mut string_cache);
            })(query);
    let query: &rustc_middle::query::QueryVTable<'_, _> =
        &tcx.query_system.query_vtables.coroutine_kind;
    (|query|
            {
                alloc_self_profile_query_strings_inner(tcx, query,
                    &mut string_cache);
            })(query);
    let query: &rustc_middle::query::QueryVTable<'_, _> =
        &tcx.query_system.query_vtables.coroutine_for_closure;
    (|query|
            {
                alloc_self_profile_query_strings_inner(tcx, query,
                    &mut string_cache);
            })(query);
    let query: &rustc_middle::query::QueryVTable<'_, _> =
        &tcx.query_system.query_vtables.coroutine_hidden_types;
    (|query|
            {
                alloc_self_profile_query_strings_inner(tcx, query,
                    &mut string_cache);
            })(query);
    let query: &rustc_middle::query::QueryVTable<'_, _> =
        &tcx.query_system.query_vtables.crate_variances;
    (|query|
            {
                alloc_self_profile_query_strings_inner(tcx, query,
                    &mut string_cache);
            })(query);
    let query: &rustc_middle::query::QueryVTable<'_, _> =
        &tcx.query_system.query_vtables.variances_of;
    (|query|
            {
                alloc_self_profile_query_strings_inner(tcx, query,
                    &mut string_cache);
            })(query);
    let query: &rustc_middle::query::QueryVTable<'_, _> =
        &tcx.query_system.query_vtables.inferred_outlives_crate;
    (|query|
            {
                alloc_self_profile_query_strings_inner(tcx, query,
                    &mut string_cache);
            })(query);
    let query: &rustc_middle::query::QueryVTable<'_, _> =
        &tcx.query_system.query_vtables.associated_item_def_ids;
    (|query|
            {
                alloc_self_profile_query_strings_inner(tcx, query,
                    &mut string_cache);
            })(query);
    let query: &rustc_middle::query::QueryVTable<'_, _> =
        &tcx.query_system.query_vtables.associated_item;
    (|query|
            {
                alloc_self_profile_query_strings_inner(tcx, query,
                    &mut string_cache);
            })(query);
    let query: &rustc_middle::query::QueryVTable<'_, _> =
        &tcx.query_system.query_vtables.associated_items;
    (|query|
            {
                alloc_self_profile_query_strings_inner(tcx, query,
                    &mut string_cache);
            })(query);
    let query: &rustc_middle::query::QueryVTable<'_, _> =
        &tcx.query_system.query_vtables.impl_item_implementor_ids;
    (|query|
            {
                alloc_self_profile_query_strings_inner(tcx, query,
                    &mut string_cache);
            })(query);
    let query: &rustc_middle::query::QueryVTable<'_, _> =
        &tcx.query_system.query_vtables.associated_types_for_impl_traits_in_trait_or_impl;
    (|query|
            {
                alloc_self_profile_query_strings_inner(tcx, query,
                    &mut string_cache);
            })(query);
    let query: &rustc_middle::query::QueryVTable<'_, _> =
        &tcx.query_system.query_vtables.impl_trait_header;
    (|query|
            {
                alloc_self_profile_query_strings_inner(tcx, query,
                    &mut string_cache);
            })(query);
    let query: &rustc_middle::query::QueryVTable<'_, _> =
        &tcx.query_system.query_vtables.impl_self_is_guaranteed_unsized;
    (|query|
            {
                alloc_self_profile_query_strings_inner(tcx, query,
                    &mut string_cache);
            })(query);
    let query: &rustc_middle::query::QueryVTable<'_, _> =
        &tcx.query_system.query_vtables.inherent_impls;
    (|query|
            {
                alloc_self_profile_query_strings_inner(tcx, query,
                    &mut string_cache);
            })(query);
    let query: &rustc_middle::query::QueryVTable<'_, _> =
        &tcx.query_system.query_vtables.incoherent_impls;
    (|query|
            {
                alloc_self_profile_query_strings_inner(tcx, query,
                    &mut string_cache);
            })(query);
    let query: &rustc_middle::query::QueryVTable<'_, _> =
        &tcx.query_system.query_vtables.check_transmutes;
    (|query|
            {
                alloc_self_profile_query_strings_inner(tcx, query,
                    &mut string_cache);
            })(query);
    let query: &rustc_middle::query::QueryVTable<'_, _> =
        &tcx.query_system.query_vtables.check_unsafety;
    (|query|
            {
                alloc_self_profile_query_strings_inner(tcx, query,
                    &mut string_cache);
            })(query);
    let query: &rustc_middle::query::QueryVTable<'_, _> =
        &tcx.query_system.query_vtables.check_tail_calls;
    (|query|
            {
                alloc_self_profile_query_strings_inner(tcx, query,
                    &mut string_cache);
            })(query);
    let query: &rustc_middle::query::QueryVTable<'_, _> =
        &tcx.query_system.query_vtables.assumed_wf_types;
    (|query|
            {
                alloc_self_profile_query_strings_inner(tcx, query,
                    &mut string_cache);
            })(query);
    let query: &rustc_middle::query::QueryVTable<'_, _> =
        &tcx.query_system.query_vtables.assumed_wf_types_for_rpitit;
    (|query|
            {
                alloc_self_profile_query_strings_inner(tcx, query,
                    &mut string_cache);
            })(query);
    let query: &rustc_middle::query::QueryVTable<'_, _> =
        &tcx.query_system.query_vtables.fn_sig;
    (|query|
            {
                alloc_self_profile_query_strings_inner(tcx, query,
                    &mut string_cache);
            })(query);
    let query: &rustc_middle::query::QueryVTable<'_, _> =
        &tcx.query_system.query_vtables.lint_mod;
    (|query|
            {
                alloc_self_profile_query_strings_inner(tcx, query,
                    &mut string_cache);
            })(query);
    let query: &rustc_middle::query::QueryVTable<'_, _> =
        &tcx.query_system.query_vtables.check_unused_traits;
    (|query|
            {
                alloc_self_profile_query_strings_inner(tcx, query,
                    &mut string_cache);
            })(query);
    let query: &rustc_middle::query::QueryVTable<'_, _> =
        &tcx.query_system.query_vtables.check_mod_attrs;
    (|query|
            {
                alloc_self_profile_query_strings_inner(tcx, query,
                    &mut string_cache);
            })(query);
    let query: &rustc_middle::query::QueryVTable<'_, _> =
        &tcx.query_system.query_vtables.check_mod_unstable_api_usage;
    (|query|
            {
                alloc_self_profile_query_strings_inner(tcx, query,
                    &mut string_cache);
            })(query);
    let query: &rustc_middle::query::QueryVTable<'_, _> =
        &tcx.query_system.query_vtables.check_mod_privacy;
    (|query|
            {
                alloc_self_profile_query_strings_inner(tcx, query,
                    &mut string_cache);
            })(query);
    let query: &rustc_middle::query::QueryVTable<'_, _> =
        &tcx.query_system.query_vtables.check_liveness;
    (|query|
            {
                alloc_self_profile_query_strings_inner(tcx, query,
                    &mut string_cache);
            })(query);
    let query: &rustc_middle::query::QueryVTable<'_, _> =
        &tcx.query_system.query_vtables.live_symbols_and_ignored_derived_traits;
    (|query|
            {
                alloc_self_profile_query_strings_inner(tcx, query,
                    &mut string_cache);
            })(query);
    let query: &rustc_middle::query::QueryVTable<'_, _> =
        &tcx.query_system.query_vtables.check_mod_deathness;
    (|query|
            {
                alloc_self_profile_query_strings_inner(tcx, query,
                    &mut string_cache);
            })(query);
    let query: &rustc_middle::query::QueryVTable<'_, _> =
        &tcx.query_system.query_vtables.check_type_wf;
    (|query|
            {
                alloc_self_profile_query_strings_inner(tcx, query,
                    &mut string_cache);
            })(query);
    let query: &rustc_middle::query::QueryVTable<'_, _> =
        &tcx.query_system.query_vtables.coerce_unsized_info;
    (|query|
            {
                alloc_self_profile_query_strings_inner(tcx, query,
                    &mut string_cache);
            })(query);
    let query: &rustc_middle::query::QueryVTable<'_, _> =
        &tcx.query_system.query_vtables.typeck_root;
    (|query|
            {
                alloc_self_profile_query_strings_inner(tcx, query,
                    &mut string_cache);
            })(query);
    let query: &rustc_middle::query::QueryVTable<'_, _> =
        &tcx.query_system.query_vtables.used_trait_imports;
    (|query|
            {
                alloc_self_profile_query_strings_inner(tcx, query,
                    &mut string_cache);
            })(query);
    let query: &rustc_middle::query::QueryVTable<'_, _> =
        &tcx.query_system.query_vtables.coherent_trait;
    (|query|
            {
                alloc_self_profile_query_strings_inner(tcx, query,
                    &mut string_cache);
            })(query);
    let query: &rustc_middle::query::QueryVTable<'_, _> =
        &tcx.query_system.query_vtables.mir_borrowck;
    (|query|
            {
                alloc_self_profile_query_strings_inner(tcx, query,
                    &mut string_cache);
            })(query);
    let query: &rustc_middle::query::QueryVTable<'_, _> =
        &tcx.query_system.query_vtables.crate_inherent_impls;
    (|query|
            {
                alloc_self_profile_query_strings_inner(tcx, query,
                    &mut string_cache);
            })(query);
    let query: &rustc_middle::query::QueryVTable<'_, _> =
        &tcx.query_system.query_vtables.crate_inherent_impls_validity_check;
    (|query|
            {
                alloc_self_profile_query_strings_inner(tcx, query,
                    &mut string_cache);
            })(query);
    let query: &rustc_middle::query::QueryVTable<'_, _> =
        &tcx.query_system.query_vtables.crate_inherent_impls_overlap_check;
    (|query|
            {
                alloc_self_profile_query_strings_inner(tcx, query,
                    &mut string_cache);
            })(query);
    let query: &rustc_middle::query::QueryVTable<'_, _> =
        &tcx.query_system.query_vtables.orphan_check_impl;
    (|query|
            {
                alloc_self_profile_query_strings_inner(tcx, query,
                    &mut string_cache);
            })(query);
    let query: &rustc_middle::query::QueryVTable<'_, _> =
        &tcx.query_system.query_vtables.mir_callgraph_cyclic;
    (|query|
            {
                alloc_self_profile_query_strings_inner(tcx, query,
                    &mut string_cache);
            })(query);
    let query: &rustc_middle::query::QueryVTable<'_, _> =
        &tcx.query_system.query_vtables.mir_inliner_callees;
    (|query|
            {
                alloc_self_profile_query_strings_inner(tcx, query,
                    &mut string_cache);
            })(query);
    let query: &rustc_middle::query::QueryVTable<'_, _> =
        &tcx.query_system.query_vtables.tag_for_variant;
    (|query|
            {
                alloc_self_profile_query_strings_inner(tcx, query,
                    &mut string_cache);
            })(query);
    let query: &rustc_middle::query::QueryVTable<'_, _> =
        &tcx.query_system.query_vtables.eval_to_allocation_raw;
    (|query|
            {
                alloc_self_profile_query_strings_inner(tcx, query,
                    &mut string_cache);
            })(query);
    let query: &rustc_middle::query::QueryVTable<'_, _> =
        &tcx.query_system.query_vtables.eval_static_initializer;
    (|query|
            {
                alloc_self_profile_query_strings_inner(tcx, query,
                    &mut string_cache);
            })(query);
    let query: &rustc_middle::query::QueryVTable<'_, _> =
        &tcx.query_system.query_vtables.eval_to_const_value_raw;
    (|query|
            {
                alloc_self_profile_query_strings_inner(tcx, query,
                    &mut string_cache);
            })(query);
    let query: &rustc_middle::query::QueryVTable<'_, _> =
        &tcx.query_system.query_vtables.eval_to_valtree;
    (|query|
            {
                alloc_self_profile_query_strings_inner(tcx, query,
                    &mut string_cache);
            })(query);
    let query: &rustc_middle::query::QueryVTable<'_, _> =
        &tcx.query_system.query_vtables.valtree_to_const_val;
    (|query|
            {
                alloc_self_profile_query_strings_inner(tcx, query,
                    &mut string_cache);
            })(query);
    let query: &rustc_middle::query::QueryVTable<'_, _> =
        &tcx.query_system.query_vtables.lit_to_const;
    (|query|
            {
                alloc_self_profile_query_strings_inner(tcx, query,
                    &mut string_cache);
            })(query);
    let query: &rustc_middle::query::QueryVTable<'_, _> =
        &tcx.query_system.query_vtables.check_match;
    (|query|
            {
                alloc_self_profile_query_strings_inner(tcx, query,
                    &mut string_cache);
            })(query);
    let query: &rustc_middle::query::QueryVTable<'_, _> =
        &tcx.query_system.query_vtables.effective_visibilities;
    (|query|
            {
                alloc_self_profile_query_strings_inner(tcx, query,
                    &mut string_cache);
            })(query);
    let query: &rustc_middle::query::QueryVTable<'_, _> =
        &tcx.query_system.query_vtables.check_private_in_public;
    (|query|
            {
                alloc_self_profile_query_strings_inner(tcx, query,
                    &mut string_cache);
            })(query);
    let query: &rustc_middle::query::QueryVTable<'_, _> =
        &tcx.query_system.query_vtables.reachable_set;
    (|query|
            {
                alloc_self_profile_query_strings_inner(tcx, query,
                    &mut string_cache);
            })(query);
    let query: &rustc_middle::query::QueryVTable<'_, _> =
        &tcx.query_system.query_vtables.region_scope_tree;
    (|query|
            {
                alloc_self_profile_query_strings_inner(tcx, query,
                    &mut string_cache);
            })(query);
    let query: &rustc_middle::query::QueryVTable<'_, _> =
        &tcx.query_system.query_vtables.mir_shims;
    (|query|
            {
                alloc_self_profile_query_strings_inner(tcx, query,
                    &mut string_cache);
            })(query);
    let query: &rustc_middle::query::QueryVTable<'_, _> =
        &tcx.query_system.query_vtables.symbol_name;
    (|query|
            {
                alloc_self_profile_query_strings_inner(tcx, query,
                    &mut string_cache);
            })(query);
    let query: &rustc_middle::query::QueryVTable<'_, _> =
        &tcx.query_system.query_vtables.def_kind;
    (|query|
            {
                alloc_self_profile_query_strings_inner(tcx, query,
                    &mut string_cache);
            })(query);
    let query: &rustc_middle::query::QueryVTable<'_, _> =
        &tcx.query_system.query_vtables.def_span;
    (|query|
            {
                alloc_self_profile_query_strings_inner(tcx, query,
                    &mut string_cache);
            })(query);
    let query: &rustc_middle::query::QueryVTable<'_, _> =
        &tcx.query_system.query_vtables.def_ident_span;
    (|query|
            {
                alloc_self_profile_query_strings_inner(tcx, query,
                    &mut string_cache);
            })(query);
    let query: &rustc_middle::query::QueryVTable<'_, _> =
        &tcx.query_system.query_vtables.ty_span;
    (|query|
            {
                alloc_self_profile_query_strings_inner(tcx, query,
                    &mut string_cache);
            })(query);
    let query: &rustc_middle::query::QueryVTable<'_, _> =
        &tcx.query_system.query_vtables.lookup_stability;
    (|query|
            {
                alloc_self_profile_query_strings_inner(tcx, query,
                    &mut string_cache);
            })(query);
    let query: &rustc_middle::query::QueryVTable<'_, _> =
        &tcx.query_system.query_vtables.lookup_const_stability;
    (|query|
            {
                alloc_self_profile_query_strings_inner(tcx, query,
                    &mut string_cache);
            })(query);
    let query: &rustc_middle::query::QueryVTable<'_, _> =
        &tcx.query_system.query_vtables.lookup_default_body_stability;
    (|query|
            {
                alloc_self_profile_query_strings_inner(tcx, query,
                    &mut string_cache);
            })(query);
    let query: &rustc_middle::query::QueryVTable<'_, _> =
        &tcx.query_system.query_vtables.should_inherit_track_caller;
    (|query|
            {
                alloc_self_profile_query_strings_inner(tcx, query,
                    &mut string_cache);
            })(query);
    let query: &rustc_middle::query::QueryVTable<'_, _> =
        &tcx.query_system.query_vtables.inherited_align;
    (|query|
            {
                alloc_self_profile_query_strings_inner(tcx, query,
                    &mut string_cache);
            })(query);
    let query: &rustc_middle::query::QueryVTable<'_, _> =
        &tcx.query_system.query_vtables.lookup_deprecation_entry;
    (|query|
            {
                alloc_self_profile_query_strings_inner(tcx, query,
                    &mut string_cache);
            })(query);
    let query: &rustc_middle::query::QueryVTable<'_, _> =
        &tcx.query_system.query_vtables.is_doc_hidden;
    (|query|
            {
                alloc_self_profile_query_strings_inner(tcx, query,
                    &mut string_cache);
            })(query);
    let query: &rustc_middle::query::QueryVTable<'_, _> =
        &tcx.query_system.query_vtables.is_doc_notable_trait;
    (|query|
            {
                alloc_self_profile_query_strings_inner(tcx, query,
                    &mut string_cache);
            })(query);
    let query: &rustc_middle::query::QueryVTable<'_, _> =
        &tcx.query_system.query_vtables.attrs_for_def;
    (|query|
            {
                alloc_self_profile_query_strings_inner(tcx, query,
                    &mut string_cache);
            })(query);
    let query: &rustc_middle::query::QueryVTable<'_, _> =
        &tcx.query_system.query_vtables.codegen_fn_attrs;
    (|query|
            {
                alloc_self_profile_query_strings_inner(tcx, query,
                    &mut string_cache);
            })(query);
    let query: &rustc_middle::query::QueryVTable<'_, _> =
        &tcx.query_system.query_vtables.asm_target_features;
    (|query|
            {
                alloc_self_profile_query_strings_inner(tcx, query,
                    &mut string_cache);
            })(query);
    let query: &rustc_middle::query::QueryVTable<'_, _> =
        &tcx.query_system.query_vtables.fn_arg_idents;
    (|query|
            {
                alloc_self_profile_query_strings_inner(tcx, query,
                    &mut string_cache);
            })(query);
    let query: &rustc_middle::query::QueryVTable<'_, _> =
        &tcx.query_system.query_vtables.rendered_const;
    (|query|
            {
                alloc_self_profile_query_strings_inner(tcx, query,
                    &mut string_cache);
            })(query);
    let query: &rustc_middle::query::QueryVTable<'_, _> =
        &tcx.query_system.query_vtables.rendered_precise_capturing_args;
    (|query|
            {
                alloc_self_profile_query_strings_inner(tcx, query,
                    &mut string_cache);
            })(query);
    let query: &rustc_middle::query::QueryVTable<'_, _> =
        &tcx.query_system.query_vtables.impl_parent;
    (|query|
            {
                alloc_self_profile_query_strings_inner(tcx, query,
                    &mut string_cache);
            })(query);
    let query: &rustc_middle::query::QueryVTable<'_, _> =
        &tcx.query_system.query_vtables.is_mir_available;
    (|query|
            {
                alloc_self_profile_query_strings_inner(tcx, query,
                    &mut string_cache);
            })(query);
    let query: &rustc_middle::query::QueryVTable<'_, _> =
        &tcx.query_system.query_vtables.own_existential_vtable_entries;
    (|query|
            {
                alloc_self_profile_query_strings_inner(tcx, query,
                    &mut string_cache);
            })(query);
    let query: &rustc_middle::query::QueryVTable<'_, _> =
        &tcx.query_system.query_vtables.vtable_entries;
    (|query|
            {
                alloc_self_profile_query_strings_inner(tcx, query,
                    &mut string_cache);
            })(query);
    let query: &rustc_middle::query::QueryVTable<'_, _> =
        &tcx.query_system.query_vtables.first_method_vtable_slot;
    (|query|
            {
                alloc_self_profile_query_strings_inner(tcx, query,
                    &mut string_cache);
            })(query);
    let query: &rustc_middle::query::QueryVTable<'_, _> =
        &tcx.query_system.query_vtables.supertrait_vtable_slot;
    (|query|
            {
                alloc_self_profile_query_strings_inner(tcx, query,
                    &mut string_cache);
            })(query);
    let query: &rustc_middle::query::QueryVTable<'_, _> =
        &tcx.query_system.query_vtables.vtable_allocation;
    (|query|
            {
                alloc_self_profile_query_strings_inner(tcx, query,
                    &mut string_cache);
            })(query);
    let query: &rustc_middle::query::QueryVTable<'_, _> =
        &tcx.query_system.query_vtables.codegen_select_candidate;
    (|query|
            {
                alloc_self_profile_query_strings_inner(tcx, query,
                    &mut string_cache);
            })(query);
    let query: &rustc_middle::query::QueryVTable<'_, _> =
        &tcx.query_system.query_vtables.all_local_trait_impls;
    (|query|
            {
                alloc_self_profile_query_strings_inner(tcx, query,
                    &mut string_cache);
            })(query);
    let query: &rustc_middle::query::QueryVTable<'_, _> =
        &tcx.query_system.query_vtables.local_trait_impls;
    (|query|
            {
                alloc_self_profile_query_strings_inner(tcx, query,
                    &mut string_cache);
            })(query);
    let query: &rustc_middle::query::QueryVTable<'_, _> =
        &tcx.query_system.query_vtables.trait_impls_of;
    (|query|
            {
                alloc_self_profile_query_strings_inner(tcx, query,
                    &mut string_cache);
            })(query);
    let query: &rustc_middle::query::QueryVTable<'_, _> =
        &tcx.query_system.query_vtables.specialization_graph_of;
    (|query|
            {
                alloc_self_profile_query_strings_inner(tcx, query,
                    &mut string_cache);
            })(query);
    let query: &rustc_middle::query::QueryVTable<'_, _> =
        &tcx.query_system.query_vtables.dyn_compatibility_violations;
    (|query|
            {
                alloc_self_profile_query_strings_inner(tcx, query,
                    &mut string_cache);
            })(query);
    let query: &rustc_middle::query::QueryVTable<'_, _> =
        &tcx.query_system.query_vtables.is_dyn_compatible;
    (|query|
            {
                alloc_self_profile_query_strings_inner(tcx, query,
                    &mut string_cache);
            })(query);
    let query: &rustc_middle::query::QueryVTable<'_, _> =
        &tcx.query_system.query_vtables.param_env;
    (|query|
            {
                alloc_self_profile_query_strings_inner(tcx, query,
                    &mut string_cache);
            })(query);
    let query: &rustc_middle::query::QueryVTable<'_, _> =
        &tcx.query_system.query_vtables.typing_env_normalized_for_post_analysis;
    (|query|
            {
                alloc_self_profile_query_strings_inner(tcx, query,
                    &mut string_cache);
            })(query);
    let query: &rustc_middle::query::QueryVTable<'_, _> =
        &tcx.query_system.query_vtables.is_copy_raw;
    (|query|
            {
                alloc_self_profile_query_strings_inner(tcx, query,
                    &mut string_cache);
            })(query);
    let query: &rustc_middle::query::QueryVTable<'_, _> =
        &tcx.query_system.query_vtables.is_use_cloned_raw;
    (|query|
            {
                alloc_self_profile_query_strings_inner(tcx, query,
                    &mut string_cache);
            })(query);
    let query: &rustc_middle::query::QueryVTable<'_, _> =
        &tcx.query_system.query_vtables.is_sized_raw;
    (|query|
            {
                alloc_self_profile_query_strings_inner(tcx, query,
                    &mut string_cache);
            })(query);
    let query: &rustc_middle::query::QueryVTable<'_, _> =
        &tcx.query_system.query_vtables.is_freeze_raw;
    (|query|
            {
                alloc_self_profile_query_strings_inner(tcx, query,
                    &mut string_cache);
            })(query);
    let query: &rustc_middle::query::QueryVTable<'_, _> =
        &tcx.query_system.query_vtables.is_unsafe_unpin_raw;
    (|query|
            {
                alloc_self_profile_query_strings_inner(tcx, query,
                    &mut string_cache);
            })(query);
    let query: &rustc_middle::query::QueryVTable<'_, _> =
        &tcx.query_system.query_vtables.is_unpin_raw;
    (|query|
            {
                alloc_self_profile_query_strings_inner(tcx, query,
                    &mut string_cache);
            })(query);
    let query: &rustc_middle::query::QueryVTable<'_, _> =
        &tcx.query_system.query_vtables.is_async_drop_raw;
    (|query|
            {
                alloc_self_profile_query_strings_inner(tcx, query,
                    &mut string_cache);
            })(query);
    let query: &rustc_middle::query::QueryVTable<'_, _> =
        &tcx.query_system.query_vtables.needs_drop_raw;
    (|query|
            {
                alloc_self_profile_query_strings_inner(tcx, query,
                    &mut string_cache);
            })(query);
    let query: &rustc_middle::query::QueryVTable<'_, _> =
        &tcx.query_system.query_vtables.needs_async_drop_raw;
    (|query|
            {
                alloc_self_profile_query_strings_inner(tcx, query,
                    &mut string_cache);
            })(query);
    let query: &rustc_middle::query::QueryVTable<'_, _> =
        &tcx.query_system.query_vtables.has_significant_drop_raw;
    (|query|
            {
                alloc_self_profile_query_strings_inner(tcx, query,
                    &mut string_cache);
            })(query);
    let query: &rustc_middle::query::QueryVTable<'_, _> =
        &tcx.query_system.query_vtables.has_structural_eq_impl;
    (|query|
            {
                alloc_self_profile_query_strings_inner(tcx, query,
                    &mut string_cache);
            })(query);
    let query: &rustc_middle::query::QueryVTable<'_, _> =
        &tcx.query_system.query_vtables.adt_drop_tys;
    (|query|
            {
                alloc_self_profile_query_strings_inner(tcx, query,
                    &mut string_cache);
            })(query);
    let query: &rustc_middle::query::QueryVTable<'_, _> =
        &tcx.query_system.query_vtables.adt_async_drop_tys;
    (|query|
            {
                alloc_self_profile_query_strings_inner(tcx, query,
                    &mut string_cache);
            })(query);
    let query: &rustc_middle::query::QueryVTable<'_, _> =
        &tcx.query_system.query_vtables.adt_significant_drop_tys;
    (|query|
            {
                alloc_self_profile_query_strings_inner(tcx, query,
                    &mut string_cache);
            })(query);
    let query: &rustc_middle::query::QueryVTable<'_, _> =
        &tcx.query_system.query_vtables.list_significant_drop_tys;
    (|query|
            {
                alloc_self_profile_query_strings_inner(tcx, query,
                    &mut string_cache);
            })(query);
    let query: &rustc_middle::query::QueryVTable<'_, _> =
        &tcx.query_system.query_vtables.layout_of;
    (|query|
            {
                alloc_self_profile_query_strings_inner(tcx, query,
                    &mut string_cache);
            })(query);
    let query: &rustc_middle::query::QueryVTable<'_, _> =
        &tcx.query_system.query_vtables.fn_abi_of_fn_ptr;
    (|query|
            {
                alloc_self_profile_query_strings_inner(tcx, query,
                    &mut string_cache);
            })(query);
    let query: &rustc_middle::query::QueryVTable<'_, _> =
        &tcx.query_system.query_vtables.fn_abi_of_instance_no_deduced_attrs;
    (|query|
            {
                alloc_self_profile_query_strings_inner(tcx, query,
                    &mut string_cache);
            })(query);
    let query: &rustc_middle::query::QueryVTable<'_, _> =
        &tcx.query_system.query_vtables.fn_abi_of_instance_raw;
    (|query|
            {
                alloc_self_profile_query_strings_inner(tcx, query,
                    &mut string_cache);
            })(query);
    let query: &rustc_middle::query::QueryVTable<'_, _> =
        &tcx.query_system.query_vtables.dylib_dependency_formats;
    (|query|
            {
                alloc_self_profile_query_strings_inner(tcx, query,
                    &mut string_cache);
            })(query);
    let query: &rustc_middle::query::QueryVTable<'_, _> =
        &tcx.query_system.query_vtables.dependency_formats;
    (|query|
            {
                alloc_self_profile_query_strings_inner(tcx, query,
                    &mut string_cache);
            })(query);
    let query: &rustc_middle::query::QueryVTable<'_, _> =
        &tcx.query_system.query_vtables.is_compiler_builtins;
    (|query|
            {
                alloc_self_profile_query_strings_inner(tcx, query,
                    &mut string_cache);
            })(query);
    let query: &rustc_middle::query::QueryVTable<'_, _> =
        &tcx.query_system.query_vtables.has_global_allocator;
    (|query|
            {
                alloc_self_profile_query_strings_inner(tcx, query,
                    &mut string_cache);
            })(query);
    let query: &rustc_middle::query::QueryVTable<'_, _> =
        &tcx.query_system.query_vtables.has_alloc_error_handler;
    (|query|
            {
                alloc_self_profile_query_strings_inner(tcx, query,
                    &mut string_cache);
            })(query);
    let query: &rustc_middle::query::QueryVTable<'_, _> =
        &tcx.query_system.query_vtables.has_panic_handler;
    (|query|
            {
                alloc_self_profile_query_strings_inner(tcx, query,
                    &mut string_cache);
            })(query);
    let query: &rustc_middle::query::QueryVTable<'_, _> =
        &tcx.query_system.query_vtables.is_profiler_runtime;
    (|query|
            {
                alloc_self_profile_query_strings_inner(tcx, query,
                    &mut string_cache);
            })(query);
    let query: &rustc_middle::query::QueryVTable<'_, _> =
        &tcx.query_system.query_vtables.has_ffi_unwind_calls;
    (|query|
            {
                alloc_self_profile_query_strings_inner(tcx, query,
                    &mut string_cache);
            })(query);
    let query: &rustc_middle::query::QueryVTable<'_, _> =
        &tcx.query_system.query_vtables.required_panic_strategy;
    (|query|
            {
                alloc_self_profile_query_strings_inner(tcx, query,
                    &mut string_cache);
            })(query);
    let query: &rustc_middle::query::QueryVTable<'_, _> =
        &tcx.query_system.query_vtables.panic_in_drop_strategy;
    (|query|
            {
                alloc_self_profile_query_strings_inner(tcx, query,
                    &mut string_cache);
            })(query);
    let query: &rustc_middle::query::QueryVTable<'_, _> =
        &tcx.query_system.query_vtables.is_no_builtins;
    (|query|
            {
                alloc_self_profile_query_strings_inner(tcx, query,
                    &mut string_cache);
            })(query);
    let query: &rustc_middle::query::QueryVTable<'_, _> =
        &tcx.query_system.query_vtables.symbol_mangling_version;
    (|query|
            {
                alloc_self_profile_query_strings_inner(tcx, query,
                    &mut string_cache);
            })(query);
    let query: &rustc_middle::query::QueryVTable<'_, _> =
        &tcx.query_system.query_vtables.extern_crate;
    (|query|
            {
                alloc_self_profile_query_strings_inner(tcx, query,
                    &mut string_cache);
            })(query);
    let query: &rustc_middle::query::QueryVTable<'_, _> =
        &tcx.query_system.query_vtables.specialization_enabled_in;
    (|query|
            {
                alloc_self_profile_query_strings_inner(tcx, query,
                    &mut string_cache);
            })(query);
    let query: &rustc_middle::query::QueryVTable<'_, _> =
        &tcx.query_system.query_vtables.specializes;
    (|query|
            {
                alloc_self_profile_query_strings_inner(tcx, query,
                    &mut string_cache);
            })(query);
    let query: &rustc_middle::query::QueryVTable<'_, _> =
        &tcx.query_system.query_vtables.in_scope_traits_map;
    (|query|
            {
                alloc_self_profile_query_strings_inner(tcx, query,
                    &mut string_cache);
            })(query);
    let query: &rustc_middle::query::QueryVTable<'_, _> =
        &tcx.query_system.query_vtables.defaultness;
    (|query|
            {
                alloc_self_profile_query_strings_inner(tcx, query,
                    &mut string_cache);
            })(query);
    let query: &rustc_middle::query::QueryVTable<'_, _> =
        &tcx.query_system.query_vtables.default_field;
    (|query|
            {
                alloc_self_profile_query_strings_inner(tcx, query,
                    &mut string_cache);
            })(query);
    let query: &rustc_middle::query::QueryVTable<'_, _> =
        &tcx.query_system.query_vtables.check_well_formed;
    (|query|
            {
                alloc_self_profile_query_strings_inner(tcx, query,
                    &mut string_cache);
            })(query);
    let query: &rustc_middle::query::QueryVTable<'_, _> =
        &tcx.query_system.query_vtables.enforce_impl_non_lifetime_params_are_constrained;
    (|query|
            {
                alloc_self_profile_query_strings_inner(tcx, query,
                    &mut string_cache);
            })(query);
    let query: &rustc_middle::query::QueryVTable<'_, _> =
        &tcx.query_system.query_vtables.reachable_non_generics;
    (|query|
            {
                alloc_self_profile_query_strings_inner(tcx, query,
                    &mut string_cache);
            })(query);
    let query: &rustc_middle::query::QueryVTable<'_, _> =
        &tcx.query_system.query_vtables.is_reachable_non_generic;
    (|query|
            {
                alloc_self_profile_query_strings_inner(tcx, query,
                    &mut string_cache);
            })(query);
    let query: &rustc_middle::query::QueryVTable<'_, _> =
        &tcx.query_system.query_vtables.is_unreachable_local_definition;
    (|query|
            {
                alloc_self_profile_query_strings_inner(tcx, query,
                    &mut string_cache);
            })(query);
    let query: &rustc_middle::query::QueryVTable<'_, _> =
        &tcx.query_system.query_vtables.upstream_monomorphizations;
    (|query|
            {
                alloc_self_profile_query_strings_inner(tcx, query,
                    &mut string_cache);
            })(query);
    let query: &rustc_middle::query::QueryVTable<'_, _> =
        &tcx.query_system.query_vtables.upstream_monomorphizations_for;
    (|query|
            {
                alloc_self_profile_query_strings_inner(tcx, query,
                    &mut string_cache);
            })(query);
    let query: &rustc_middle::query::QueryVTable<'_, _> =
        &tcx.query_system.query_vtables.upstream_drop_glue_for;
    (|query|
            {
                alloc_self_profile_query_strings_inner(tcx, query,
                    &mut string_cache);
            })(query);
    let query: &rustc_middle::query::QueryVTable<'_, _> =
        &tcx.query_system.query_vtables.upstream_async_drop_glue_for;
    (|query|
            {
                alloc_self_profile_query_strings_inner(tcx, query,
                    &mut string_cache);
            })(query);
    let query: &rustc_middle::query::QueryVTable<'_, _> =
        &tcx.query_system.query_vtables.foreign_modules;
    (|query|
            {
                alloc_self_profile_query_strings_inner(tcx, query,
                    &mut string_cache);
            })(query);
    let query: &rustc_middle::query::QueryVTable<'_, _> =
        &tcx.query_system.query_vtables.clashing_extern_declarations;
    (|query|
            {
                alloc_self_profile_query_strings_inner(tcx, query,
                    &mut string_cache);
            })(query);
    let query: &rustc_middle::query::QueryVTable<'_, _> =
        &tcx.query_system.query_vtables.entry_fn;
    (|query|
            {
                alloc_self_profile_query_strings_inner(tcx, query,
                    &mut string_cache);
            })(query);
    let query: &rustc_middle::query::QueryVTable<'_, _> =
        &tcx.query_system.query_vtables.proc_macro_decls_static;
    (|query|
            {
                alloc_self_profile_query_strings_inner(tcx, query,
                    &mut string_cache);
            })(query);
    let query: &rustc_middle::query::QueryVTable<'_, _> =
        &tcx.query_system.query_vtables.crate_hash;
    (|query|
            {
                alloc_self_profile_query_strings_inner(tcx, query,
                    &mut string_cache);
            })(query);
    let query: &rustc_middle::query::QueryVTable<'_, _> =
        &tcx.query_system.query_vtables.crate_host_hash;
    (|query|
            {
                alloc_self_profile_query_strings_inner(tcx, query,
                    &mut string_cache);
            })(query);
    let query: &rustc_middle::query::QueryVTable<'_, _> =
        &tcx.query_system.query_vtables.extra_filename;
    (|query|
            {
                alloc_self_profile_query_strings_inner(tcx, query,
                    &mut string_cache);
            })(query);
    let query: &rustc_middle::query::QueryVTable<'_, _> =
        &tcx.query_system.query_vtables.crate_extern_paths;
    (|query|
            {
                alloc_self_profile_query_strings_inner(tcx, query,
                    &mut string_cache);
            })(query);
    let query: &rustc_middle::query::QueryVTable<'_, _> =
        &tcx.query_system.query_vtables.implementations_of_trait;
    (|query|
            {
                alloc_self_profile_query_strings_inner(tcx, query,
                    &mut string_cache);
            })(query);
    let query: &rustc_middle::query::QueryVTable<'_, _> =
        &tcx.query_system.query_vtables.crate_incoherent_impls;
    (|query|
            {
                alloc_self_profile_query_strings_inner(tcx, query,
                    &mut string_cache);
            })(query);
    let query: &rustc_middle::query::QueryVTable<'_, _> =
        &tcx.query_system.query_vtables.native_library;
    (|query|
            {
                alloc_self_profile_query_strings_inner(tcx, query,
                    &mut string_cache);
            })(query);
    let query: &rustc_middle::query::QueryVTable<'_, _> =
        &tcx.query_system.query_vtables.inherit_sig_for_delegation_item;
    (|query|
            {
                alloc_self_profile_query_strings_inner(tcx, query,
                    &mut string_cache);
            })(query);
    let query: &rustc_middle::query::QueryVTable<'_, _> =
        &tcx.query_system.query_vtables.resolve_bound_vars;
    (|query|
            {
                alloc_self_profile_query_strings_inner(tcx, query,
                    &mut string_cache);
            })(query);
    let query: &rustc_middle::query::QueryVTable<'_, _> =
        &tcx.query_system.query_vtables.named_variable_map;
    (|query|
            {
                alloc_self_profile_query_strings_inner(tcx, query,
                    &mut string_cache);
            })(query);
    let query: &rustc_middle::query::QueryVTable<'_, _> =
        &tcx.query_system.query_vtables.is_late_bound_map;
    (|query|
            {
                alloc_self_profile_query_strings_inner(tcx, query,
                    &mut string_cache);
            })(query);
    let query: &rustc_middle::query::QueryVTable<'_, _> =
        &tcx.query_system.query_vtables.object_lifetime_default;
    (|query|
            {
                alloc_self_profile_query_strings_inner(tcx, query,
                    &mut string_cache);
            })(query);
    let query: &rustc_middle::query::QueryVTable<'_, _> =
        &tcx.query_system.query_vtables.late_bound_vars_map;
    (|query|
            {
                alloc_self_profile_query_strings_inner(tcx, query,
                    &mut string_cache);
            })(query);
    let query: &rustc_middle::query::QueryVTable<'_, _> =
        &tcx.query_system.query_vtables.opaque_captured_lifetimes;
    (|query|
            {
                alloc_self_profile_query_strings_inner(tcx, query,
                    &mut string_cache);
            })(query);
    let query: &rustc_middle::query::QueryVTable<'_, _> =
        &tcx.query_system.query_vtables.visibility;
    (|query|
            {
                alloc_self_profile_query_strings_inner(tcx, query,
                    &mut string_cache);
            })(query);
    let query: &rustc_middle::query::QueryVTable<'_, _> =
        &tcx.query_system.query_vtables.inhabited_predicate_adt;
    (|query|
            {
                alloc_self_profile_query_strings_inner(tcx, query,
                    &mut string_cache);
            })(query);
    let query: &rustc_middle::query::QueryVTable<'_, _> =
        &tcx.query_system.query_vtables.inhabited_predicate_type;
    (|query|
            {
                alloc_self_profile_query_strings_inner(tcx, query,
                    &mut string_cache);
            })(query);
    let query: &rustc_middle::query::QueryVTable<'_, _> =
        &tcx.query_system.query_vtables.crate_dep_kind;
    (|query|
            {
                alloc_self_profile_query_strings_inner(tcx, query,
                    &mut string_cache);
            })(query);
    let query: &rustc_middle::query::QueryVTable<'_, _> =
        &tcx.query_system.query_vtables.crate_name;
    (|query|
            {
                alloc_self_profile_query_strings_inner(tcx, query,
                    &mut string_cache);
            })(query);
    let query: &rustc_middle::query::QueryVTable<'_, _> =
        &tcx.query_system.query_vtables.module_children;
    (|query|
            {
                alloc_self_profile_query_strings_inner(tcx, query,
                    &mut string_cache);
            })(query);
    let query: &rustc_middle::query::QueryVTable<'_, _> =
        &tcx.query_system.query_vtables.num_extern_def_ids;
    (|query|
            {
                alloc_self_profile_query_strings_inner(tcx, query,
                    &mut string_cache);
            })(query);
    let query: &rustc_middle::query::QueryVTable<'_, _> =
        &tcx.query_system.query_vtables.lib_features;
    (|query|
            {
                alloc_self_profile_query_strings_inner(tcx, query,
                    &mut string_cache);
            })(query);
    let query: &rustc_middle::query::QueryVTable<'_, _> =
        &tcx.query_system.query_vtables.stability_implications;
    (|query|
            {
                alloc_self_profile_query_strings_inner(tcx, query,
                    &mut string_cache);
            })(query);
    let query: &rustc_middle::query::QueryVTable<'_, _> =
        &tcx.query_system.query_vtables.intrinsic_raw;
    (|query|
            {
                alloc_self_profile_query_strings_inner(tcx, query,
                    &mut string_cache);
            })(query);
    let query: &rustc_middle::query::QueryVTable<'_, _> =
        &tcx.query_system.query_vtables.get_lang_items;
    (|query|
            {
                alloc_self_profile_query_strings_inner(tcx, query,
                    &mut string_cache);
            })(query);
    let query: &rustc_middle::query::QueryVTable<'_, _> =
        &tcx.query_system.query_vtables.all_diagnostic_items;
    (|query|
            {
                alloc_self_profile_query_strings_inner(tcx, query,
                    &mut string_cache);
            })(query);
    let query: &rustc_middle::query::QueryVTable<'_, _> =
        &tcx.query_system.query_vtables.defined_lang_items;
    (|query|
            {
                alloc_self_profile_query_strings_inner(tcx, query,
                    &mut string_cache);
            })(query);
    let query: &rustc_middle::query::QueryVTable<'_, _> =
        &tcx.query_system.query_vtables.diagnostic_items;
    (|query|
            {
                alloc_self_profile_query_strings_inner(tcx, query,
                    &mut string_cache);
            })(query);
    let query: &rustc_middle::query::QueryVTable<'_, _> =
        &tcx.query_system.query_vtables.missing_lang_items;
    (|query|
            {
                alloc_self_profile_query_strings_inner(tcx, query,
                    &mut string_cache);
            })(query);
    let query: &rustc_middle::query::QueryVTable<'_, _> =
        &tcx.query_system.query_vtables.visible_parent_map;
    (|query|
            {
                alloc_self_profile_query_strings_inner(tcx, query,
                    &mut string_cache);
            })(query);
    let query: &rustc_middle::query::QueryVTable<'_, _> =
        &tcx.query_system.query_vtables.trimmed_def_paths;
    (|query|
            {
                alloc_self_profile_query_strings_inner(tcx, query,
                    &mut string_cache);
            })(query);
    let query: &rustc_middle::query::QueryVTable<'_, _> =
        &tcx.query_system.query_vtables.missing_extern_crate_item;
    (|query|
            {
                alloc_self_profile_query_strings_inner(tcx, query,
                    &mut string_cache);
            })(query);
    let query: &rustc_middle::query::QueryVTable<'_, _> =
        &tcx.query_system.query_vtables.used_crate_source;
    (|query|
            {
                alloc_self_profile_query_strings_inner(tcx, query,
                    &mut string_cache);
            })(query);
    let query: &rustc_middle::query::QueryVTable<'_, _> =
        &tcx.query_system.query_vtables.debugger_visualizers;
    (|query|
            {
                alloc_self_profile_query_strings_inner(tcx, query,
                    &mut string_cache);
            })(query);
    let query: &rustc_middle::query::QueryVTable<'_, _> =
        &tcx.query_system.query_vtables.postorder_cnums;
    (|query|
            {
                alloc_self_profile_query_strings_inner(tcx, query,
                    &mut string_cache);
            })(query);
    let query: &rustc_middle::query::QueryVTable<'_, _> =
        &tcx.query_system.query_vtables.is_private_dep;
    (|query|
            {
                alloc_self_profile_query_strings_inner(tcx, query,
                    &mut string_cache);
            })(query);
    let query: &rustc_middle::query::QueryVTable<'_, _> =
        &tcx.query_system.query_vtables.allocator_kind;
    (|query|
            {
                alloc_self_profile_query_strings_inner(tcx, query,
                    &mut string_cache);
            })(query);
    let query: &rustc_middle::query::QueryVTable<'_, _> =
        &tcx.query_system.query_vtables.alloc_error_handler_kind;
    (|query|
            {
                alloc_self_profile_query_strings_inner(tcx, query,
                    &mut string_cache);
            })(query);
    let query: &rustc_middle::query::QueryVTable<'_, _> =
        &tcx.query_system.query_vtables.upvars_mentioned;
    (|query|
            {
                alloc_self_profile_query_strings_inner(tcx, query,
                    &mut string_cache);
            })(query);
    let query: &rustc_middle::query::QueryVTable<'_, _> =
        &tcx.query_system.query_vtables.crates;
    (|query|
            {
                alloc_self_profile_query_strings_inner(tcx, query,
                    &mut string_cache);
            })(query);
    let query: &rustc_middle::query::QueryVTable<'_, _> =
        &tcx.query_system.query_vtables.used_crates;
    (|query|
            {
                alloc_self_profile_query_strings_inner(tcx, query,
                    &mut string_cache);
            })(query);
    let query: &rustc_middle::query::QueryVTable<'_, _> =
        &tcx.query_system.query_vtables.duplicate_crate_names;
    (|query|
            {
                alloc_self_profile_query_strings_inner(tcx, query,
                    &mut string_cache);
            })(query);
    let query: &rustc_middle::query::QueryVTable<'_, _> =
        &tcx.query_system.query_vtables.traits;
    (|query|
            {
                alloc_self_profile_query_strings_inner(tcx, query,
                    &mut string_cache);
            })(query);
    let query: &rustc_middle::query::QueryVTable<'_, _> =
        &tcx.query_system.query_vtables.trait_impls_in_crate;
    (|query|
            {
                alloc_self_profile_query_strings_inner(tcx, query,
                    &mut string_cache);
            })(query);
    let query: &rustc_middle::query::QueryVTable<'_, _> =
        &tcx.query_system.query_vtables.stable_order_of_exportable_impls;
    (|query|
            {
                alloc_self_profile_query_strings_inner(tcx, query,
                    &mut string_cache);
            })(query);
    let query: &rustc_middle::query::QueryVTable<'_, _> =
        &tcx.query_system.query_vtables.exportable_items;
    (|query|
            {
                alloc_self_profile_query_strings_inner(tcx, query,
                    &mut string_cache);
            })(query);
    let query: &rustc_middle::query::QueryVTable<'_, _> =
        &tcx.query_system.query_vtables.exported_non_generic_symbols;
    (|query|
            {
                alloc_self_profile_query_strings_inner(tcx, query,
                    &mut string_cache);
            })(query);
    let query: &rustc_middle::query::QueryVTable<'_, _> =
        &tcx.query_system.query_vtables.exported_generic_symbols;
    (|query|
            {
                alloc_self_profile_query_strings_inner(tcx, query,
                    &mut string_cache);
            })(query);
    let query: &rustc_middle::query::QueryVTable<'_, _> =
        &tcx.query_system.query_vtables.collect_and_partition_mono_items;
    (|query|
            {
                alloc_self_profile_query_strings_inner(tcx, query,
                    &mut string_cache);
            })(query);
    let query: &rustc_middle::query::QueryVTable<'_, _> =
        &tcx.query_system.query_vtables.is_codegened_item;
    (|query|
            {
                alloc_self_profile_query_strings_inner(tcx, query,
                    &mut string_cache);
            })(query);
    let query: &rustc_middle::query::QueryVTable<'_, _> =
        &tcx.query_system.query_vtables.codegen_unit;
    (|query|
            {
                alloc_self_profile_query_strings_inner(tcx, query,
                    &mut string_cache);
            })(query);
    let query: &rustc_middle::query::QueryVTable<'_, _> =
        &tcx.query_system.query_vtables.backend_optimization_level;
    (|query|
            {
                alloc_self_profile_query_strings_inner(tcx, query,
                    &mut string_cache);
            })(query);
    let query: &rustc_middle::query::QueryVTable<'_, _> =
        &tcx.query_system.query_vtables.output_filenames;
    (|query|
            {
                alloc_self_profile_query_strings_inner(tcx, query,
                    &mut string_cache);
            })(query);
    let query: &rustc_middle::query::QueryVTable<'_, _> =
        &tcx.query_system.query_vtables.normalize_canonicalized_projection;
    (|query|
            {
                alloc_self_profile_query_strings_inner(tcx, query,
                    &mut string_cache);
            })(query);
    let query: &rustc_middle::query::QueryVTable<'_, _> =
        &tcx.query_system.query_vtables.normalize_canonicalized_free_alias;
    (|query|
            {
                alloc_self_profile_query_strings_inner(tcx, query,
                    &mut string_cache);
            })(query);
    let query: &rustc_middle::query::QueryVTable<'_, _> =
        &tcx.query_system.query_vtables.normalize_canonicalized_inherent_projection;
    (|query|
            {
                alloc_self_profile_query_strings_inner(tcx, query,
                    &mut string_cache);
            })(query);
    let query: &rustc_middle::query::QueryVTable<'_, _> =
        &tcx.query_system.query_vtables.try_normalize_generic_arg_after_erasing_regions;
    (|query|
            {
                alloc_self_profile_query_strings_inner(tcx, query,
                    &mut string_cache);
            })(query);
    let query: &rustc_middle::query::QueryVTable<'_, _> =
        &tcx.query_system.query_vtables.implied_outlives_bounds;
    (|query|
            {
                alloc_self_profile_query_strings_inner(tcx, query,
                    &mut string_cache);
            })(query);
    let query: &rustc_middle::query::QueryVTable<'_, _> =
        &tcx.query_system.query_vtables.dropck_outlives;
    (|query|
            {
                alloc_self_profile_query_strings_inner(tcx, query,
                    &mut string_cache);
            })(query);
    let query: &rustc_middle::query::QueryVTable<'_, _> =
        &tcx.query_system.query_vtables.evaluate_obligation;
    (|query|
            {
                alloc_self_profile_query_strings_inner(tcx, query,
                    &mut string_cache);
            })(query);
    let query: &rustc_middle::query::QueryVTable<'_, _> =
        &tcx.query_system.query_vtables.type_op_ascribe_user_type;
    (|query|
            {
                alloc_self_profile_query_strings_inner(tcx, query,
                    &mut string_cache);
            })(query);
    let query: &rustc_middle::query::QueryVTable<'_, _> =
        &tcx.query_system.query_vtables.type_op_prove_predicate;
    (|query|
            {
                alloc_self_profile_query_strings_inner(tcx, query,
                    &mut string_cache);
            })(query);
    let query: &rustc_middle::query::QueryVTable<'_, _> =
        &tcx.query_system.query_vtables.type_op_normalize_ty;
    (|query|
            {
                alloc_self_profile_query_strings_inner(tcx, query,
                    &mut string_cache);
            })(query);
    let query: &rustc_middle::query::QueryVTable<'_, _> =
        &tcx.query_system.query_vtables.type_op_normalize_clause;
    (|query|
            {
                alloc_self_profile_query_strings_inner(tcx, query,
                    &mut string_cache);
            })(query);
    let query: &rustc_middle::query::QueryVTable<'_, _> =
        &tcx.query_system.query_vtables.type_op_normalize_poly_fn_sig;
    (|query|
            {
                alloc_self_profile_query_strings_inner(tcx, query,
                    &mut string_cache);
            })(query);
    let query: &rustc_middle::query::QueryVTable<'_, _> =
        &tcx.query_system.query_vtables.type_op_normalize_fn_sig;
    (|query|
            {
                alloc_self_profile_query_strings_inner(tcx, query,
                    &mut string_cache);
            })(query);
    let query: &rustc_middle::query::QueryVTable<'_, _> =
        &tcx.query_system.query_vtables.instantiate_and_check_impossible_predicates;
    (|query|
            {
                alloc_self_profile_query_strings_inner(tcx, query,
                    &mut string_cache);
            })(query);
    let query: &rustc_middle::query::QueryVTable<'_, _> =
        &tcx.query_system.query_vtables.is_impossible_associated_item;
    (|query|
            {
                alloc_self_profile_query_strings_inner(tcx, query,
                    &mut string_cache);
            })(query);
    let query: &rustc_middle::query::QueryVTable<'_, _> =
        &tcx.query_system.query_vtables.method_autoderef_steps;
    (|query|
            {
                alloc_self_profile_query_strings_inner(tcx, query,
                    &mut string_cache);
            })(query);
    let query: &rustc_middle::query::QueryVTable<'_, _> =
        &tcx.query_system.query_vtables.evaluate_root_goal_for_proof_tree_raw;
    (|query|
            {
                alloc_self_profile_query_strings_inner(tcx, query,
                    &mut string_cache);
            })(query);
    let query: &rustc_middle::query::QueryVTable<'_, _> =
        &tcx.query_system.query_vtables.rust_target_features;
    (|query|
            {
                alloc_self_profile_query_strings_inner(tcx, query,
                    &mut string_cache);
            })(query);
    let query: &rustc_middle::query::QueryVTable<'_, _> =
        &tcx.query_system.query_vtables.implied_target_features;
    (|query|
            {
                alloc_self_profile_query_strings_inner(tcx, query,
                    &mut string_cache);
            })(query);
    let query: &rustc_middle::query::QueryVTable<'_, _> =
        &tcx.query_system.query_vtables.features_query;
    (|query|
            {
                alloc_self_profile_query_strings_inner(tcx, query,
                    &mut string_cache);
            })(query);
    let query: &rustc_middle::query::QueryVTable<'_, _> =
        &tcx.query_system.query_vtables.crate_for_resolver;
    (|query|
            {
                alloc_self_profile_query_strings_inner(tcx, query,
                    &mut string_cache);
            })(query);
    let query: &rustc_middle::query::QueryVTable<'_, _> =
        &tcx.query_system.query_vtables.resolve_instance_raw;
    (|query|
            {
                alloc_self_profile_query_strings_inner(tcx, query,
                    &mut string_cache);
            })(query);
    let query: &rustc_middle::query::QueryVTable<'_, _> =
        &tcx.query_system.query_vtables.reveal_opaque_types_in_bounds;
    (|query|
            {
                alloc_self_profile_query_strings_inner(tcx, query,
                    &mut string_cache);
            })(query);
    let query: &rustc_middle::query::QueryVTable<'_, _> =
        &tcx.query_system.query_vtables.limits;
    (|query|
            {
                alloc_self_profile_query_strings_inner(tcx, query,
                    &mut string_cache);
            })(query);
    let query: &rustc_middle::query::QueryVTable<'_, _> =
        &tcx.query_system.query_vtables.diagnostic_hir_wf_check;
    (|query|
            {
                alloc_self_profile_query_strings_inner(tcx, query,
                    &mut string_cache);
            })(query);
    let query: &rustc_middle::query::QueryVTable<'_, _> =
        &tcx.query_system.query_vtables.global_backend_features;
    (|query|
            {
                alloc_self_profile_query_strings_inner(tcx, query,
                    &mut string_cache);
            })(query);
    let query: &rustc_middle::query::QueryVTable<'_, _> =
        &tcx.query_system.query_vtables.check_validity_requirement;
    (|query|
            {
                alloc_self_profile_query_strings_inner(tcx, query,
                    &mut string_cache);
            })(query);
    let query: &rustc_middle::query::QueryVTable<'_, _> =
        &tcx.query_system.query_vtables.compare_impl_item;
    (|query|
            {
                alloc_self_profile_query_strings_inner(tcx, query,
                    &mut string_cache);
            })(query);
    let query: &rustc_middle::query::QueryVTable<'_, _> =
        &tcx.query_system.query_vtables.deduced_param_attrs;
    (|query|
            {
                alloc_self_profile_query_strings_inner(tcx, query,
                    &mut string_cache);
            })(query);
    let query: &rustc_middle::query::QueryVTable<'_, _> =
        &tcx.query_system.query_vtables.doc_link_resolutions;
    (|query|
            {
                alloc_self_profile_query_strings_inner(tcx, query,
                    &mut string_cache);
            })(query);
    let query: &rustc_middle::query::QueryVTable<'_, _> =
        &tcx.query_system.query_vtables.doc_link_traits_in_scope;
    (|query|
            {
                alloc_self_profile_query_strings_inner(tcx, query,
                    &mut string_cache);
            })(query);
    let query: &rustc_middle::query::QueryVTable<'_, _> =
        &tcx.query_system.query_vtables.stripped_cfg_items;
    (|query|
            {
                alloc_self_profile_query_strings_inner(tcx, query,
                    &mut string_cache);
            })(query);
    let query: &rustc_middle::query::QueryVTable<'_, _> =
        &tcx.query_system.query_vtables.generics_require_sized_self;
    (|query|
            {
                alloc_self_profile_query_strings_inner(tcx, query,
                    &mut string_cache);
            })(query);
    let query: &rustc_middle::query::QueryVTable<'_, _> =
        &tcx.query_system.query_vtables.cross_crate_inlinable;
    (|query|
            {
                alloc_self_profile_query_strings_inner(tcx, query,
                    &mut string_cache);
            })(query);
    let query: &rustc_middle::query::QueryVTable<'_, _> =
        &tcx.query_system.query_vtables.check_mono_item;
    (|query|
            {
                alloc_self_profile_query_strings_inner(tcx, query,
                    &mut string_cache);
            })(query);
    let query: &rustc_middle::query::QueryVTable<'_, _> =
        &tcx.query_system.query_vtables.skip_move_check_fns;
    (|query|
            {
                alloc_self_profile_query_strings_inner(tcx, query,
                    &mut string_cache);
            })(query);
    let query: &rustc_middle::query::QueryVTable<'_, _> =
        &tcx.query_system.query_vtables.items_of_instance;
    (|query|
            {
                alloc_self_profile_query_strings_inner(tcx, query,
                    &mut string_cache);
            })(query);
    let query: &rustc_middle::query::QueryVTable<'_, _> =
        &tcx.query_system.query_vtables.size_estimate;
    (|query|
            {
                alloc_self_profile_query_strings_inner(tcx, query,
                    &mut string_cache);
            })(query);
    let query: &rustc_middle::query::QueryVTable<'_, _> =
        &tcx.query_system.query_vtables.anon_const_kind;
    (|query|
            {
                alloc_self_profile_query_strings_inner(tcx, query,
                    &mut string_cache);
            })(query);
    let query: &rustc_middle::query::QueryVTable<'_, _> =
        &tcx.query_system.query_vtables.trivial_const;
    (|query|
            {
                alloc_self_profile_query_strings_inner(tcx, query,
                    &mut string_cache);
            })(query);
    let query: &rustc_middle::query::QueryVTable<'_, _> =
        &tcx.query_system.query_vtables.sanitizer_settings_for;
    (|query|
            {
                alloc_self_profile_query_strings_inner(tcx, query,
                    &mut string_cache);
            })(query);
    let query: &rustc_middle::query::QueryVTable<'_, _> =
        &tcx.query_system.query_vtables.check_externally_implementable_items;
    (|query|
            {
                alloc_self_profile_query_strings_inner(tcx, query,
                    &mut string_cache);
            })(query);
    let query: &rustc_middle::query::QueryVTable<'_, _> =
        &tcx.query_system.query_vtables.externally_implementable_items;
    (|query|
            {
                alloc_self_profile_query_strings_inner(tcx, query,
                    &mut string_cache);
            })(query);
};for_each_query_vtable!(ALL, tcx, |query| {
194        alloc_self_profile_query_strings_inner(tcx, query, &mut string_cache);
195    });
196
197    tcx.sess.prof.store_query_cache_hits();
198}
199
200/// Allocate the self-profiling query strings for a single query cache. This
201/// method is called from `alloc_self_profile_query_strings` which knows all
202/// the queries via macro magic.
203fn alloc_self_profile_query_strings_inner<'tcx, C>(
204    tcx: TyCtxt<'tcx>,
205    query: &'tcx QueryVTable<'tcx, C>,
206    string_cache: &mut QueryKeyStringCache,
207) where
208    C: QueryCache,
209    C::Key: Debug + Clone,
210{
211    tcx.prof.with_profiler(|profiler| {
212        let event_id_builder = profiler.event_id_builder();
213
214        // Walk the entire query cache and allocate the appropriate
215        // string representations. Each cache entry is uniquely
216        // identified by its dep_node_index.
217        if profiler.query_key_recording_enabled() {
218            let mut query_string_builder = QueryKeyStringBuilder::new(profiler, tcx, string_cache);
219
220            let query_name = profiler.get_or_alloc_cached_string(query.name);
221
222            // Since building the string representation of query keys might
223            // need to invoke queries itself, we cannot keep the query caches
224            // locked while doing so. Instead we copy out the
225            // `(query_key, dep_node_index)` pairs and release the lock again.
226            let mut query_keys_and_indices = Vec::new();
227            query.cache.for_each(&mut |k, _, i| query_keys_and_indices.push((*k, i)));
228
229            // Now actually allocate the strings. If allocating the strings
230            // generates new entries in the query cache, we'll miss them but
231            // we don't actually care.
232            for (query_key, dep_node_index) in query_keys_and_indices {
233                // Translate the DepNodeIndex into a QueryInvocationId
234                let query_invocation_id = dep_node_index.into();
235
236                // Create the string version of the query-key
237                let query_key = query_key.to_self_profile_string(&mut query_string_builder);
238                let event_id = event_id_builder.from_label_and_arg(query_name, query_key);
239
240                // Doing this in bulk might be a good idea:
241                profiler.map_query_invocation_id_to_string(
242                    query_invocation_id,
243                    event_id.to_string_id(),
244                );
245            }
246        } else {
247            // In this branch we don't allocate query keys
248            let query_name = profiler.get_or_alloc_cached_string(query.name);
249            let event_id = event_id_builder.from_label(query_name).to_string_id();
250
251            // FIXME(eddyb) make this O(1) by using a pre-cached query name `EventId`,
252            // instead of passing the `DepNodeIndex` to `finish_with_query_invocation_id`,
253            // when recording the event in the first place.
254            let mut query_invocation_ids = Vec::new();
255            query.cache.for_each(&mut |_, _, i| {
256                query_invocation_ids.push(i.into());
257            });
258
259            profiler.bulk_map_query_invocation_id_to_single_string(
260                query_invocation_ids.into_iter(),
261                event_id,
262            );
263        }
264    });
265}