Skip to main content

rustc_middle/dep_graph/
dep_node.rs

1//! This module defines the [`DepNode`] type which the compiler uses to represent
2//! nodes in the [dependency graph]. A `DepNode` consists of a [`DepKind`] (which
3//! specifies the kind of thing it represents, like a piece of HIR, MIR, etc.)
4//! and a "key fingerprint", a 128-bit hash value, the exact meaning of which
5//! depends on the node's `DepKind`. Together, the kind and the key fingerprint
6//! fully identify a dependency node, even across multiple compilation sessions.
7//! In other words, the value of the key fingerprint does not depend on anything
8//! that is specific to a given compilation session, like an unpredictable
9//! interning key (e.g., `NodeId`, `DefId`, `Symbol`) or the numeric value of a
10//! pointer. The concept behind this could be compared to how git commit hashes
11//! uniquely identify a given commit. The fingerprinting approach has
12//! a few advantages:
13//!
14//! * A `DepNode` can simply be serialized to disk and loaded in another session
15//!   without the need to do any "rebasing" (like we have to do for Spans and
16//!   NodeIds) or "retracing" (like we had to do for `DefId` in earlier
17//!   implementations of the dependency graph).
18//! * A `Fingerprint` is just a bunch of bits, which allows `DepNode` to
19//!   implement `Copy`, `Sync`, `Send`, `Freeze`, etc.
20//! * Since we just have a bit pattern, `DepNode` can be mapped from disk into
21//!   memory without any post-processing (e.g., "abomination-style" pointer
22//!   reconstruction).
23//! * Because a `DepNode` is self-contained, we can instantiate `DepNodes` that
24//!   refer to things that do not exist anymore. In previous implementations
25//!   `DepNode` contained a `DefId`. A `DepNode` referring to something that
26//!   had been removed between the previous and the current compilation session
27//!   could not be instantiated because the current compilation session
28//!   contained no `DefId` for thing that had been removed.
29//!
30//! `DepNode` definition happens in `rustc_middle` with the
31//! `define_dep_nodes!()` macro. This macro defines the `DepKind` enum. Each
32//! `DepKind` has its own parameters that are needed at runtime in order to
33//! construct a valid `DepNode` fingerprint. However, only `CompileCodegenUnit`
34//! and `CompileMonoItem` are constructed explicitly (with
35//! `make_compile_codegen_unit` and `make_compile_mono_item`).
36//!
37//! Because the macro sees what parameters a given `DepKind` requires, it can
38//! "infer" some properties for each kind of `DepNode`:
39//!
40//! * Whether a `DepNode` of a given kind has any parameters at all. Some
41//!   `DepNode`s could represent global concepts with only one value.
42//! * Whether it is possible, in principle, to reconstruct a query key from a
43//!   given `DepNode`. Many `DepKind`s only require a single `DefId` parameter,
44//!   in which case it is possible to map the node's key fingerprint back to the
45//!   `DefId` it was computed from. In other cases, too much information gets
46//!   lost when computing a key fingerprint.
47//!
48//! [dependency graph]: https://rustc-dev-guide.rust-lang.org/query.html
49
50use std::fmt;
51use std::hash::Hash;
52
53use rustc_data_structures::fingerprint::{Fingerprint, PackedFingerprint};
54use rustc_data_structures::stable_hasher::{StableHasher, StableOrd, ToStableHashKey};
55use rustc_hir::def_id::DefId;
56use rustc_hir::definitions::DefPathHash;
57use rustc_macros::{Decodable, Encodable, HashStable};
58use rustc_span::Symbol;
59
60use super::{KeyFingerprintStyle, SerializedDepNodeIndex};
61use crate::dep_graph::DepNodeKey;
62use crate::mir::mono::MonoItem;
63use crate::ty::{TyCtxt, tls};
64
65// `enum DepKind` is generated by `define_dep_nodes!` below.
66impl DepKind {
67    #[inline]
68    pub(crate) fn from_u16(u: u16) -> Self {
69        if u > Self::MAX {
70            { ::core::panicking::panic_fmt(format_args!("Invalid DepKind {0}", u)); };panic!("Invalid DepKind {u}");
71        }
72        // SAFETY: See comment on DEP_KIND_NUM_VARIANTS
73        unsafe { std::mem::transmute(u) }
74    }
75
76    #[inline]
77    pub(crate) const fn as_u16(&self) -> u16 {
78        *self as u16
79    }
80
81    #[inline]
82    pub const fn as_usize(&self) -> usize {
83        *self as usize
84    }
85
86    /// This is the highest value a `DepKind` can have. It's used during encoding to
87    /// pack information into the unused bits.
88    pub(crate) const MAX: u16 = DEP_KIND_NUM_VARIANTS - 1;
89}
90
91/// Combination of a [`DepKind`] and a key fingerprint that uniquely identifies
92/// a node in the dep graph.
93#[derive(#[automatically_derived]
impl ::core::clone::Clone for DepNode {
    #[inline]
    fn clone(&self) -> DepNode {
        let _: ::core::clone::AssertParamIsClone<DepKind>;
        let _: ::core::clone::AssertParamIsClone<PackedFingerprint>;
        *self
    }
}Clone, #[automatically_derived]
impl ::core::marker::Copy for DepNode { }Copy, #[automatically_derived]
impl ::core::cmp::PartialEq for DepNode {
    #[inline]
    fn eq(&self, other: &DepNode) -> bool {
        self.kind == other.kind &&
            self.key_fingerprint == other.key_fingerprint
    }
}PartialEq, #[automatically_derived]
impl ::core::cmp::Eq for DepNode {
    #[inline]
    #[doc(hidden)]
    #[coverage(off)]
    fn assert_fields_are_eq(&self) {
        let _: ::core::cmp::AssertParamIsEq<DepKind>;
        let _: ::core::cmp::AssertParamIsEq<PackedFingerprint>;
    }
}Eq, #[automatically_derived]
impl ::core::hash::Hash for DepNode {
    #[inline]
    fn hash<__H: ::core::hash::Hasher>(&self, state: &mut __H) {
        ::core::hash::Hash::hash(&self.kind, state);
        ::core::hash::Hash::hash(&self.key_fingerprint, state)
    }
}Hash)]
94pub struct DepNode {
95    pub kind: DepKind,
96
97    /// This is _typically_ a hash of the query key, but sometimes not.
98    ///
99    /// For example, `anon` nodes have a fingerprint that is derived from their
100    /// dependencies instead of a key.
101    ///
102    /// In some cases the key value can be reconstructed from this fingerprint;
103    /// see [`KeyFingerprintStyle`].
104    pub key_fingerprint: PackedFingerprint,
105}
106
107impl DepNode {
108    /// Creates a new, parameterless DepNode. This method will assert
109    /// that the DepNode corresponding to the given DepKind actually
110    /// does not require any parameters.
111    pub fn new_no_params<'tcx>(tcx: TyCtxt<'tcx>, kind: DepKind) -> DepNode {
112        if true {
    match (&tcx.key_fingerprint_style(kind), &KeyFingerprintStyle::Unit) {
        (left_val, right_val) => {
            if !(*left_val == *right_val) {
                let kind = ::core::panicking::AssertKind::Eq;
                ::core::panicking::assert_failed(kind, &*left_val,
                    &*right_val, ::core::option::Option::None);
            }
        }
    };
};debug_assert_eq!(tcx.key_fingerprint_style(kind), KeyFingerprintStyle::Unit);
113        DepNode { kind, key_fingerprint: Fingerprint::ZERO.into() }
114    }
115
116    pub fn construct<'tcx, Key>(tcx: TyCtxt<'tcx>, kind: DepKind, key: &Key) -> DepNode
117    where
118        Key: DepNodeKey<'tcx>,
119    {
120        let dep_node = DepNode { kind, key_fingerprint: key.to_fingerprint(tcx).into() };
121
122        #[cfg(debug_assertions)]
123        {
124            if !tcx.key_fingerprint_style(kind).is_maybe_recoverable()
125                && (tcx.sess.opts.unstable_opts.incremental_info
126                    || tcx.sess.opts.unstable_opts.query_dep_graph)
127            {
128                tcx.dep_graph.register_dep_node_debug_str(dep_node, || key.to_debug_str(tcx));
129            }
130        }
131
132        dep_node
133    }
134
135    /// Construct a DepNode from the given DepKind and DefPathHash. This
136    /// method will assert that the given DepKind actually requires a
137    /// single DefId/DefPathHash parameter.
138    pub fn from_def_path_hash<'tcx>(
139        tcx: TyCtxt<'tcx>,
140        def_path_hash: DefPathHash,
141        kind: DepKind,
142    ) -> Self {
143        if true {
    if !(tcx.key_fingerprint_style(kind) == KeyFingerprintStyle::DefPathHash)
        {
        ::core::panicking::panic("assertion failed: tcx.key_fingerprint_style(kind) == KeyFingerprintStyle::DefPathHash")
    };
};debug_assert!(tcx.key_fingerprint_style(kind) == KeyFingerprintStyle::DefPathHash);
144        DepNode { kind, key_fingerprint: def_path_hash.0.into() }
145    }
146}
147
148impl fmt::Debug for DepNode {
149    fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
150        f.write_fmt(format_args!("{0:?}(", self.kind))write!(f, "{:?}(", self.kind)?;
151
152        tls::with_opt(|opt_tcx| {
153            if let Some(tcx) = opt_tcx {
154                if let Some(def_id) = self.extract_def_id(tcx) {
155                    f.write_fmt(format_args!("{0}", tcx.def_path_debug_str(def_id)))write!(f, "{}", tcx.def_path_debug_str(def_id))?;
156                } else if let Some(ref s) = tcx.dep_graph.dep_node_debug_str(*self) {
157                    f.write_fmt(format_args!("{0}", s))write!(f, "{s}")?;
158                } else {
159                    f.write_fmt(format_args!("{0}", self.key_fingerprint))write!(f, "{}", self.key_fingerprint)?;
160                }
161            } else {
162                f.write_fmt(format_args!("{0}", self.key_fingerprint))write!(f, "{}", self.key_fingerprint)?;
163            }
164            Ok(())
165        })?;
166
167        f.write_fmt(format_args!(")"))write!(f, ")")
168    }
169}
170
171/// This struct stores function pointers and other metadata for a particular DepKind.
172///
173/// Information is retrieved by indexing the `DEP_KINDS` array using the integer value
174/// of the `DepKind`. Overall, this allows to implement `DepContext` using this manual
175/// jump table instead of large matches.
176pub struct DepKindVTable<'tcx> {
177    /// Eval-always queries do not track their dependencies, and are always recomputed, even if
178    /// their inputs have not changed since the last compiler invocation. The result is still
179    /// cached within one compiler invocation.
180    pub is_eval_always: bool,
181
182    /// Indicates whether and how a query key can be reconstructed from the
183    /// key fingerprint of a dep node with this [`DepKind`].
184    ///
185    /// The [`DepNodeKey`] trait determines the fingerprint style for each key type.
186    pub key_fingerprint_style: KeyFingerprintStyle,
187
188    /// The red/green evaluation system will try to mark a specific DepNode in the
189    /// dependency graph as green by recursively trying to mark the dependencies of
190    /// that `DepNode` as green. While doing so, it will sometimes encounter a `DepNode`
191    /// where we don't know if it is red or green and we therefore actually have
192    /// to recompute its value in order to find out. Since the only piece of
193    /// information that we have at that point is the `DepNode` we are trying to
194    /// re-evaluate, we need some way to re-run a query from just that. This is what
195    /// `force_from_dep_node()` implements.
196    ///
197    /// In the general case, a `DepNode` consists of a `DepKind` and an opaque
198    /// "key fingerprint" that will uniquely identify the node. This key fingerprint
199    /// is usually constructed by computing a stable hash of the query-key that the
200    /// `DepNode` corresponds to. Consequently, it is not in general possible to go
201    /// back from hash to query-key (since hash functions are not reversible). For
202    /// this reason `force_from_dep_node()` is expected to fail from time to time
203    /// because we just cannot find out, from the `DepNode` alone, what the
204    /// corresponding query-key is and therefore cannot re-run the query.
205    ///
206    /// The system deals with this case letting `try_mark_green` fail which forces
207    /// the root query to be re-evaluated.
208    ///
209    /// Now, if `force_from_dep_node()` would always fail, it would be pretty useless.
210    /// Fortunately, we can use some contextual information that will allow us to
211    /// reconstruct query-keys for certain kinds of `DepNode`s. In particular, we
212    /// enforce by construction that the key fingerprint of certain `DepNode`s is a
213    /// valid `DefPathHash`. Since we also always build a huge table that maps every
214    /// `DefPathHash` in the current codebase to the corresponding `DefId`, we have
215    /// everything we need to re-run the query.
216    ///
217    /// Take the `mir_promoted` query as an example. Like many other queries, it
218    /// just has a single parameter: the `DefId` of the item it will compute the
219    /// validated MIR for. Now, when we call `force_from_dep_node()` on a `DepNode`
220    /// with kind `mir_promoted`, we know that the key fingerprint of the `DepNode`
221    /// is actually a `DefPathHash`, and can therefore just look up the corresponding
222    /// `DefId` in `tcx.def_path_hash_to_def_id`.
223    pub force_from_dep_node_fn: Option<
224        fn(tcx: TyCtxt<'tcx>, dep_node: DepNode, prev_index: SerializedDepNodeIndex) -> bool,
225    >,
226
227    /// Invoke a query to put the on-disk cached value in memory.
228    pub promote_from_disk_fn: Option<fn(TyCtxt<'tcx>, DepNode)>,
229}
230
231/// A "work product" corresponds to a `.o` (or other) file that we
232/// save in between runs. These IDs do not have a `DefId` but rather
233/// some independent path or string that persists between runs without
234/// the need to be mapped or unmapped. (This ensures we can serialize
235/// them even in the absence of a tcx.)
236#[derive(
237    #[automatically_derived]
impl ::core::clone::Clone for WorkProductId {
    #[inline]
    fn clone(&self) -> WorkProductId {
        let _: ::core::clone::AssertParamIsClone<Fingerprint>;
        *self
    }
}Clone, #[automatically_derived]
impl ::core::marker::Copy for WorkProductId { }Copy, #[automatically_derived]
impl ::core::fmt::Debug for WorkProductId {
    #[inline]
    fn fmt(&self, f: &mut ::core::fmt::Formatter) -> ::core::fmt::Result {
        ::core::fmt::Formatter::debug_struct_field1_finish(f, "WorkProductId",
            "hash", &&self.hash)
    }
}Debug, #[automatically_derived]
impl ::core::cmp::PartialEq for WorkProductId {
    #[inline]
    fn eq(&self, other: &WorkProductId) -> bool { self.hash == other.hash }
}PartialEq, #[automatically_derived]
impl ::core::cmp::Eq for WorkProductId {
    #[inline]
    #[doc(hidden)]
    #[coverage(off)]
    fn assert_fields_are_eq(&self) {
        let _: ::core::cmp::AssertParamIsEq<Fingerprint>;
    }
}Eq, #[automatically_derived]
impl ::core::cmp::PartialOrd for WorkProductId {
    #[inline]
    fn partial_cmp(&self, other: &WorkProductId)
        -> ::core::option::Option<::core::cmp::Ordering> {
        ::core::cmp::PartialOrd::partial_cmp(&self.hash, &other.hash)
    }
}PartialOrd, #[automatically_derived]
impl ::core::cmp::Ord for WorkProductId {
    #[inline]
    fn cmp(&self, other: &WorkProductId) -> ::core::cmp::Ordering {
        ::core::cmp::Ord::cmp(&self.hash, &other.hash)
    }
}Ord, #[automatically_derived]
impl ::core::hash::Hash for WorkProductId {
    #[inline]
    fn hash<__H: ::core::hash::Hasher>(&self, state: &mut __H) {
        ::core::hash::Hash::hash(&self.hash, state)
    }
}Hash, const _: () =
    {
        impl<__E: ::rustc_span::SpanEncoder> ::rustc_serialize::Encodable<__E>
            for WorkProductId {
            fn encode(&self, __encoder: &mut __E) {
                match *self {
                    WorkProductId { hash: ref __binding_0 } => {
                        ::rustc_serialize::Encodable::<__E>::encode(__binding_0,
                            __encoder);
                    }
                }
            }
        }
    };Encodable, const _: () =
    {
        impl<__D: ::rustc_span::SpanDecoder> ::rustc_serialize::Decodable<__D>
            for WorkProductId {
            fn decode(__decoder: &mut __D) -> Self {
                WorkProductId {
                    hash: ::rustc_serialize::Decodable::decode(__decoder),
                }
            }
        }
    };Decodable, const _: () =
    {
        impl<'__ctx>
            ::rustc_data_structures::stable_hasher::HashStable<::rustc_middle::ich::StableHashingContext<'__ctx>>
            for WorkProductId {
            #[inline]
            fn hash_stable(&self,
                __hcx: &mut ::rustc_middle::ich::StableHashingContext<'__ctx>,
                __hasher:
                    &mut ::rustc_data_structures::stable_hasher::StableHasher) {
                match *self {
                    WorkProductId { hash: ref __binding_0 } => {
                        { __binding_0.hash_stable(__hcx, __hasher); }
                    }
                }
            }
        }
    };HashStable
238)]
239pub struct WorkProductId {
240    hash: Fingerprint,
241}
242
243impl WorkProductId {
244    pub fn from_cgu_name(cgu_name: &str) -> WorkProductId {
245        let mut hasher = StableHasher::new();
246        cgu_name.hash(&mut hasher);
247        WorkProductId { hash: hasher.finish() }
248    }
249}
250impl<HCX> ToStableHashKey<HCX> for WorkProductId {
251    type KeyType = Fingerprint;
252    #[inline]
253    fn to_stable_hash_key(&self, _: &HCX) -> Self::KeyType {
254        self.hash
255    }
256}
257impl StableOrd for WorkProductId {
258    // Fingerprint can use unstable (just a tuple of `u64`s), so WorkProductId can as well
259    const CAN_USE_UNSTABLE_SORT: bool = true;
260
261    // `WorkProductId` sort order is not affected by (de)serialization.
262    const THIS_IMPLEMENTATION_HAS_BEEN_TRIPLE_CHECKED: () = ();
263}
264
265// Note: `$K` and `$V` are unused but present so this can be called by `rustc_with_all_queries`.
266macro_rules! define_dep_nodes {
267    (
268        queries {
269            $(
270                $(#[$q_attr:meta])*
271                fn $q_name:ident($K:ty) -> $V:ty
272                // Search for (QMODLIST) to find all occurrences of this query modifier list.
273                // Query modifiers are currently not used here, so skip the whole list.
274                { $($modifiers:tt)* }
275            )*
276        }
277        non_queries {
278            $(
279                $(#[$nq_attr:meta])*
280                $nq_name:ident,
281            )*
282        }
283    ) => {
284        // This enum has more than u8::MAX variants so we need some kind of multi-byte
285        // encoding. The derived Encodable/Decodable uses leb128 encoding which is
286        // dense when only considering this enum. But DepKind is encoded in a larger
287        // struct, and there we can take advantage of the unused bits in the u16.
288        #[derive(Clone, Copy, Debug, PartialEq, Eq, Hash)]
289        #[allow(non_camel_case_types)]
290        #[repr(u16)] // Must be kept in sync with the rest of `DepKind`.
291        pub enum DepKind {
292            $( $(#[$nq_attr])* $nq_name, )*
293            $( $(#[$q_attr])* $q_name, )*
294        }
295
296        // This computes the number of dep kind variants. Along the way, it sanity-checks that the
297        // discriminants of the variants have been assigned consecutively from 0 so that they can
298        // be used as a dense index, and that all discriminants fit in a `u16`.
299        pub(crate) const DEP_KIND_NUM_VARIANTS: u16 = {
300            let deps = &[
301                $(DepKind::$nq_name,)*
302                $(DepKind::$q_name,)*
303            ];
304            let mut i = 0;
305            while i < deps.len() {
306                if i != deps[i].as_usize() {
307                    panic!();
308                }
309                i += 1;
310            }
311            assert!(deps.len() <= u16::MAX as usize);
312            deps.len() as u16
313        };
314
315        pub(super) fn dep_kind_from_label_string(label: &str) -> Result<DepKind, ()> {
316            match label {
317                $( stringify!($nq_name) => Ok(self::DepKind::$nq_name), )*
318                $( stringify!($q_name) => Ok(self::DepKind::$q_name), )*
319                _ => Err(()),
320            }
321        }
322
323        /// Contains variant => str representations for constructing
324        /// DepNode groups for tests.
325        #[expect(non_upper_case_globals)]
326        pub mod label_strs {
327            $( pub const $nq_name: &str = stringify!($nq_name); )*
328            $( pub const $q_name: &str = stringify!($q_name); )*
329        }
330    };
331}
332
333// Create various data structures for each query, and also for a few things that aren't queries.
334#[automatically_derived]
#[allow(non_camel_case_types)]
impl ::core::clone::Clone for DepKind {
    #[inline]
    fn clone(&self) -> DepKind { *self }
}
#[automatically_derived]
#[allow(non_camel_case_types)]
impl ::core::marker::Copy for DepKind { }
#[automatically_derived]
#[allow(non_camel_case_types)]
impl ::core::fmt::Debug for DepKind {
    #[inline]
    fn fmt(&self, f: &mut ::core::fmt::Formatter) -> ::core::fmt::Result {
        ::core::fmt::Formatter::write_str(f,
            match self {
                DepKind::Null => "Null",
                DepKind::Red => "Red",
                DepKind::SideEffect => "SideEffect",
                DepKind::AnonZeroDeps => "AnonZeroDeps",
                DepKind::TraitSelect => "TraitSelect",
                DepKind::CompileCodegenUnit => "CompileCodegenUnit",
                DepKind::CompileMonoItem => "CompileMonoItem",
                DepKind::Metadata => "Metadata",
                DepKind::derive_macro_expansion => "derive_macro_expansion",
                DepKind::trigger_delayed_bug => "trigger_delayed_bug",
                DepKind::registered_tools => "registered_tools",
                DepKind::early_lint_checks => "early_lint_checks",
                DepKind::env_var_os => "env_var_os",
                DepKind::resolutions => "resolutions",
                DepKind::resolver_for_lowering_raw =>
                    "resolver_for_lowering_raw",
                DepKind::source_span => "source_span",
                DepKind::hir_crate => "hir_crate",
                DepKind::hir_crate_items => "hir_crate_items",
                DepKind::hir_module_items => "hir_module_items",
                DepKind::local_def_id_to_hir_id => "local_def_id_to_hir_id",
                DepKind::hir_owner_parent_q => "hir_owner_parent_q",
                DepKind::opt_hir_owner_nodes => "opt_hir_owner_nodes",
                DepKind::hir_attr_map => "hir_attr_map",
                DepKind::opt_ast_lowering_delayed_lints =>
                    "opt_ast_lowering_delayed_lints",
                DepKind::const_param_default => "const_param_default",
                DepKind::const_of_item => "const_of_item",
                DepKind::type_of => "type_of",
                DepKind::type_of_opaque => "type_of_opaque",
                DepKind::type_of_opaque_hir_typeck =>
                    "type_of_opaque_hir_typeck",
                DepKind::type_alias_is_lazy => "type_alias_is_lazy",
                DepKind::collect_return_position_impl_trait_in_trait_tys =>
                    "collect_return_position_impl_trait_in_trait_tys",
                DepKind::opaque_ty_origin => "opaque_ty_origin",
                DepKind::unsizing_params_for_adt => "unsizing_params_for_adt",
                DepKind::analysis => "analysis",
                DepKind::check_expectations => "check_expectations",
                DepKind::generics_of => "generics_of",
                DepKind::predicates_of => "predicates_of",
                DepKind::opaque_types_defined_by => "opaque_types_defined_by",
                DepKind::nested_bodies_within => "nested_bodies_within",
                DepKind::explicit_item_bounds => "explicit_item_bounds",
                DepKind::explicit_item_self_bounds =>
                    "explicit_item_self_bounds",
                DepKind::item_bounds => "item_bounds",
                DepKind::item_self_bounds => "item_self_bounds",
                DepKind::item_non_self_bounds => "item_non_self_bounds",
                DepKind::impl_super_outlives => "impl_super_outlives",
                DepKind::native_libraries => "native_libraries",
                DepKind::shallow_lint_levels_on => "shallow_lint_levels_on",
                DepKind::lint_expectations => "lint_expectations",
                DepKind::lints_that_dont_need_to_run =>
                    "lints_that_dont_need_to_run",
                DepKind::expn_that_defined => "expn_that_defined",
                DepKind::is_panic_runtime => "is_panic_runtime",
                DepKind::check_representability => "check_representability",
                DepKind::check_representability_adt_ty =>
                    "check_representability_adt_ty",
                DepKind::params_in_repr => "params_in_repr",
                DepKind::thir_body => "thir_body",
                DepKind::mir_keys => "mir_keys",
                DepKind::mir_const_qualif => "mir_const_qualif",
                DepKind::mir_built => "mir_built",
                DepKind::thir_abstract_const => "thir_abstract_const",
                DepKind::mir_drops_elaborated_and_const_checked =>
                    "mir_drops_elaborated_and_const_checked",
                DepKind::mir_for_ctfe => "mir_for_ctfe",
                DepKind::mir_promoted => "mir_promoted",
                DepKind::closure_typeinfo => "closure_typeinfo",
                DepKind::closure_saved_names_of_captured_variables =>
                    "closure_saved_names_of_captured_variables",
                DepKind::mir_coroutine_witnesses => "mir_coroutine_witnesses",
                DepKind::check_coroutine_obligations =>
                    "check_coroutine_obligations",
                DepKind::check_potentially_region_dependent_goals =>
                    "check_potentially_region_dependent_goals",
                DepKind::optimized_mir => "optimized_mir",
                DepKind::coverage_attr_on => "coverage_attr_on",
                DepKind::coverage_ids_info => "coverage_ids_info",
                DepKind::promoted_mir => "promoted_mir",
                DepKind::erase_and_anonymize_regions_ty =>
                    "erase_and_anonymize_regions_ty",
                DepKind::wasm_import_module_map => "wasm_import_module_map",
                DepKind::trait_explicit_predicates_and_bounds =>
                    "trait_explicit_predicates_and_bounds",
                DepKind::explicit_predicates_of => "explicit_predicates_of",
                DepKind::inferred_outlives_of => "inferred_outlives_of",
                DepKind::explicit_super_predicates_of =>
                    "explicit_super_predicates_of",
                DepKind::explicit_implied_predicates_of =>
                    "explicit_implied_predicates_of",
                DepKind::explicit_supertraits_containing_assoc_item =>
                    "explicit_supertraits_containing_assoc_item",
                DepKind::const_conditions => "const_conditions",
                DepKind::explicit_implied_const_bounds =>
                    "explicit_implied_const_bounds",
                DepKind::type_param_predicates => "type_param_predicates",
                DepKind::trait_def => "trait_def",
                DepKind::adt_def => "adt_def",
                DepKind::adt_destructor => "adt_destructor",
                DepKind::adt_async_destructor => "adt_async_destructor",
                DepKind::adt_sizedness_constraint =>
                    "adt_sizedness_constraint",
                DepKind::adt_dtorck_constraint => "adt_dtorck_constraint",
                DepKind::constness => "constness",
                DepKind::asyncness => "asyncness",
                DepKind::is_promotable_const_fn => "is_promotable_const_fn",
                DepKind::coroutine_by_move_body_def_id =>
                    "coroutine_by_move_body_def_id",
                DepKind::coroutine_kind => "coroutine_kind",
                DepKind::coroutine_for_closure => "coroutine_for_closure",
                DepKind::coroutine_hidden_types => "coroutine_hidden_types",
                DepKind::crate_variances => "crate_variances",
                DepKind::variances_of => "variances_of",
                DepKind::inferred_outlives_crate => "inferred_outlives_crate",
                DepKind::associated_item_def_ids => "associated_item_def_ids",
                DepKind::associated_item => "associated_item",
                DepKind::associated_items => "associated_items",
                DepKind::impl_item_implementor_ids =>
                    "impl_item_implementor_ids",
                DepKind::associated_types_for_impl_traits_in_trait_or_impl =>
                    "associated_types_for_impl_traits_in_trait_or_impl",
                DepKind::impl_trait_header => "impl_trait_header",
                DepKind::impl_self_is_guaranteed_unsized =>
                    "impl_self_is_guaranteed_unsized",
                DepKind::inherent_impls => "inherent_impls",
                DepKind::incoherent_impls => "incoherent_impls",
                DepKind::check_transmutes => "check_transmutes",
                DepKind::check_unsafety => "check_unsafety",
                DepKind::check_tail_calls => "check_tail_calls",
                DepKind::assumed_wf_types => "assumed_wf_types",
                DepKind::assumed_wf_types_for_rpitit =>
                    "assumed_wf_types_for_rpitit",
                DepKind::fn_sig => "fn_sig",
                DepKind::lint_mod => "lint_mod",
                DepKind::check_unused_traits => "check_unused_traits",
                DepKind::check_mod_attrs => "check_mod_attrs",
                DepKind::check_mod_unstable_api_usage =>
                    "check_mod_unstable_api_usage",
                DepKind::check_mod_privacy => "check_mod_privacy",
                DepKind::check_liveness => "check_liveness",
                DepKind::live_symbols_and_ignored_derived_traits =>
                    "live_symbols_and_ignored_derived_traits",
                DepKind::check_mod_deathness => "check_mod_deathness",
                DepKind::check_type_wf => "check_type_wf",
                DepKind::coerce_unsized_info => "coerce_unsized_info",
                DepKind::typeck => "typeck",
                DepKind::used_trait_imports => "used_trait_imports",
                DepKind::coherent_trait => "coherent_trait",
                DepKind::mir_borrowck => "mir_borrowck",
                DepKind::crate_inherent_impls => "crate_inherent_impls",
                DepKind::crate_inherent_impls_validity_check =>
                    "crate_inherent_impls_validity_check",
                DepKind::crate_inherent_impls_overlap_check =>
                    "crate_inherent_impls_overlap_check",
                DepKind::orphan_check_impl => "orphan_check_impl",
                DepKind::mir_callgraph_cyclic => "mir_callgraph_cyclic",
                DepKind::mir_inliner_callees => "mir_inliner_callees",
                DepKind::tag_for_variant => "tag_for_variant",
                DepKind::eval_to_allocation_raw => "eval_to_allocation_raw",
                DepKind::eval_static_initializer => "eval_static_initializer",
                DepKind::eval_to_const_value_raw => "eval_to_const_value_raw",
                DepKind::eval_to_valtree => "eval_to_valtree",
                DepKind::valtree_to_const_val => "valtree_to_const_val",
                DepKind::lit_to_const => "lit_to_const",
                DepKind::check_match => "check_match",
                DepKind::effective_visibilities => "effective_visibilities",
                DepKind::check_private_in_public => "check_private_in_public",
                DepKind::reachable_set => "reachable_set",
                DepKind::region_scope_tree => "region_scope_tree",
                DepKind::mir_shims => "mir_shims",
                DepKind::symbol_name => "symbol_name",
                DepKind::def_kind => "def_kind",
                DepKind::def_span => "def_span",
                DepKind::def_ident_span => "def_ident_span",
                DepKind::ty_span => "ty_span",
                DepKind::lookup_stability => "lookup_stability",
                DepKind::lookup_const_stability => "lookup_const_stability",
                DepKind::lookup_default_body_stability =>
                    "lookup_default_body_stability",
                DepKind::should_inherit_track_caller =>
                    "should_inherit_track_caller",
                DepKind::inherited_align => "inherited_align",
                DepKind::lookup_deprecation_entry =>
                    "lookup_deprecation_entry",
                DepKind::is_doc_hidden => "is_doc_hidden",
                DepKind::is_doc_notable_trait => "is_doc_notable_trait",
                DepKind::attrs_for_def => "attrs_for_def",
                DepKind::codegen_fn_attrs => "codegen_fn_attrs",
                DepKind::asm_target_features => "asm_target_features",
                DepKind::fn_arg_idents => "fn_arg_idents",
                DepKind::rendered_const => "rendered_const",
                DepKind::rendered_precise_capturing_args =>
                    "rendered_precise_capturing_args",
                DepKind::impl_parent => "impl_parent",
                DepKind::is_mir_available => "is_mir_available",
                DepKind::own_existential_vtable_entries =>
                    "own_existential_vtable_entries",
                DepKind::vtable_entries => "vtable_entries",
                DepKind::first_method_vtable_slot =>
                    "first_method_vtable_slot",
                DepKind::supertrait_vtable_slot => "supertrait_vtable_slot",
                DepKind::vtable_allocation => "vtable_allocation",
                DepKind::codegen_select_candidate =>
                    "codegen_select_candidate",
                DepKind::all_local_trait_impls => "all_local_trait_impls",
                DepKind::local_trait_impls => "local_trait_impls",
                DepKind::trait_impls_of => "trait_impls_of",
                DepKind::specialization_graph_of => "specialization_graph_of",
                DepKind::dyn_compatibility_violations =>
                    "dyn_compatibility_violations",
                DepKind::is_dyn_compatible => "is_dyn_compatible",
                DepKind::param_env => "param_env",
                DepKind::typing_env_normalized_for_post_analysis =>
                    "typing_env_normalized_for_post_analysis",
                DepKind::is_copy_raw => "is_copy_raw",
                DepKind::is_use_cloned_raw => "is_use_cloned_raw",
                DepKind::is_sized_raw => "is_sized_raw",
                DepKind::is_freeze_raw => "is_freeze_raw",
                DepKind::is_unsafe_unpin_raw => "is_unsafe_unpin_raw",
                DepKind::is_unpin_raw => "is_unpin_raw",
                DepKind::is_async_drop_raw => "is_async_drop_raw",
                DepKind::needs_drop_raw => "needs_drop_raw",
                DepKind::needs_async_drop_raw => "needs_async_drop_raw",
                DepKind::has_significant_drop_raw =>
                    "has_significant_drop_raw",
                DepKind::has_structural_eq_impl => "has_structural_eq_impl",
                DepKind::adt_drop_tys => "adt_drop_tys",
                DepKind::adt_async_drop_tys => "adt_async_drop_tys",
                DepKind::adt_significant_drop_tys =>
                    "adt_significant_drop_tys",
                DepKind::list_significant_drop_tys =>
                    "list_significant_drop_tys",
                DepKind::layout_of => "layout_of",
                DepKind::fn_abi_of_fn_ptr => "fn_abi_of_fn_ptr",
                DepKind::fn_abi_of_instance_no_deduced_attrs =>
                    "fn_abi_of_instance_no_deduced_attrs",
                DepKind::fn_abi_of_instance_raw => "fn_abi_of_instance_raw",
                DepKind::dylib_dependency_formats =>
                    "dylib_dependency_formats",
                DepKind::dependency_formats => "dependency_formats",
                DepKind::is_compiler_builtins => "is_compiler_builtins",
                DepKind::has_global_allocator => "has_global_allocator",
                DepKind::has_alloc_error_handler => "has_alloc_error_handler",
                DepKind::has_panic_handler => "has_panic_handler",
                DepKind::is_profiler_runtime => "is_profiler_runtime",
                DepKind::has_ffi_unwind_calls => "has_ffi_unwind_calls",
                DepKind::required_panic_strategy => "required_panic_strategy",
                DepKind::panic_in_drop_strategy => "panic_in_drop_strategy",
                DepKind::is_no_builtins => "is_no_builtins",
                DepKind::symbol_mangling_version => "symbol_mangling_version",
                DepKind::extern_crate => "extern_crate",
                DepKind::specialization_enabled_in =>
                    "specialization_enabled_in",
                DepKind::specializes => "specializes",
                DepKind::in_scope_traits_map => "in_scope_traits_map",
                DepKind::defaultness => "defaultness",
                DepKind::default_field => "default_field",
                DepKind::check_well_formed => "check_well_formed",
                DepKind::enforce_impl_non_lifetime_params_are_constrained =>
                    "enforce_impl_non_lifetime_params_are_constrained",
                DepKind::reachable_non_generics => "reachable_non_generics",
                DepKind::is_reachable_non_generic =>
                    "is_reachable_non_generic",
                DepKind::is_unreachable_local_definition =>
                    "is_unreachable_local_definition",
                DepKind::upstream_monomorphizations =>
                    "upstream_monomorphizations",
                DepKind::upstream_monomorphizations_for =>
                    "upstream_monomorphizations_for",
                DepKind::upstream_drop_glue_for => "upstream_drop_glue_for",
                DepKind::upstream_async_drop_glue_for =>
                    "upstream_async_drop_glue_for",
                DepKind::foreign_modules => "foreign_modules",
                DepKind::clashing_extern_declarations =>
                    "clashing_extern_declarations",
                DepKind::entry_fn => "entry_fn",
                DepKind::proc_macro_decls_static => "proc_macro_decls_static",
                DepKind::crate_hash => "crate_hash",
                DepKind::crate_host_hash => "crate_host_hash",
                DepKind::extra_filename => "extra_filename",
                DepKind::crate_extern_paths => "crate_extern_paths",
                DepKind::implementations_of_trait =>
                    "implementations_of_trait",
                DepKind::crate_incoherent_impls => "crate_incoherent_impls",
                DepKind::native_library => "native_library",
                DepKind::inherit_sig_for_delegation_item =>
                    "inherit_sig_for_delegation_item",
                DepKind::resolve_bound_vars => "resolve_bound_vars",
                DepKind::named_variable_map => "named_variable_map",
                DepKind::is_late_bound_map => "is_late_bound_map",
                DepKind::object_lifetime_default => "object_lifetime_default",
                DepKind::late_bound_vars_map => "late_bound_vars_map",
                DepKind::opaque_captured_lifetimes =>
                    "opaque_captured_lifetimes",
                DepKind::visibility => "visibility",
                DepKind::inhabited_predicate_adt => "inhabited_predicate_adt",
                DepKind::inhabited_predicate_type =>
                    "inhabited_predicate_type",
                DepKind::crate_dep_kind => "crate_dep_kind",
                DepKind::crate_name => "crate_name",
                DepKind::module_children => "module_children",
                DepKind::num_extern_def_ids => "num_extern_def_ids",
                DepKind::lib_features => "lib_features",
                DepKind::stability_implications => "stability_implications",
                DepKind::intrinsic_raw => "intrinsic_raw",
                DepKind::get_lang_items => "get_lang_items",
                DepKind::all_diagnostic_items => "all_diagnostic_items",
                DepKind::defined_lang_items => "defined_lang_items",
                DepKind::diagnostic_items => "diagnostic_items",
                DepKind::missing_lang_items => "missing_lang_items",
                DepKind::visible_parent_map => "visible_parent_map",
                DepKind::trimmed_def_paths => "trimmed_def_paths",
                DepKind::missing_extern_crate_item =>
                    "missing_extern_crate_item",
                DepKind::used_crate_source => "used_crate_source",
                DepKind::debugger_visualizers => "debugger_visualizers",
                DepKind::postorder_cnums => "postorder_cnums",
                DepKind::is_private_dep => "is_private_dep",
                DepKind::allocator_kind => "allocator_kind",
                DepKind::alloc_error_handler_kind =>
                    "alloc_error_handler_kind",
                DepKind::upvars_mentioned => "upvars_mentioned",
                DepKind::crates => "crates",
                DepKind::used_crates => "used_crates",
                DepKind::duplicate_crate_names => "duplicate_crate_names",
                DepKind::traits => "traits",
                DepKind::trait_impls_in_crate => "trait_impls_in_crate",
                DepKind::stable_order_of_exportable_impls =>
                    "stable_order_of_exportable_impls",
                DepKind::exportable_items => "exportable_items",
                DepKind::exported_non_generic_symbols =>
                    "exported_non_generic_symbols",
                DepKind::exported_generic_symbols =>
                    "exported_generic_symbols",
                DepKind::collect_and_partition_mono_items =>
                    "collect_and_partition_mono_items",
                DepKind::is_codegened_item => "is_codegened_item",
                DepKind::codegen_unit => "codegen_unit",
                DepKind::backend_optimization_level =>
                    "backend_optimization_level",
                DepKind::output_filenames => "output_filenames",
                DepKind::normalize_canonicalized_projection =>
                    "normalize_canonicalized_projection",
                DepKind::normalize_canonicalized_free_alias =>
                    "normalize_canonicalized_free_alias",
                DepKind::normalize_canonicalized_inherent_projection =>
                    "normalize_canonicalized_inherent_projection",
                DepKind::try_normalize_generic_arg_after_erasing_regions =>
                    "try_normalize_generic_arg_after_erasing_regions",
                DepKind::implied_outlives_bounds => "implied_outlives_bounds",
                DepKind::dropck_outlives => "dropck_outlives",
                DepKind::evaluate_obligation => "evaluate_obligation",
                DepKind::type_op_ascribe_user_type =>
                    "type_op_ascribe_user_type",
                DepKind::type_op_prove_predicate => "type_op_prove_predicate",
                DepKind::type_op_normalize_ty => "type_op_normalize_ty",
                DepKind::type_op_normalize_clause =>
                    "type_op_normalize_clause",
                DepKind::type_op_normalize_poly_fn_sig =>
                    "type_op_normalize_poly_fn_sig",
                DepKind::type_op_normalize_fn_sig =>
                    "type_op_normalize_fn_sig",
                DepKind::instantiate_and_check_impossible_predicates =>
                    "instantiate_and_check_impossible_predicates",
                DepKind::is_impossible_associated_item =>
                    "is_impossible_associated_item",
                DepKind::method_autoderef_steps => "method_autoderef_steps",
                DepKind::evaluate_root_goal_for_proof_tree_raw =>
                    "evaluate_root_goal_for_proof_tree_raw",
                DepKind::rust_target_features => "rust_target_features",
                DepKind::implied_target_features => "implied_target_features",
                DepKind::features_query => "features_query",
                DepKind::crate_for_resolver => "crate_for_resolver",
                DepKind::resolve_instance_raw => "resolve_instance_raw",
                DepKind::reveal_opaque_types_in_bounds =>
                    "reveal_opaque_types_in_bounds",
                DepKind::limits => "limits",
                DepKind::diagnostic_hir_wf_check => "diagnostic_hir_wf_check",
                DepKind::global_backend_features => "global_backend_features",
                DepKind::check_validity_requirement =>
                    "check_validity_requirement",
                DepKind::compare_impl_item => "compare_impl_item",
                DepKind::deduced_param_attrs => "deduced_param_attrs",
                DepKind::doc_link_resolutions => "doc_link_resolutions",
                DepKind::doc_link_traits_in_scope =>
                    "doc_link_traits_in_scope",
                DepKind::stripped_cfg_items => "stripped_cfg_items",
                DepKind::generics_require_sized_self =>
                    "generics_require_sized_self",
                DepKind::cross_crate_inlinable => "cross_crate_inlinable",
                DepKind::check_mono_item => "check_mono_item",
                DepKind::skip_move_check_fns => "skip_move_check_fns",
                DepKind::items_of_instance => "items_of_instance",
                DepKind::size_estimate => "size_estimate",
                DepKind::anon_const_kind => "anon_const_kind",
                DepKind::trivial_const => "trivial_const",
                DepKind::sanitizer_settings_for => "sanitizer_settings_for",
                DepKind::check_externally_implementable_items =>
                    "check_externally_implementable_items",
                DepKind::externally_implementable_items =>
                    "externally_implementable_items",
            })
    }
}
#[automatically_derived]
#[allow(non_camel_case_types)]
impl ::core::marker::StructuralPartialEq for DepKind { }
#[automatically_derived]
#[allow(non_camel_case_types)]
impl ::core::cmp::PartialEq for DepKind {
    #[inline]
    fn eq(&self, other: &DepKind) -> bool {
        let __self_discr = ::core::intrinsics::discriminant_value(self);
        let __arg1_discr = ::core::intrinsics::discriminant_value(other);
        __self_discr == __arg1_discr
    }
}
#[automatically_derived]
#[allow(non_camel_case_types)]
impl ::core::cmp::Eq for DepKind {
    #[inline]
    #[doc(hidden)]
    #[coverage(off)]
    fn assert_fields_are_eq(&self) {}
}
#[automatically_derived]
#[allow(non_camel_case_types)]
impl ::core::hash::Hash for DepKind {
    #[inline]
    fn hash<__H: ::core::hash::Hasher>(&self, state: &mut __H) {
        let __self_discr = ::core::intrinsics::discriminant_value(self);
        ::core::hash::Hash::hash(&__self_discr, state)
    }
}
pub(crate) const DEP_KIND_NUM_VARIANTS: u16 =
    {
        let deps =
            &[DepKind::Null, DepKind::Red, DepKind::SideEffect,
                        DepKind::AnonZeroDeps, DepKind::TraitSelect,
                        DepKind::CompileCodegenUnit, DepKind::CompileMonoItem,
                        DepKind::Metadata, DepKind::derive_macro_expansion,
                        DepKind::trigger_delayed_bug, DepKind::registered_tools,
                        DepKind::early_lint_checks, DepKind::env_var_os,
                        DepKind::resolutions, DepKind::resolver_for_lowering_raw,
                        DepKind::source_span, DepKind::hir_crate,
                        DepKind::hir_crate_items, DepKind::hir_module_items,
                        DepKind::local_def_id_to_hir_id,
                        DepKind::hir_owner_parent_q, DepKind::opt_hir_owner_nodes,
                        DepKind::hir_attr_map,
                        DepKind::opt_ast_lowering_delayed_lints,
                        DepKind::const_param_default, DepKind::const_of_item,
                        DepKind::type_of, DepKind::type_of_opaque,
                        DepKind::type_of_opaque_hir_typeck,
                        DepKind::type_alias_is_lazy,
                        DepKind::collect_return_position_impl_trait_in_trait_tys,
                        DepKind::opaque_ty_origin, DepKind::unsizing_params_for_adt,
                        DepKind::analysis, DepKind::check_expectations,
                        DepKind::generics_of, DepKind::predicates_of,
                        DepKind::opaque_types_defined_by,
                        DepKind::nested_bodies_within,
                        DepKind::explicit_item_bounds,
                        DepKind::explicit_item_self_bounds, DepKind::item_bounds,
                        DepKind::item_self_bounds, DepKind::item_non_self_bounds,
                        DepKind::impl_super_outlives, DepKind::native_libraries,
                        DepKind::shallow_lint_levels_on, DepKind::lint_expectations,
                        DepKind::lints_that_dont_need_to_run,
                        DepKind::expn_that_defined, DepKind::is_panic_runtime,
                        DepKind::check_representability,
                        DepKind::check_representability_adt_ty,
                        DepKind::params_in_repr, DepKind::thir_body,
                        DepKind::mir_keys, DepKind::mir_const_qualif,
                        DepKind::mir_built, DepKind::thir_abstract_const,
                        DepKind::mir_drops_elaborated_and_const_checked,
                        DepKind::mir_for_ctfe, DepKind::mir_promoted,
                        DepKind::closure_typeinfo,
                        DepKind::closure_saved_names_of_captured_variables,
                        DepKind::mir_coroutine_witnesses,
                        DepKind::check_coroutine_obligations,
                        DepKind::check_potentially_region_dependent_goals,
                        DepKind::optimized_mir, DepKind::coverage_attr_on,
                        DepKind::coverage_ids_info, DepKind::promoted_mir,
                        DepKind::erase_and_anonymize_regions_ty,
                        DepKind::wasm_import_module_map,
                        DepKind::trait_explicit_predicates_and_bounds,
                        DepKind::explicit_predicates_of,
                        DepKind::inferred_outlives_of,
                        DepKind::explicit_super_predicates_of,
                        DepKind::explicit_implied_predicates_of,
                        DepKind::explicit_supertraits_containing_assoc_item,
                        DepKind::const_conditions,
                        DepKind::explicit_implied_const_bounds,
                        DepKind::type_param_predicates, DepKind::trait_def,
                        DepKind::adt_def, DepKind::adt_destructor,
                        DepKind::adt_async_destructor,
                        DepKind::adt_sizedness_constraint,
                        DepKind::adt_dtorck_constraint, DepKind::constness,
                        DepKind::asyncness, DepKind::is_promotable_const_fn,
                        DepKind::coroutine_by_move_body_def_id,
                        DepKind::coroutine_kind, DepKind::coroutine_for_closure,
                        DepKind::coroutine_hidden_types, DepKind::crate_variances,
                        DepKind::variances_of, DepKind::inferred_outlives_crate,
                        DepKind::associated_item_def_ids, DepKind::associated_item,
                        DepKind::associated_items,
                        DepKind::impl_item_implementor_ids,
                        DepKind::associated_types_for_impl_traits_in_trait_or_impl,
                        DepKind::impl_trait_header,
                        DepKind::impl_self_is_guaranteed_unsized,
                        DepKind::inherent_impls, DepKind::incoherent_impls,
                        DepKind::check_transmutes, DepKind::check_unsafety,
                        DepKind::check_tail_calls, DepKind::assumed_wf_types,
                        DepKind::assumed_wf_types_for_rpitit, DepKind::fn_sig,
                        DepKind::lint_mod, DepKind::check_unused_traits,
                        DepKind::check_mod_attrs,
                        DepKind::check_mod_unstable_api_usage,
                        DepKind::check_mod_privacy, DepKind::check_liveness,
                        DepKind::live_symbols_and_ignored_derived_traits,
                        DepKind::check_mod_deathness, DepKind::check_type_wf,
                        DepKind::coerce_unsized_info, DepKind::typeck,
                        DepKind::used_trait_imports, DepKind::coherent_trait,
                        DepKind::mir_borrowck, DepKind::crate_inherent_impls,
                        DepKind::crate_inherent_impls_validity_check,
                        DepKind::crate_inherent_impls_overlap_check,
                        DepKind::orphan_check_impl, DepKind::mir_callgraph_cyclic,
                        DepKind::mir_inliner_callees, DepKind::tag_for_variant,
                        DepKind::eval_to_allocation_raw,
                        DepKind::eval_static_initializer,
                        DepKind::eval_to_const_value_raw, DepKind::eval_to_valtree,
                        DepKind::valtree_to_const_val, DepKind::lit_to_const,
                        DepKind::check_match, DepKind::effective_visibilities,
                        DepKind::check_private_in_public, DepKind::reachable_set,
                        DepKind::region_scope_tree, DepKind::mir_shims,
                        DepKind::symbol_name, DepKind::def_kind, DepKind::def_span,
                        DepKind::def_ident_span, DepKind::ty_span,
                        DepKind::lookup_stability, DepKind::lookup_const_stability,
                        DepKind::lookup_default_body_stability,
                        DepKind::should_inherit_track_caller,
                        DepKind::inherited_align, DepKind::lookup_deprecation_entry,
                        DepKind::is_doc_hidden, DepKind::is_doc_notable_trait,
                        DepKind::attrs_for_def, DepKind::codegen_fn_attrs,
                        DepKind::asm_target_features, DepKind::fn_arg_idents,
                        DepKind::rendered_const,
                        DepKind::rendered_precise_capturing_args,
                        DepKind::impl_parent, DepKind::is_mir_available,
                        DepKind::own_existential_vtable_entries,
                        DepKind::vtable_entries, DepKind::first_method_vtable_slot,
                        DepKind::supertrait_vtable_slot, DepKind::vtable_allocation,
                        DepKind::codegen_select_candidate,
                        DepKind::all_local_trait_impls, DepKind::local_trait_impls,
                        DepKind::trait_impls_of, DepKind::specialization_graph_of,
                        DepKind::dyn_compatibility_violations,
                        DepKind::is_dyn_compatible, DepKind::param_env,
                        DepKind::typing_env_normalized_for_post_analysis,
                        DepKind::is_copy_raw, DepKind::is_use_cloned_raw,
                        DepKind::is_sized_raw, DepKind::is_freeze_raw,
                        DepKind::is_unsafe_unpin_raw, DepKind::is_unpin_raw,
                        DepKind::is_async_drop_raw, DepKind::needs_drop_raw,
                        DepKind::needs_async_drop_raw,
                        DepKind::has_significant_drop_raw,
                        DepKind::has_structural_eq_impl, DepKind::adt_drop_tys,
                        DepKind::adt_async_drop_tys,
                        DepKind::adt_significant_drop_tys,
                        DepKind::list_significant_drop_tys, DepKind::layout_of,
                        DepKind::fn_abi_of_fn_ptr,
                        DepKind::fn_abi_of_instance_no_deduced_attrs,
                        DepKind::fn_abi_of_instance_raw,
                        DepKind::dylib_dependency_formats,
                        DepKind::dependency_formats, DepKind::is_compiler_builtins,
                        DepKind::has_global_allocator,
                        DepKind::has_alloc_error_handler,
                        DepKind::has_panic_handler, DepKind::is_profiler_runtime,
                        DepKind::has_ffi_unwind_calls,
                        DepKind::required_panic_strategy,
                        DepKind::panic_in_drop_strategy, DepKind::is_no_builtins,
                        DepKind::symbol_mangling_version, DepKind::extern_crate,
                        DepKind::specialization_enabled_in, DepKind::specializes,
                        DepKind::in_scope_traits_map, DepKind::defaultness,
                        DepKind::default_field, DepKind::check_well_formed,
                        DepKind::enforce_impl_non_lifetime_params_are_constrained,
                        DepKind::reachable_non_generics,
                        DepKind::is_reachable_non_generic,
                        DepKind::is_unreachable_local_definition,
                        DepKind::upstream_monomorphizations,
                        DepKind::upstream_monomorphizations_for,
                        DepKind::upstream_drop_glue_for,
                        DepKind::upstream_async_drop_glue_for,
                        DepKind::foreign_modules,
                        DepKind::clashing_extern_declarations, DepKind::entry_fn,
                        DepKind::proc_macro_decls_static, DepKind::crate_hash,
                        DepKind::crate_host_hash, DepKind::extra_filename,
                        DepKind::crate_extern_paths,
                        DepKind::implementations_of_trait,
                        DepKind::crate_incoherent_impls, DepKind::native_library,
                        DepKind::inherit_sig_for_delegation_item,
                        DepKind::resolve_bound_vars, DepKind::named_variable_map,
                        DepKind::is_late_bound_map,
                        DepKind::object_lifetime_default,
                        DepKind::late_bound_vars_map,
                        DepKind::opaque_captured_lifetimes, DepKind::visibility,
                        DepKind::inhabited_predicate_adt,
                        DepKind::inhabited_predicate_type, DepKind::crate_dep_kind,
                        DepKind::crate_name, DepKind::module_children,
                        DepKind::num_extern_def_ids, DepKind::lib_features,
                        DepKind::stability_implications, DepKind::intrinsic_raw,
                        DepKind::get_lang_items, DepKind::all_diagnostic_items,
                        DepKind::defined_lang_items, DepKind::diagnostic_items,
                        DepKind::missing_lang_items, DepKind::visible_parent_map,
                        DepKind::trimmed_def_paths,
                        DepKind::missing_extern_crate_item,
                        DepKind::used_crate_source, DepKind::debugger_visualizers,
                        DepKind::postorder_cnums, DepKind::is_private_dep,
                        DepKind::allocator_kind, DepKind::alloc_error_handler_kind,
                        DepKind::upvars_mentioned, DepKind::crates,
                        DepKind::used_crates, DepKind::duplicate_crate_names,
                        DepKind::traits, DepKind::trait_impls_in_crate,
                        DepKind::stable_order_of_exportable_impls,
                        DepKind::exportable_items,
                        DepKind::exported_non_generic_symbols,
                        DepKind::exported_generic_symbols,
                        DepKind::collect_and_partition_mono_items,
                        DepKind::is_codegened_item, DepKind::codegen_unit,
                        DepKind::backend_optimization_level,
                        DepKind::output_filenames,
                        DepKind::normalize_canonicalized_projection,
                        DepKind::normalize_canonicalized_free_alias,
                        DepKind::normalize_canonicalized_inherent_projection,
                        DepKind::try_normalize_generic_arg_after_erasing_regions,
                        DepKind::implied_outlives_bounds, DepKind::dropck_outlives,
                        DepKind::evaluate_obligation,
                        DepKind::type_op_ascribe_user_type,
                        DepKind::type_op_prove_predicate,
                        DepKind::type_op_normalize_ty,
                        DepKind::type_op_normalize_clause,
                        DepKind::type_op_normalize_poly_fn_sig,
                        DepKind::type_op_normalize_fn_sig,
                        DepKind::instantiate_and_check_impossible_predicates,
                        DepKind::is_impossible_associated_item,
                        DepKind::method_autoderef_steps,
                        DepKind::evaluate_root_goal_for_proof_tree_raw,
                        DepKind::rust_target_features,
                        DepKind::implied_target_features, DepKind::features_query,
                        DepKind::crate_for_resolver, DepKind::resolve_instance_raw,
                        DepKind::reveal_opaque_types_in_bounds, DepKind::limits,
                        DepKind::diagnostic_hir_wf_check,
                        DepKind::global_backend_features,
                        DepKind::check_validity_requirement,
                        DepKind::compare_impl_item, DepKind::deduced_param_attrs,
                        DepKind::doc_link_resolutions,
                        DepKind::doc_link_traits_in_scope,
                        DepKind::stripped_cfg_items,
                        DepKind::generics_require_sized_self,
                        DepKind::cross_crate_inlinable, DepKind::check_mono_item,
                        DepKind::skip_move_check_fns, DepKind::items_of_instance,
                        DepKind::size_estimate, DepKind::anon_const_kind,
                        DepKind::trivial_const, DepKind::sanitizer_settings_for,
                        DepKind::check_externally_implementable_items,
                        DepKind::externally_implementable_items];
        let mut i = 0;
        while i < deps.len() {
            if i != deps[i].as_usize() {
                ::core::panicking::panic("explicit panic");
            }
            i += 1;
        }
        if !(deps.len() <= u16::MAX as usize) {
            ::core::panicking::panic("assertion failed: deps.len() <= u16::MAX as usize")
        };
        deps.len() as u16
    };
pub(super) fn dep_kind_from_label_string(label: &str) -> Result<DepKind, ()> {
    match label {
        "Null" => Ok(self::DepKind::Null),
        "Red" => Ok(self::DepKind::Red),
        "SideEffect" => Ok(self::DepKind::SideEffect),
        "AnonZeroDeps" => Ok(self::DepKind::AnonZeroDeps),
        "TraitSelect" => Ok(self::DepKind::TraitSelect),
        "CompileCodegenUnit" => Ok(self::DepKind::CompileCodegenUnit),
        "CompileMonoItem" => Ok(self::DepKind::CompileMonoItem),
        "Metadata" => Ok(self::DepKind::Metadata),
        "derive_macro_expansion" => Ok(self::DepKind::derive_macro_expansion),
        "trigger_delayed_bug" => Ok(self::DepKind::trigger_delayed_bug),
        "registered_tools" => Ok(self::DepKind::registered_tools),
        "early_lint_checks" => Ok(self::DepKind::early_lint_checks),
        "env_var_os" => Ok(self::DepKind::env_var_os),
        "resolutions" => Ok(self::DepKind::resolutions),
        "resolver_for_lowering_raw" =>
            Ok(self::DepKind::resolver_for_lowering_raw),
        "source_span" => Ok(self::DepKind::source_span),
        "hir_crate" => Ok(self::DepKind::hir_crate),
        "hir_crate_items" => Ok(self::DepKind::hir_crate_items),
        "hir_module_items" => Ok(self::DepKind::hir_module_items),
        "local_def_id_to_hir_id" => Ok(self::DepKind::local_def_id_to_hir_id),
        "hir_owner_parent_q" => Ok(self::DepKind::hir_owner_parent_q),
        "opt_hir_owner_nodes" => Ok(self::DepKind::opt_hir_owner_nodes),
        "hir_attr_map" => Ok(self::DepKind::hir_attr_map),
        "opt_ast_lowering_delayed_lints" =>
            Ok(self::DepKind::opt_ast_lowering_delayed_lints),
        "const_param_default" => Ok(self::DepKind::const_param_default),
        "const_of_item" => Ok(self::DepKind::const_of_item),
        "type_of" => Ok(self::DepKind::type_of),
        "type_of_opaque" => Ok(self::DepKind::type_of_opaque),
        "type_of_opaque_hir_typeck" =>
            Ok(self::DepKind::type_of_opaque_hir_typeck),
        "type_alias_is_lazy" => Ok(self::DepKind::type_alias_is_lazy),
        "collect_return_position_impl_trait_in_trait_tys" =>
            Ok(self::DepKind::collect_return_position_impl_trait_in_trait_tys),
        "opaque_ty_origin" => Ok(self::DepKind::opaque_ty_origin),
        "unsizing_params_for_adt" =>
            Ok(self::DepKind::unsizing_params_for_adt),
        "analysis" => Ok(self::DepKind::analysis),
        "check_expectations" => Ok(self::DepKind::check_expectations),
        "generics_of" => Ok(self::DepKind::generics_of),
        "predicates_of" => Ok(self::DepKind::predicates_of),
        "opaque_types_defined_by" =>
            Ok(self::DepKind::opaque_types_defined_by),
        "nested_bodies_within" => Ok(self::DepKind::nested_bodies_within),
        "explicit_item_bounds" => Ok(self::DepKind::explicit_item_bounds),
        "explicit_item_self_bounds" =>
            Ok(self::DepKind::explicit_item_self_bounds),
        "item_bounds" => Ok(self::DepKind::item_bounds),
        "item_self_bounds" => Ok(self::DepKind::item_self_bounds),
        "item_non_self_bounds" => Ok(self::DepKind::item_non_self_bounds),
        "impl_super_outlives" => Ok(self::DepKind::impl_super_outlives),
        "native_libraries" => Ok(self::DepKind::native_libraries),
        "shallow_lint_levels_on" => Ok(self::DepKind::shallow_lint_levels_on),
        "lint_expectations" => Ok(self::DepKind::lint_expectations),
        "lints_that_dont_need_to_run" =>
            Ok(self::DepKind::lints_that_dont_need_to_run),
        "expn_that_defined" => Ok(self::DepKind::expn_that_defined),
        "is_panic_runtime" => Ok(self::DepKind::is_panic_runtime),
        "check_representability" => Ok(self::DepKind::check_representability),
        "check_representability_adt_ty" =>
            Ok(self::DepKind::check_representability_adt_ty),
        "params_in_repr" => Ok(self::DepKind::params_in_repr),
        "thir_body" => Ok(self::DepKind::thir_body),
        "mir_keys" => Ok(self::DepKind::mir_keys),
        "mir_const_qualif" => Ok(self::DepKind::mir_const_qualif),
        "mir_built" => Ok(self::DepKind::mir_built),
        "thir_abstract_const" => Ok(self::DepKind::thir_abstract_const),
        "mir_drops_elaborated_and_const_checked" =>
            Ok(self::DepKind::mir_drops_elaborated_and_const_checked),
        "mir_for_ctfe" => Ok(self::DepKind::mir_for_ctfe),
        "mir_promoted" => Ok(self::DepKind::mir_promoted),
        "closure_typeinfo" => Ok(self::DepKind::closure_typeinfo),
        "closure_saved_names_of_captured_variables" =>
            Ok(self::DepKind::closure_saved_names_of_captured_variables),
        "mir_coroutine_witnesses" =>
            Ok(self::DepKind::mir_coroutine_witnesses),
        "check_coroutine_obligations" =>
            Ok(self::DepKind::check_coroutine_obligations),
        "check_potentially_region_dependent_goals" =>
            Ok(self::DepKind::check_potentially_region_dependent_goals),
        "optimized_mir" => Ok(self::DepKind::optimized_mir),
        "coverage_attr_on" => Ok(self::DepKind::coverage_attr_on),
        "coverage_ids_info" => Ok(self::DepKind::coverage_ids_info),
        "promoted_mir" => Ok(self::DepKind::promoted_mir),
        "erase_and_anonymize_regions_ty" =>
            Ok(self::DepKind::erase_and_anonymize_regions_ty),
        "wasm_import_module_map" => Ok(self::DepKind::wasm_import_module_map),
        "trait_explicit_predicates_and_bounds" =>
            Ok(self::DepKind::trait_explicit_predicates_and_bounds),
        "explicit_predicates_of" => Ok(self::DepKind::explicit_predicates_of),
        "inferred_outlives_of" => Ok(self::DepKind::inferred_outlives_of),
        "explicit_super_predicates_of" =>
            Ok(self::DepKind::explicit_super_predicates_of),
        "explicit_implied_predicates_of" =>
            Ok(self::DepKind::explicit_implied_predicates_of),
        "explicit_supertraits_containing_assoc_item" =>
            Ok(self::DepKind::explicit_supertraits_containing_assoc_item),
        "const_conditions" => Ok(self::DepKind::const_conditions),
        "explicit_implied_const_bounds" =>
            Ok(self::DepKind::explicit_implied_const_bounds),
        "type_param_predicates" => Ok(self::DepKind::type_param_predicates),
        "trait_def" => Ok(self::DepKind::trait_def),
        "adt_def" => Ok(self::DepKind::adt_def),
        "adt_destructor" => Ok(self::DepKind::adt_destructor),
        "adt_async_destructor" => Ok(self::DepKind::adt_async_destructor),
        "adt_sizedness_constraint" =>
            Ok(self::DepKind::adt_sizedness_constraint),
        "adt_dtorck_constraint" => Ok(self::DepKind::adt_dtorck_constraint),
        "constness" => Ok(self::DepKind::constness),
        "asyncness" => Ok(self::DepKind::asyncness),
        "is_promotable_const_fn" => Ok(self::DepKind::is_promotable_const_fn),
        "coroutine_by_move_body_def_id" =>
            Ok(self::DepKind::coroutine_by_move_body_def_id),
        "coroutine_kind" => Ok(self::DepKind::coroutine_kind),
        "coroutine_for_closure" => Ok(self::DepKind::coroutine_for_closure),
        "coroutine_hidden_types" => Ok(self::DepKind::coroutine_hidden_types),
        "crate_variances" => Ok(self::DepKind::crate_variances),
        "variances_of" => Ok(self::DepKind::variances_of),
        "inferred_outlives_crate" =>
            Ok(self::DepKind::inferred_outlives_crate),
        "associated_item_def_ids" =>
            Ok(self::DepKind::associated_item_def_ids),
        "associated_item" => Ok(self::DepKind::associated_item),
        "associated_items" => Ok(self::DepKind::associated_items),
        "impl_item_implementor_ids" =>
            Ok(self::DepKind::impl_item_implementor_ids),
        "associated_types_for_impl_traits_in_trait_or_impl" =>
            Ok(self::DepKind::associated_types_for_impl_traits_in_trait_or_impl),
        "impl_trait_header" => Ok(self::DepKind::impl_trait_header),
        "impl_self_is_guaranteed_unsized" =>
            Ok(self::DepKind::impl_self_is_guaranteed_unsized),
        "inherent_impls" => Ok(self::DepKind::inherent_impls),
        "incoherent_impls" => Ok(self::DepKind::incoherent_impls),
        "check_transmutes" => Ok(self::DepKind::check_transmutes),
        "check_unsafety" => Ok(self::DepKind::check_unsafety),
        "check_tail_calls" => Ok(self::DepKind::check_tail_calls),
        "assumed_wf_types" => Ok(self::DepKind::assumed_wf_types),
        "assumed_wf_types_for_rpitit" =>
            Ok(self::DepKind::assumed_wf_types_for_rpitit),
        "fn_sig" => Ok(self::DepKind::fn_sig),
        "lint_mod" => Ok(self::DepKind::lint_mod),
        "check_unused_traits" => Ok(self::DepKind::check_unused_traits),
        "check_mod_attrs" => Ok(self::DepKind::check_mod_attrs),
        "check_mod_unstable_api_usage" =>
            Ok(self::DepKind::check_mod_unstable_api_usage),
        "check_mod_privacy" => Ok(self::DepKind::check_mod_privacy),
        "check_liveness" => Ok(self::DepKind::check_liveness),
        "live_symbols_and_ignored_derived_traits" =>
            Ok(self::DepKind::live_symbols_and_ignored_derived_traits),
        "check_mod_deathness" => Ok(self::DepKind::check_mod_deathness),
        "check_type_wf" => Ok(self::DepKind::check_type_wf),
        "coerce_unsized_info" => Ok(self::DepKind::coerce_unsized_info),
        "typeck" => Ok(self::DepKind::typeck),
        "used_trait_imports" => Ok(self::DepKind::used_trait_imports),
        "coherent_trait" => Ok(self::DepKind::coherent_trait),
        "mir_borrowck" => Ok(self::DepKind::mir_borrowck),
        "crate_inherent_impls" => Ok(self::DepKind::crate_inherent_impls),
        "crate_inherent_impls_validity_check" =>
            Ok(self::DepKind::crate_inherent_impls_validity_check),
        "crate_inherent_impls_overlap_check" =>
            Ok(self::DepKind::crate_inherent_impls_overlap_check),
        "orphan_check_impl" => Ok(self::DepKind::orphan_check_impl),
        "mir_callgraph_cyclic" => Ok(self::DepKind::mir_callgraph_cyclic),
        "mir_inliner_callees" => Ok(self::DepKind::mir_inliner_callees),
        "tag_for_variant" => Ok(self::DepKind::tag_for_variant),
        "eval_to_allocation_raw" => Ok(self::DepKind::eval_to_allocation_raw),
        "eval_static_initializer" =>
            Ok(self::DepKind::eval_static_initializer),
        "eval_to_const_value_raw" =>
            Ok(self::DepKind::eval_to_const_value_raw),
        "eval_to_valtree" => Ok(self::DepKind::eval_to_valtree),
        "valtree_to_const_val" => Ok(self::DepKind::valtree_to_const_val),
        "lit_to_const" => Ok(self::DepKind::lit_to_const),
        "check_match" => Ok(self::DepKind::check_match),
        "effective_visibilities" => Ok(self::DepKind::effective_visibilities),
        "check_private_in_public" =>
            Ok(self::DepKind::check_private_in_public),
        "reachable_set" => Ok(self::DepKind::reachable_set),
        "region_scope_tree" => Ok(self::DepKind::region_scope_tree),
        "mir_shims" => Ok(self::DepKind::mir_shims),
        "symbol_name" => Ok(self::DepKind::symbol_name),
        "def_kind" => Ok(self::DepKind::def_kind),
        "def_span" => Ok(self::DepKind::def_span),
        "def_ident_span" => Ok(self::DepKind::def_ident_span),
        "ty_span" => Ok(self::DepKind::ty_span),
        "lookup_stability" => Ok(self::DepKind::lookup_stability),
        "lookup_const_stability" => Ok(self::DepKind::lookup_const_stability),
        "lookup_default_body_stability" =>
            Ok(self::DepKind::lookup_default_body_stability),
        "should_inherit_track_caller" =>
            Ok(self::DepKind::should_inherit_track_caller),
        "inherited_align" => Ok(self::DepKind::inherited_align),
        "lookup_deprecation_entry" =>
            Ok(self::DepKind::lookup_deprecation_entry),
        "is_doc_hidden" => Ok(self::DepKind::is_doc_hidden),
        "is_doc_notable_trait" => Ok(self::DepKind::is_doc_notable_trait),
        "attrs_for_def" => Ok(self::DepKind::attrs_for_def),
        "codegen_fn_attrs" => Ok(self::DepKind::codegen_fn_attrs),
        "asm_target_features" => Ok(self::DepKind::asm_target_features),
        "fn_arg_idents" => Ok(self::DepKind::fn_arg_idents),
        "rendered_const" => Ok(self::DepKind::rendered_const),
        "rendered_precise_capturing_args" =>
            Ok(self::DepKind::rendered_precise_capturing_args),
        "impl_parent" => Ok(self::DepKind::impl_parent),
        "is_mir_available" => Ok(self::DepKind::is_mir_available),
        "own_existential_vtable_entries" =>
            Ok(self::DepKind::own_existential_vtable_entries),
        "vtable_entries" => Ok(self::DepKind::vtable_entries),
        "first_method_vtable_slot" =>
            Ok(self::DepKind::first_method_vtable_slot),
        "supertrait_vtable_slot" => Ok(self::DepKind::supertrait_vtable_slot),
        "vtable_allocation" => Ok(self::DepKind::vtable_allocation),
        "codegen_select_candidate" =>
            Ok(self::DepKind::codegen_select_candidate),
        "all_local_trait_impls" => Ok(self::DepKind::all_local_trait_impls),
        "local_trait_impls" => Ok(self::DepKind::local_trait_impls),
        "trait_impls_of" => Ok(self::DepKind::trait_impls_of),
        "specialization_graph_of" =>
            Ok(self::DepKind::specialization_graph_of),
        "dyn_compatibility_violations" =>
            Ok(self::DepKind::dyn_compatibility_violations),
        "is_dyn_compatible" => Ok(self::DepKind::is_dyn_compatible),
        "param_env" => Ok(self::DepKind::param_env),
        "typing_env_normalized_for_post_analysis" =>
            Ok(self::DepKind::typing_env_normalized_for_post_analysis),
        "is_copy_raw" => Ok(self::DepKind::is_copy_raw),
        "is_use_cloned_raw" => Ok(self::DepKind::is_use_cloned_raw),
        "is_sized_raw" => Ok(self::DepKind::is_sized_raw),
        "is_freeze_raw" => Ok(self::DepKind::is_freeze_raw),
        "is_unsafe_unpin_raw" => Ok(self::DepKind::is_unsafe_unpin_raw),
        "is_unpin_raw" => Ok(self::DepKind::is_unpin_raw),
        "is_async_drop_raw" => Ok(self::DepKind::is_async_drop_raw),
        "needs_drop_raw" => Ok(self::DepKind::needs_drop_raw),
        "needs_async_drop_raw" => Ok(self::DepKind::needs_async_drop_raw),
        "has_significant_drop_raw" =>
            Ok(self::DepKind::has_significant_drop_raw),
        "has_structural_eq_impl" => Ok(self::DepKind::has_structural_eq_impl),
        "adt_drop_tys" => Ok(self::DepKind::adt_drop_tys),
        "adt_async_drop_tys" => Ok(self::DepKind::adt_async_drop_tys),
        "adt_significant_drop_tys" =>
            Ok(self::DepKind::adt_significant_drop_tys),
        "list_significant_drop_tys" =>
            Ok(self::DepKind::list_significant_drop_tys),
        "layout_of" => Ok(self::DepKind::layout_of),
        "fn_abi_of_fn_ptr" => Ok(self::DepKind::fn_abi_of_fn_ptr),
        "fn_abi_of_instance_no_deduced_attrs" =>
            Ok(self::DepKind::fn_abi_of_instance_no_deduced_attrs),
        "fn_abi_of_instance_raw" => Ok(self::DepKind::fn_abi_of_instance_raw),
        "dylib_dependency_formats" =>
            Ok(self::DepKind::dylib_dependency_formats),
        "dependency_formats" => Ok(self::DepKind::dependency_formats),
        "is_compiler_builtins" => Ok(self::DepKind::is_compiler_builtins),
        "has_global_allocator" => Ok(self::DepKind::has_global_allocator),
        "has_alloc_error_handler" =>
            Ok(self::DepKind::has_alloc_error_handler),
        "has_panic_handler" => Ok(self::DepKind::has_panic_handler),
        "is_profiler_runtime" => Ok(self::DepKind::is_profiler_runtime),
        "has_ffi_unwind_calls" => Ok(self::DepKind::has_ffi_unwind_calls),
        "required_panic_strategy" =>
            Ok(self::DepKind::required_panic_strategy),
        "panic_in_drop_strategy" => Ok(self::DepKind::panic_in_drop_strategy),
        "is_no_builtins" => Ok(self::DepKind::is_no_builtins),
        "symbol_mangling_version" =>
            Ok(self::DepKind::symbol_mangling_version),
        "extern_crate" => Ok(self::DepKind::extern_crate),
        "specialization_enabled_in" =>
            Ok(self::DepKind::specialization_enabled_in),
        "specializes" => Ok(self::DepKind::specializes),
        "in_scope_traits_map" => Ok(self::DepKind::in_scope_traits_map),
        "defaultness" => Ok(self::DepKind::defaultness),
        "default_field" => Ok(self::DepKind::default_field),
        "check_well_formed" => Ok(self::DepKind::check_well_formed),
        "enforce_impl_non_lifetime_params_are_constrained" =>
            Ok(self::DepKind::enforce_impl_non_lifetime_params_are_constrained),
        "reachable_non_generics" => Ok(self::DepKind::reachable_non_generics),
        "is_reachable_non_generic" =>
            Ok(self::DepKind::is_reachable_non_generic),
        "is_unreachable_local_definition" =>
            Ok(self::DepKind::is_unreachable_local_definition),
        "upstream_monomorphizations" =>
            Ok(self::DepKind::upstream_monomorphizations),
        "upstream_monomorphizations_for" =>
            Ok(self::DepKind::upstream_monomorphizations_for),
        "upstream_drop_glue_for" => Ok(self::DepKind::upstream_drop_glue_for),
        "upstream_async_drop_glue_for" =>
            Ok(self::DepKind::upstream_async_drop_glue_for),
        "foreign_modules" => Ok(self::DepKind::foreign_modules),
        "clashing_extern_declarations" =>
            Ok(self::DepKind::clashing_extern_declarations),
        "entry_fn" => Ok(self::DepKind::entry_fn),
        "proc_macro_decls_static" =>
            Ok(self::DepKind::proc_macro_decls_static),
        "crate_hash" => Ok(self::DepKind::crate_hash),
        "crate_host_hash" => Ok(self::DepKind::crate_host_hash),
        "extra_filename" => Ok(self::DepKind::extra_filename),
        "crate_extern_paths" => Ok(self::DepKind::crate_extern_paths),
        "implementations_of_trait" =>
            Ok(self::DepKind::implementations_of_trait),
        "crate_incoherent_impls" => Ok(self::DepKind::crate_incoherent_impls),
        "native_library" => Ok(self::DepKind::native_library),
        "inherit_sig_for_delegation_item" =>
            Ok(self::DepKind::inherit_sig_for_delegation_item),
        "resolve_bound_vars" => Ok(self::DepKind::resolve_bound_vars),
        "named_variable_map" => Ok(self::DepKind::named_variable_map),
        "is_late_bound_map" => Ok(self::DepKind::is_late_bound_map),
        "object_lifetime_default" =>
            Ok(self::DepKind::object_lifetime_default),
        "late_bound_vars_map" => Ok(self::DepKind::late_bound_vars_map),
        "opaque_captured_lifetimes" =>
            Ok(self::DepKind::opaque_captured_lifetimes),
        "visibility" => Ok(self::DepKind::visibility),
        "inhabited_predicate_adt" =>
            Ok(self::DepKind::inhabited_predicate_adt),
        "inhabited_predicate_type" =>
            Ok(self::DepKind::inhabited_predicate_type),
        "crate_dep_kind" => Ok(self::DepKind::crate_dep_kind),
        "crate_name" => Ok(self::DepKind::crate_name),
        "module_children" => Ok(self::DepKind::module_children),
        "num_extern_def_ids" => Ok(self::DepKind::num_extern_def_ids),
        "lib_features" => Ok(self::DepKind::lib_features),
        "stability_implications" => Ok(self::DepKind::stability_implications),
        "intrinsic_raw" => Ok(self::DepKind::intrinsic_raw),
        "get_lang_items" => Ok(self::DepKind::get_lang_items),
        "all_diagnostic_items" => Ok(self::DepKind::all_diagnostic_items),
        "defined_lang_items" => Ok(self::DepKind::defined_lang_items),
        "diagnostic_items" => Ok(self::DepKind::diagnostic_items),
        "missing_lang_items" => Ok(self::DepKind::missing_lang_items),
        "visible_parent_map" => Ok(self::DepKind::visible_parent_map),
        "trimmed_def_paths" => Ok(self::DepKind::trimmed_def_paths),
        "missing_extern_crate_item" =>
            Ok(self::DepKind::missing_extern_crate_item),
        "used_crate_source" => Ok(self::DepKind::used_crate_source),
        "debugger_visualizers" => Ok(self::DepKind::debugger_visualizers),
        "postorder_cnums" => Ok(self::DepKind::postorder_cnums),
        "is_private_dep" => Ok(self::DepKind::is_private_dep),
        "allocator_kind" => Ok(self::DepKind::allocator_kind),
        "alloc_error_handler_kind" =>
            Ok(self::DepKind::alloc_error_handler_kind),
        "upvars_mentioned" => Ok(self::DepKind::upvars_mentioned),
        "crates" => Ok(self::DepKind::crates),
        "used_crates" => Ok(self::DepKind::used_crates),
        "duplicate_crate_names" => Ok(self::DepKind::duplicate_crate_names),
        "traits" => Ok(self::DepKind::traits),
        "trait_impls_in_crate" => Ok(self::DepKind::trait_impls_in_crate),
        "stable_order_of_exportable_impls" =>
            Ok(self::DepKind::stable_order_of_exportable_impls),
        "exportable_items" => Ok(self::DepKind::exportable_items),
        "exported_non_generic_symbols" =>
            Ok(self::DepKind::exported_non_generic_symbols),
        "exported_generic_symbols" =>
            Ok(self::DepKind::exported_generic_symbols),
        "collect_and_partition_mono_items" =>
            Ok(self::DepKind::collect_and_partition_mono_items),
        "is_codegened_item" => Ok(self::DepKind::is_codegened_item),
        "codegen_unit" => Ok(self::DepKind::codegen_unit),
        "backend_optimization_level" =>
            Ok(self::DepKind::backend_optimization_level),
        "output_filenames" => Ok(self::DepKind::output_filenames),
        "normalize_canonicalized_projection" =>
            Ok(self::DepKind::normalize_canonicalized_projection),
        "normalize_canonicalized_free_alias" =>
            Ok(self::DepKind::normalize_canonicalized_free_alias),
        "normalize_canonicalized_inherent_projection" =>
            Ok(self::DepKind::normalize_canonicalized_inherent_projection),
        "try_normalize_generic_arg_after_erasing_regions" =>
            Ok(self::DepKind::try_normalize_generic_arg_after_erasing_regions),
        "implied_outlives_bounds" =>
            Ok(self::DepKind::implied_outlives_bounds),
        "dropck_outlives" => Ok(self::DepKind::dropck_outlives),
        "evaluate_obligation" => Ok(self::DepKind::evaluate_obligation),
        "type_op_ascribe_user_type" =>
            Ok(self::DepKind::type_op_ascribe_user_type),
        "type_op_prove_predicate" =>
            Ok(self::DepKind::type_op_prove_predicate),
        "type_op_normalize_ty" => Ok(self::DepKind::type_op_normalize_ty),
        "type_op_normalize_clause" =>
            Ok(self::DepKind::type_op_normalize_clause),
        "type_op_normalize_poly_fn_sig" =>
            Ok(self::DepKind::type_op_normalize_poly_fn_sig),
        "type_op_normalize_fn_sig" =>
            Ok(self::DepKind::type_op_normalize_fn_sig),
        "instantiate_and_check_impossible_predicates" =>
            Ok(self::DepKind::instantiate_and_check_impossible_predicates),
        "is_impossible_associated_item" =>
            Ok(self::DepKind::is_impossible_associated_item),
        "method_autoderef_steps" => Ok(self::DepKind::method_autoderef_steps),
        "evaluate_root_goal_for_proof_tree_raw" =>
            Ok(self::DepKind::evaluate_root_goal_for_proof_tree_raw),
        "rust_target_features" => Ok(self::DepKind::rust_target_features),
        "implied_target_features" =>
            Ok(self::DepKind::implied_target_features),
        "features_query" => Ok(self::DepKind::features_query),
        "crate_for_resolver" => Ok(self::DepKind::crate_for_resolver),
        "resolve_instance_raw" => Ok(self::DepKind::resolve_instance_raw),
        "reveal_opaque_types_in_bounds" =>
            Ok(self::DepKind::reveal_opaque_types_in_bounds),
        "limits" => Ok(self::DepKind::limits),
        "diagnostic_hir_wf_check" =>
            Ok(self::DepKind::diagnostic_hir_wf_check),
        "global_backend_features" =>
            Ok(self::DepKind::global_backend_features),
        "check_validity_requirement" =>
            Ok(self::DepKind::check_validity_requirement),
        "compare_impl_item" => Ok(self::DepKind::compare_impl_item),
        "deduced_param_attrs" => Ok(self::DepKind::deduced_param_attrs),
        "doc_link_resolutions" => Ok(self::DepKind::doc_link_resolutions),
        "doc_link_traits_in_scope" =>
            Ok(self::DepKind::doc_link_traits_in_scope),
        "stripped_cfg_items" => Ok(self::DepKind::stripped_cfg_items),
        "generics_require_sized_self" =>
            Ok(self::DepKind::generics_require_sized_self),
        "cross_crate_inlinable" => Ok(self::DepKind::cross_crate_inlinable),
        "check_mono_item" => Ok(self::DepKind::check_mono_item),
        "skip_move_check_fns" => Ok(self::DepKind::skip_move_check_fns),
        "items_of_instance" => Ok(self::DepKind::items_of_instance),
        "size_estimate" => Ok(self::DepKind::size_estimate),
        "anon_const_kind" => Ok(self::DepKind::anon_const_kind),
        "trivial_const" => Ok(self::DepKind::trivial_const),
        "sanitizer_settings_for" => Ok(self::DepKind::sanitizer_settings_for),
        "check_externally_implementable_items" =>
            Ok(self::DepKind::check_externally_implementable_items),
        "externally_implementable_items" =>
            Ok(self::DepKind::externally_implementable_items),
        _ => Err(()),
    }
}
/// Contains variant => str representations for constructing
/// DepNode groups for tests.
#[expect(non_upper_case_globals)]
pub mod label_strs {
    pub const Null: &str = "Null";
    pub const Red: &str = "Red";
    pub const SideEffect: &str = "SideEffect";
    pub const AnonZeroDeps: &str = "AnonZeroDeps";
    pub const TraitSelect: &str = "TraitSelect";
    pub const CompileCodegenUnit: &str = "CompileCodegenUnit";
    pub const CompileMonoItem: &str = "CompileMonoItem";
    pub const Metadata: &str = "Metadata";
    pub const derive_macro_expansion: &str = "derive_macro_expansion";
    pub const trigger_delayed_bug: &str = "trigger_delayed_bug";
    pub const registered_tools: &str = "registered_tools";
    pub const early_lint_checks: &str = "early_lint_checks";
    pub const env_var_os: &str = "env_var_os";
    pub const resolutions: &str = "resolutions";
    pub const resolver_for_lowering_raw: &str = "resolver_for_lowering_raw";
    pub const source_span: &str = "source_span";
    pub const hir_crate: &str = "hir_crate";
    pub const hir_crate_items: &str = "hir_crate_items";
    pub const hir_module_items: &str = "hir_module_items";
    pub const local_def_id_to_hir_id: &str = "local_def_id_to_hir_id";
    pub const hir_owner_parent_q: &str = "hir_owner_parent_q";
    pub const opt_hir_owner_nodes: &str = "opt_hir_owner_nodes";
    pub const hir_attr_map: &str = "hir_attr_map";
    pub const opt_ast_lowering_delayed_lints: &str =
        "opt_ast_lowering_delayed_lints";
    pub const const_param_default: &str = "const_param_default";
    pub const const_of_item: &str = "const_of_item";
    pub const type_of: &str = "type_of";
    pub const type_of_opaque: &str = "type_of_opaque";
    pub const type_of_opaque_hir_typeck: &str = "type_of_opaque_hir_typeck";
    pub const type_alias_is_lazy: &str = "type_alias_is_lazy";
    pub const collect_return_position_impl_trait_in_trait_tys: &str =
        "collect_return_position_impl_trait_in_trait_tys";
    pub const opaque_ty_origin: &str = "opaque_ty_origin";
    pub const unsizing_params_for_adt: &str = "unsizing_params_for_adt";
    pub const analysis: &str = "analysis";
    pub const check_expectations: &str = "check_expectations";
    pub const generics_of: &str = "generics_of";
    pub const predicates_of: &str = "predicates_of";
    pub const opaque_types_defined_by: &str = "opaque_types_defined_by";
    pub const nested_bodies_within: &str = "nested_bodies_within";
    pub const explicit_item_bounds: &str = "explicit_item_bounds";
    pub const explicit_item_self_bounds: &str = "explicit_item_self_bounds";
    pub const item_bounds: &str = "item_bounds";
    pub const item_self_bounds: &str = "item_self_bounds";
    pub const item_non_self_bounds: &str = "item_non_self_bounds";
    pub const impl_super_outlives: &str = "impl_super_outlives";
    pub const native_libraries: &str = "native_libraries";
    pub const shallow_lint_levels_on: &str = "shallow_lint_levels_on";
    pub const lint_expectations: &str = "lint_expectations";
    pub const lints_that_dont_need_to_run: &str =
        "lints_that_dont_need_to_run";
    pub const expn_that_defined: &str = "expn_that_defined";
    pub const is_panic_runtime: &str = "is_panic_runtime";
    pub const check_representability: &str = "check_representability";
    pub const check_representability_adt_ty: &str =
        "check_representability_adt_ty";
    pub const params_in_repr: &str = "params_in_repr";
    pub const thir_body: &str = "thir_body";
    pub const mir_keys: &str = "mir_keys";
    pub const mir_const_qualif: &str = "mir_const_qualif";
    pub const mir_built: &str = "mir_built";
    pub const thir_abstract_const: &str = "thir_abstract_const";
    pub const mir_drops_elaborated_and_const_checked: &str =
        "mir_drops_elaborated_and_const_checked";
    pub const mir_for_ctfe: &str = "mir_for_ctfe";
    pub const mir_promoted: &str = "mir_promoted";
    pub const closure_typeinfo: &str = "closure_typeinfo";
    pub const closure_saved_names_of_captured_variables: &str =
        "closure_saved_names_of_captured_variables";
    pub const mir_coroutine_witnesses: &str = "mir_coroutine_witnesses";
    pub const check_coroutine_obligations: &str =
        "check_coroutine_obligations";
    pub const check_potentially_region_dependent_goals: &str =
        "check_potentially_region_dependent_goals";
    pub const optimized_mir: &str = "optimized_mir";
    pub const coverage_attr_on: &str = "coverage_attr_on";
    pub const coverage_ids_info: &str = "coverage_ids_info";
    pub const promoted_mir: &str = "promoted_mir";
    pub const erase_and_anonymize_regions_ty: &str =
        "erase_and_anonymize_regions_ty";
    pub const wasm_import_module_map: &str = "wasm_import_module_map";
    pub const trait_explicit_predicates_and_bounds: &str =
        "trait_explicit_predicates_and_bounds";
    pub const explicit_predicates_of: &str = "explicit_predicates_of";
    pub const inferred_outlives_of: &str = "inferred_outlives_of";
    pub const explicit_super_predicates_of: &str =
        "explicit_super_predicates_of";
    pub const explicit_implied_predicates_of: &str =
        "explicit_implied_predicates_of";
    pub const explicit_supertraits_containing_assoc_item: &str =
        "explicit_supertraits_containing_assoc_item";
    pub const const_conditions: &str = "const_conditions";
    pub const explicit_implied_const_bounds: &str =
        "explicit_implied_const_bounds";
    pub const type_param_predicates: &str = "type_param_predicates";
    pub const trait_def: &str = "trait_def";
    pub const adt_def: &str = "adt_def";
    pub const adt_destructor: &str = "adt_destructor";
    pub const adt_async_destructor: &str = "adt_async_destructor";
    pub const adt_sizedness_constraint: &str = "adt_sizedness_constraint";
    pub const adt_dtorck_constraint: &str = "adt_dtorck_constraint";
    pub const constness: &str = "constness";
    pub const asyncness: &str = "asyncness";
    pub const is_promotable_const_fn: &str = "is_promotable_const_fn";
    pub const coroutine_by_move_body_def_id: &str =
        "coroutine_by_move_body_def_id";
    pub const coroutine_kind: &str = "coroutine_kind";
    pub const coroutine_for_closure: &str = "coroutine_for_closure";
    pub const coroutine_hidden_types: &str = "coroutine_hidden_types";
    pub const crate_variances: &str = "crate_variances";
    pub const variances_of: &str = "variances_of";
    pub const inferred_outlives_crate: &str = "inferred_outlives_crate";
    pub const associated_item_def_ids: &str = "associated_item_def_ids";
    pub const associated_item: &str = "associated_item";
    pub const associated_items: &str = "associated_items";
    pub const impl_item_implementor_ids: &str = "impl_item_implementor_ids";
    pub const associated_types_for_impl_traits_in_trait_or_impl: &str =
        "associated_types_for_impl_traits_in_trait_or_impl";
    pub const impl_trait_header: &str = "impl_trait_header";
    pub const impl_self_is_guaranteed_unsized: &str =
        "impl_self_is_guaranteed_unsized";
    pub const inherent_impls: &str = "inherent_impls";
    pub const incoherent_impls: &str = "incoherent_impls";
    pub const check_transmutes: &str = "check_transmutes";
    pub const check_unsafety: &str = "check_unsafety";
    pub const check_tail_calls: &str = "check_tail_calls";
    pub const assumed_wf_types: &str = "assumed_wf_types";
    pub const assumed_wf_types_for_rpitit: &str =
        "assumed_wf_types_for_rpitit";
    pub const fn_sig: &str = "fn_sig";
    pub const lint_mod: &str = "lint_mod";
    pub const check_unused_traits: &str = "check_unused_traits";
    pub const check_mod_attrs: &str = "check_mod_attrs";
    pub const check_mod_unstable_api_usage: &str =
        "check_mod_unstable_api_usage";
    pub const check_mod_privacy: &str = "check_mod_privacy";
    pub const check_liveness: &str = "check_liveness";
    pub const live_symbols_and_ignored_derived_traits: &str =
        "live_symbols_and_ignored_derived_traits";
    pub const check_mod_deathness: &str = "check_mod_deathness";
    pub const check_type_wf: &str = "check_type_wf";
    pub const coerce_unsized_info: &str = "coerce_unsized_info";
    pub const typeck: &str = "typeck";
    pub const used_trait_imports: &str = "used_trait_imports";
    pub const coherent_trait: &str = "coherent_trait";
    pub const mir_borrowck: &str = "mir_borrowck";
    pub const crate_inherent_impls: &str = "crate_inherent_impls";
    pub const crate_inherent_impls_validity_check: &str =
        "crate_inherent_impls_validity_check";
    pub const crate_inherent_impls_overlap_check: &str =
        "crate_inherent_impls_overlap_check";
    pub const orphan_check_impl: &str = "orphan_check_impl";
    pub const mir_callgraph_cyclic: &str = "mir_callgraph_cyclic";
    pub const mir_inliner_callees: &str = "mir_inliner_callees";
    pub const tag_for_variant: &str = "tag_for_variant";
    pub const eval_to_allocation_raw: &str = "eval_to_allocation_raw";
    pub const eval_static_initializer: &str = "eval_static_initializer";
    pub const eval_to_const_value_raw: &str = "eval_to_const_value_raw";
    pub const eval_to_valtree: &str = "eval_to_valtree";
    pub const valtree_to_const_val: &str = "valtree_to_const_val";
    pub const lit_to_const: &str = "lit_to_const";
    pub const check_match: &str = "check_match";
    pub const effective_visibilities: &str = "effective_visibilities";
    pub const check_private_in_public: &str = "check_private_in_public";
    pub const reachable_set: &str = "reachable_set";
    pub const region_scope_tree: &str = "region_scope_tree";
    pub const mir_shims: &str = "mir_shims";
    pub const symbol_name: &str = "symbol_name";
    pub const def_kind: &str = "def_kind";
    pub const def_span: &str = "def_span";
    pub const def_ident_span: &str = "def_ident_span";
    pub const ty_span: &str = "ty_span";
    pub const lookup_stability: &str = "lookup_stability";
    pub const lookup_const_stability: &str = "lookup_const_stability";
    pub const lookup_default_body_stability: &str =
        "lookup_default_body_stability";
    pub const should_inherit_track_caller: &str =
        "should_inherit_track_caller";
    pub const inherited_align: &str = "inherited_align";
    pub const lookup_deprecation_entry: &str = "lookup_deprecation_entry";
    pub const is_doc_hidden: &str = "is_doc_hidden";
    pub const is_doc_notable_trait: &str = "is_doc_notable_trait";
    pub const attrs_for_def: &str = "attrs_for_def";
    pub const codegen_fn_attrs: &str = "codegen_fn_attrs";
    pub const asm_target_features: &str = "asm_target_features";
    pub const fn_arg_idents: &str = "fn_arg_idents";
    pub const rendered_const: &str = "rendered_const";
    pub const rendered_precise_capturing_args: &str =
        "rendered_precise_capturing_args";
    pub const impl_parent: &str = "impl_parent";
    pub const is_mir_available: &str = "is_mir_available";
    pub const own_existential_vtable_entries: &str =
        "own_existential_vtable_entries";
    pub const vtable_entries: &str = "vtable_entries";
    pub const first_method_vtable_slot: &str = "first_method_vtable_slot";
    pub const supertrait_vtable_slot: &str = "supertrait_vtable_slot";
    pub const vtable_allocation: &str = "vtable_allocation";
    pub const codegen_select_candidate: &str = "codegen_select_candidate";
    pub const all_local_trait_impls: &str = "all_local_trait_impls";
    pub const local_trait_impls: &str = "local_trait_impls";
    pub const trait_impls_of: &str = "trait_impls_of";
    pub const specialization_graph_of: &str = "specialization_graph_of";
    pub const dyn_compatibility_violations: &str =
        "dyn_compatibility_violations";
    pub const is_dyn_compatible: &str = "is_dyn_compatible";
    pub const param_env: &str = "param_env";
    pub const typing_env_normalized_for_post_analysis: &str =
        "typing_env_normalized_for_post_analysis";
    pub const is_copy_raw: &str = "is_copy_raw";
    pub const is_use_cloned_raw: &str = "is_use_cloned_raw";
    pub const is_sized_raw: &str = "is_sized_raw";
    pub const is_freeze_raw: &str = "is_freeze_raw";
    pub const is_unsafe_unpin_raw: &str = "is_unsafe_unpin_raw";
    pub const is_unpin_raw: &str = "is_unpin_raw";
    pub const is_async_drop_raw: &str = "is_async_drop_raw";
    pub const needs_drop_raw: &str = "needs_drop_raw";
    pub const needs_async_drop_raw: &str = "needs_async_drop_raw";
    pub const has_significant_drop_raw: &str = "has_significant_drop_raw";
    pub const has_structural_eq_impl: &str = "has_structural_eq_impl";
    pub const adt_drop_tys: &str = "adt_drop_tys";
    pub const adt_async_drop_tys: &str = "adt_async_drop_tys";
    pub const adt_significant_drop_tys: &str = "adt_significant_drop_tys";
    pub const list_significant_drop_tys: &str = "list_significant_drop_tys";
    pub const layout_of: &str = "layout_of";
    pub const fn_abi_of_fn_ptr: &str = "fn_abi_of_fn_ptr";
    pub const fn_abi_of_instance_no_deduced_attrs: &str =
        "fn_abi_of_instance_no_deduced_attrs";
    pub const fn_abi_of_instance_raw: &str = "fn_abi_of_instance_raw";
    pub const dylib_dependency_formats: &str = "dylib_dependency_formats";
    pub const dependency_formats: &str = "dependency_formats";
    pub const is_compiler_builtins: &str = "is_compiler_builtins";
    pub const has_global_allocator: &str = "has_global_allocator";
    pub const has_alloc_error_handler: &str = "has_alloc_error_handler";
    pub const has_panic_handler: &str = "has_panic_handler";
    pub const is_profiler_runtime: &str = "is_profiler_runtime";
    pub const has_ffi_unwind_calls: &str = "has_ffi_unwind_calls";
    pub const required_panic_strategy: &str = "required_panic_strategy";
    pub const panic_in_drop_strategy: &str = "panic_in_drop_strategy";
    pub const is_no_builtins: &str = "is_no_builtins";
    pub const symbol_mangling_version: &str = "symbol_mangling_version";
    pub const extern_crate: &str = "extern_crate";
    pub const specialization_enabled_in: &str = "specialization_enabled_in";
    pub const specializes: &str = "specializes";
    pub const in_scope_traits_map: &str = "in_scope_traits_map";
    pub const defaultness: &str = "defaultness";
    pub const default_field: &str = "default_field";
    pub const check_well_formed: &str = "check_well_formed";
    pub const enforce_impl_non_lifetime_params_are_constrained: &str =
        "enforce_impl_non_lifetime_params_are_constrained";
    pub const reachable_non_generics: &str = "reachable_non_generics";
    pub const is_reachable_non_generic: &str = "is_reachable_non_generic";
    pub const is_unreachable_local_definition: &str =
        "is_unreachable_local_definition";
    pub const upstream_monomorphizations: &str = "upstream_monomorphizations";
    pub const upstream_monomorphizations_for: &str =
        "upstream_monomorphizations_for";
    pub const upstream_drop_glue_for: &str = "upstream_drop_glue_for";
    pub const upstream_async_drop_glue_for: &str =
        "upstream_async_drop_glue_for";
    pub const foreign_modules: &str = "foreign_modules";
    pub const clashing_extern_declarations: &str =
        "clashing_extern_declarations";
    pub const entry_fn: &str = "entry_fn";
    pub const proc_macro_decls_static: &str = "proc_macro_decls_static";
    pub const crate_hash: &str = "crate_hash";
    pub const crate_host_hash: &str = "crate_host_hash";
    pub const extra_filename: &str = "extra_filename";
    pub const crate_extern_paths: &str = "crate_extern_paths";
    pub const implementations_of_trait: &str = "implementations_of_trait";
    pub const crate_incoherent_impls: &str = "crate_incoherent_impls";
    pub const native_library: &str = "native_library";
    pub const inherit_sig_for_delegation_item: &str =
        "inherit_sig_for_delegation_item";
    pub const resolve_bound_vars: &str = "resolve_bound_vars";
    pub const named_variable_map: &str = "named_variable_map";
    pub const is_late_bound_map: &str = "is_late_bound_map";
    pub const object_lifetime_default: &str = "object_lifetime_default";
    pub const late_bound_vars_map: &str = "late_bound_vars_map";
    pub const opaque_captured_lifetimes: &str = "opaque_captured_lifetimes";
    pub const visibility: &str = "visibility";
    pub const inhabited_predicate_adt: &str = "inhabited_predicate_adt";
    pub const inhabited_predicate_type: &str = "inhabited_predicate_type";
    pub const crate_dep_kind: &str = "crate_dep_kind";
    pub const crate_name: &str = "crate_name";
    pub const module_children: &str = "module_children";
    pub const num_extern_def_ids: &str = "num_extern_def_ids";
    pub const lib_features: &str = "lib_features";
    pub const stability_implications: &str = "stability_implications";
    pub const intrinsic_raw: &str = "intrinsic_raw";
    pub const get_lang_items: &str = "get_lang_items";
    pub const all_diagnostic_items: &str = "all_diagnostic_items";
    pub const defined_lang_items: &str = "defined_lang_items";
    pub const diagnostic_items: &str = "diagnostic_items";
    pub const missing_lang_items: &str = "missing_lang_items";
    pub const visible_parent_map: &str = "visible_parent_map";
    pub const trimmed_def_paths: &str = "trimmed_def_paths";
    pub const missing_extern_crate_item: &str = "missing_extern_crate_item";
    pub const used_crate_source: &str = "used_crate_source";
    pub const debugger_visualizers: &str = "debugger_visualizers";
    pub const postorder_cnums: &str = "postorder_cnums";
    pub const is_private_dep: &str = "is_private_dep";
    pub const allocator_kind: &str = "allocator_kind";
    pub const alloc_error_handler_kind: &str = "alloc_error_handler_kind";
    pub const upvars_mentioned: &str = "upvars_mentioned";
    pub const crates: &str = "crates";
    pub const used_crates: &str = "used_crates";
    pub const duplicate_crate_names: &str = "duplicate_crate_names";
    pub const traits: &str = "traits";
    pub const trait_impls_in_crate: &str = "trait_impls_in_crate";
    pub const stable_order_of_exportable_impls: &str =
        "stable_order_of_exportable_impls";
    pub const exportable_items: &str = "exportable_items";
    pub const exported_non_generic_symbols: &str =
        "exported_non_generic_symbols";
    pub const exported_generic_symbols: &str = "exported_generic_symbols";
    pub const collect_and_partition_mono_items: &str =
        "collect_and_partition_mono_items";
    pub const is_codegened_item: &str = "is_codegened_item";
    pub const codegen_unit: &str = "codegen_unit";
    pub const backend_optimization_level: &str = "backend_optimization_level";
    pub const output_filenames: &str = "output_filenames";
    pub const normalize_canonicalized_projection: &str =
        "normalize_canonicalized_projection";
    pub const normalize_canonicalized_free_alias: &str =
        "normalize_canonicalized_free_alias";
    pub const normalize_canonicalized_inherent_projection: &str =
        "normalize_canonicalized_inherent_projection";
    pub const try_normalize_generic_arg_after_erasing_regions: &str =
        "try_normalize_generic_arg_after_erasing_regions";
    pub const implied_outlives_bounds: &str = "implied_outlives_bounds";
    pub const dropck_outlives: &str = "dropck_outlives";
    pub const evaluate_obligation: &str = "evaluate_obligation";
    pub const type_op_ascribe_user_type: &str = "type_op_ascribe_user_type";
    pub const type_op_prove_predicate: &str = "type_op_prove_predicate";
    pub const type_op_normalize_ty: &str = "type_op_normalize_ty";
    pub const type_op_normalize_clause: &str = "type_op_normalize_clause";
    pub const type_op_normalize_poly_fn_sig: &str =
        "type_op_normalize_poly_fn_sig";
    pub const type_op_normalize_fn_sig: &str = "type_op_normalize_fn_sig";
    pub const instantiate_and_check_impossible_predicates: &str =
        "instantiate_and_check_impossible_predicates";
    pub const is_impossible_associated_item: &str =
        "is_impossible_associated_item";
    pub const method_autoderef_steps: &str = "method_autoderef_steps";
    pub const evaluate_root_goal_for_proof_tree_raw: &str =
        "evaluate_root_goal_for_proof_tree_raw";
    pub const rust_target_features: &str = "rust_target_features";
    pub const implied_target_features: &str = "implied_target_features";
    pub const features_query: &str = "features_query";
    pub const crate_for_resolver: &str = "crate_for_resolver";
    pub const resolve_instance_raw: &str = "resolve_instance_raw";
    pub const reveal_opaque_types_in_bounds: &str =
        "reveal_opaque_types_in_bounds";
    pub const limits: &str = "limits";
    pub const diagnostic_hir_wf_check: &str = "diagnostic_hir_wf_check";
    pub const global_backend_features: &str = "global_backend_features";
    pub const check_validity_requirement: &str = "check_validity_requirement";
    pub const compare_impl_item: &str = "compare_impl_item";
    pub const deduced_param_attrs: &str = "deduced_param_attrs";
    pub const doc_link_resolutions: &str = "doc_link_resolutions";
    pub const doc_link_traits_in_scope: &str = "doc_link_traits_in_scope";
    pub const stripped_cfg_items: &str = "stripped_cfg_items";
    pub const generics_require_sized_self: &str =
        "generics_require_sized_self";
    pub const cross_crate_inlinable: &str = "cross_crate_inlinable";
    pub const check_mono_item: &str = "check_mono_item";
    pub const skip_move_check_fns: &str = "skip_move_check_fns";
    pub const items_of_instance: &str = "items_of_instance";
    pub const size_estimate: &str = "size_estimate";
    pub const anon_const_kind: &str = "anon_const_kind";
    pub const trivial_const: &str = "trivial_const";
    pub const sanitizer_settings_for: &str = "sanitizer_settings_for";
    pub const check_externally_implementable_items: &str =
        "check_externally_implementable_items";
    pub const externally_implementable_items: &str =
        "externally_implementable_items";
}rustc_with_all_queries! { define_dep_nodes! }
335
336// WARNING: `construct` is generic and does not know that `CompileCodegenUnit` takes `Symbol`s as keys.
337// Be very careful changing this type signature!
338pub(crate) fn make_compile_codegen_unit(tcx: TyCtxt<'_>, name: Symbol) -> DepNode {
339    DepNode::construct(tcx, DepKind::CompileCodegenUnit, &name)
340}
341
342// WARNING: `construct` is generic and does not know that `CompileMonoItem` takes `MonoItem`s as keys.
343// Be very careful changing this type signature!
344pub(crate) fn make_compile_mono_item<'tcx>(
345    tcx: TyCtxt<'tcx>,
346    mono_item: &MonoItem<'tcx>,
347) -> DepNode {
348    DepNode::construct(tcx, DepKind::CompileMonoItem, mono_item)
349}
350
351// WARNING: `construct` is generic and does not know that `Metadata` takes `()`s as keys.
352// Be very careful changing this type signature!
353pub(crate) fn make_metadata(tcx: TyCtxt<'_>) -> DepNode {
354    DepNode::construct(tcx, DepKind::Metadata, &())
355}
356
357impl DepNode {
358    /// Extracts the DefId corresponding to this DepNode. This will work
359    /// if two conditions are met:
360    ///
361    /// 1. The Fingerprint of the DepNode actually is a DefPathHash, and
362    /// 2. the item that the DefPath refers to exists in the current tcx.
363    ///
364    /// Condition (1) is determined by the DepKind variant of the
365    /// DepNode. Condition (2) might not be fulfilled if a DepNode
366    /// refers to something from the previous compilation session that
367    /// has been removed.
368    pub fn extract_def_id(&self, tcx: TyCtxt<'_>) -> Option<DefId> {
369        if tcx.key_fingerprint_style(self.kind) == KeyFingerprintStyle::DefPathHash {
370            tcx.def_path_hash_to_def_id(DefPathHash(self.key_fingerprint.into()))
371        } else {
372            None
373        }
374    }
375
376    pub fn from_label_string(
377        tcx: TyCtxt<'_>,
378        label: &str,
379        def_path_hash: DefPathHash,
380    ) -> Result<DepNode, ()> {
381        let kind = dep_kind_from_label_string(label)?;
382
383        match tcx.key_fingerprint_style(kind) {
384            KeyFingerprintStyle::Opaque | KeyFingerprintStyle::HirId => Err(()),
385            KeyFingerprintStyle::Unit => Ok(DepNode::new_no_params(tcx, kind)),
386            KeyFingerprintStyle::DefPathHash => {
387                Ok(DepNode::from_def_path_hash(tcx, def_path_hash, kind))
388            }
389        }
390    }
391
392    pub fn has_label_string(label: &str) -> bool {
393        dep_kind_from_label_string(label).is_ok()
394    }
395}
396
397/// Maps a query label to its DepKind. Panics if a query with the given label does not exist.
398pub fn dep_kind_from_label(label: &str) -> DepKind {
399    dep_kind_from_label_string(label)
400        .unwrap_or_else(|_| {
    ::core::panicking::panic_fmt(format_args!("Query label {0} does not exist",
            label));
}panic!("Query label {label} does not exist"))
401}
402
403// Some types are used a lot. Make sure they don't unintentionally get bigger.
404#[cfg(target_pointer_width = "64")]
405mod size_asserts {
406    use rustc_data_structures::static_assert_size;
407
408    use super::*;
409    // tidy-alphabetical-start
410    const _: [(); 2] = [(); ::std::mem::size_of::<DepKind>()];static_assert_size!(DepKind, 2);
411    #[cfg(any(target_arch = "x86", target_arch = "x86_64"))]
412    const _: [(); 18] = [(); ::std::mem::size_of::<DepNode>()];static_assert_size!(DepNode, 18);
413    #[cfg(not(any(target_arch = "x86", target_arch = "x86_64")))]
414    static_assert_size!(DepNode, 24);
415    // tidy-alphabetical-end
416}