Skip to main content

rustc_metadata/rmeta/
parameterized.rs

1use std::hash::Hash;
2
3use rustc_data_structures::unord::UnordMap;
4use rustc_hir::def_id::DefIndex;
5use rustc_index::{Idx, IndexVec};
6use rustc_middle::ty::{Binder, EarlyBinder, GenericArg, Region};
7use rustc_span::Symbol;
8
9use crate::rmeta::{LazyArray, LazyValue};
10
11pub(crate) trait ParameterizedOverTcx: 'static {
12    type Value<'tcx>;
13}
14
15impl<T: ParameterizedOverTcx> ParameterizedOverTcx for Option<T> {
16    type Value<'tcx> = Option<T::Value<'tcx>>;
17}
18
19impl<A: ParameterizedOverTcx, B: ParameterizedOverTcx> ParameterizedOverTcx for (A, B) {
20    type Value<'tcx> = (A::Value<'tcx>, B::Value<'tcx>);
21}
22
23impl<T: ParameterizedOverTcx> ParameterizedOverTcx for Vec<T> {
24    type Value<'tcx> = Vec<T::Value<'tcx>>;
25}
26
27impl<I: Idx + 'static, T: ParameterizedOverTcx> ParameterizedOverTcx for IndexVec<I, T> {
28    type Value<'tcx> = IndexVec<I, T::Value<'tcx>>;
29}
30
31impl<I: Hash + Eq + 'static, T: ParameterizedOverTcx> ParameterizedOverTcx for UnordMap<I, T> {
32    type Value<'tcx> = UnordMap<I, T::Value<'tcx>>;
33}
34
35impl<T: ParameterizedOverTcx> ParameterizedOverTcx for Binder<'static, T> {
36    type Value<'tcx> = Binder<'tcx, T::Value<'tcx>>;
37}
38
39impl<T: ParameterizedOverTcx> ParameterizedOverTcx for EarlyBinder<'static, T> {
40    type Value<'tcx> = EarlyBinder<'tcx, T::Value<'tcx>>;
41}
42
43impl<T: ParameterizedOverTcx> ParameterizedOverTcx for LazyValue<T> {
44    type Value<'tcx> = LazyValue<T::Value<'tcx>>;
45}
46
47impl<T: ParameterizedOverTcx> ParameterizedOverTcx for LazyArray<T> {
48    type Value<'tcx> = LazyArray<T::Value<'tcx>>;
49}
50
51impl ParameterizedOverTcx for Region<'static> {
52    type Value<'tcx> = Region<'tcx>;
53}
54
55impl ParameterizedOverTcx for GenericArg<'static> {
56    type Value<'tcx> = GenericArg<'tcx>;
57}
58
59macro_rules! trivially_parameterized_over_tcx {
60    ($($ty:ty),+ $(,)?) => {
61        $(
62            impl ParameterizedOverTcx for $ty {
63                #[allow(unused_lifetimes)]
64                type Value<'tcx> = $ty;
65            }
66        )*
67    }
68}
69
70impl ParameterizedOverTcx for bool {
    #[allow(unused_lifetimes)]
    type Value<'tcx> = bool;
}
impl ParameterizedOverTcx for u32 {
    #[allow(unused_lifetimes)]
    type Value<'tcx> = u32;
}
impl ParameterizedOverTcx for u64 {
    #[allow(unused_lifetimes)]
    type Value<'tcx> = u64;
}
impl ParameterizedOverTcx for usize {
    #[allow(unused_lifetimes)]
    type Value<'tcx> = usize;
}
impl ParameterizedOverTcx for std::string::String {
    #[allow(unused_lifetimes)]
    type Value<'tcx> = std::string::String;
}
impl ParameterizedOverTcx for crate::rmeta::AttrFlags {
    #[allow(unused_lifetimes)]
    type Value<'tcx> = crate::rmeta::AttrFlags;
}
impl ParameterizedOverTcx for crate::rmeta::CrateDep {
    #[allow(unused_lifetimes)]
    type Value<'tcx> = crate::rmeta::CrateDep;
}
impl ParameterizedOverTcx for crate::rmeta::CrateHeader {
    #[allow(unused_lifetimes)]
    type Value<'tcx> = crate::rmeta::CrateHeader;
}
impl ParameterizedOverTcx for crate::rmeta::CrateRoot {
    #[allow(unused_lifetimes)]
    type Value<'tcx> = crate::rmeta::CrateRoot;
}
impl ParameterizedOverTcx for crate::rmeta::CrateRootUnhashed {
    #[allow(unused_lifetimes)]
    type Value<'tcx> = crate::rmeta::CrateRootUnhashed;
}
impl ParameterizedOverTcx for crate::rmeta::IncoherentImpls {
    #[allow(unused_lifetimes)]
    type Value<'tcx> = crate::rmeta::IncoherentImpls;
}
impl ParameterizedOverTcx for crate::rmeta::ProcMacroKind {
    #[allow(unused_lifetimes)]
    type Value<'tcx> = crate::rmeta::ProcMacroKind;
}
impl ParameterizedOverTcx for crate::rmeta::RawDefId {
    #[allow(unused_lifetimes)]
    type Value<'tcx> = crate::rmeta::RawDefId;
}
impl ParameterizedOverTcx for crate::rmeta::TraitImpls {
    #[allow(unused_lifetimes)]
    type Value<'tcx> = crate::rmeta::TraitImpls;
}
impl ParameterizedOverTcx for crate::rmeta::VariantData {
    #[allow(unused_lifetimes)]
    type Value<'tcx> = crate::rmeta::VariantData;
}
impl ParameterizedOverTcx for rustc_abi::ReprOptions {
    #[allow(unused_lifetimes)]
    type Value<'tcx> = rustc_abi::ReprOptions;
}
impl ParameterizedOverTcx for rustc_ast::DelimArgs {
    #[allow(unused_lifetimes)]
    type Value<'tcx> = rustc_ast::DelimArgs;
}
impl ParameterizedOverTcx for rustc_attr_ir::Attribute {
    #[allow(unused_lifetimes)]
    type Value<'tcx> = rustc_attr_ir::Attribute;
}
impl ParameterizedOverTcx for rustc_attr_ir::ConstStability {
    #[allow(unused_lifetimes)]
    type Value<'tcx> = rustc_attr_ir::ConstStability;
}
impl ParameterizedOverTcx for rustc_attr_ir::DefaultBodyStability {
    #[allow(unused_lifetimes)]
    type Value<'tcx> = rustc_attr_ir::DefaultBodyStability;
}
impl ParameterizedOverTcx for rustc_attr_ir::Deprecation {
    #[allow(unused_lifetimes)]
    type Value<'tcx> = rustc_attr_ir::Deprecation;
}
impl ParameterizedOverTcx for rustc_attr_ir::EiiDecl {
    #[allow(unused_lifetimes)]
    type Value<'tcx> = rustc_attr_ir::EiiDecl;
}
impl ParameterizedOverTcx for rustc_attr_ir::EiiImpl {
    #[allow(unused_lifetimes)]
    type Value<'tcx> = rustc_attr_ir::EiiImpl;
}
impl ParameterizedOverTcx for rustc_attr_ir::Stability {
    #[allow(unused_lifetimes)]
    type Value<'tcx> = rustc_attr_ir::Stability;
}
impl ParameterizedOverTcx for
    rustc_attr_ir::StrippedCfgItem<rustc_hir::def_id::DefIndex> {
    #[allow(unused_lifetimes)]
    type Value<'tcx> =
        rustc_attr_ir::StrippedCfgItem<rustc_hir::def_id::DefIndex>;
}
impl ParameterizedOverTcx for rustc_attr_ir::lang_items::LangItem {
    #[allow(unused_lifetimes)]
    type Value<'tcx> = rustc_attr_ir::lang_items::LangItem;
}
impl ParameterizedOverTcx for rustc_crate_store::ForeignModule {
    #[allow(unused_lifetimes)]
    type Value<'tcx> = rustc_crate_store::ForeignModule;
}
impl ParameterizedOverTcx for rustc_crate_store::LinkagePreference {
    #[allow(unused_lifetimes)]
    type Value<'tcx> = rustc_crate_store::LinkagePreference;
}
impl ParameterizedOverTcx for rustc_crate_store::NativeLib {
    #[allow(unused_lifetimes)]
    type Value<'tcx> = rustc_crate_store::NativeLib;
}
impl ParameterizedOverTcx for rustc_hir::Constness {
    #[allow(unused_lifetimes)]
    type Value<'tcx> = rustc_hir::Constness;
}
impl ParameterizedOverTcx for rustc_hir::CoroutineKind {
    #[allow(unused_lifetimes)]
    type Value<'tcx> = rustc_hir::CoroutineKind;
}
impl ParameterizedOverTcx for rustc_hir::Defaultness {
    #[allow(unused_lifetimes)]
    type Value<'tcx> = rustc_hir::Defaultness;
}
impl ParameterizedOverTcx for
    rustc_hir::OpaqueTyOrigin<rustc_hir::def_id::DefId> {
    #[allow(unused_lifetimes)]
    type Value<'tcx> = rustc_hir::OpaqueTyOrigin<rustc_hir::def_id::DefId>;
}
impl ParameterizedOverTcx for
    rustc_hir::PreciseCapturingArgKind<Symbol, Symbol> {
    #[allow(unused_lifetimes)]
    type Value<'tcx> = rustc_hir::PreciseCapturingArgKind<Symbol, Symbol>;
}
impl ParameterizedOverTcx for rustc_hir::Safety {
    #[allow(unused_lifetimes)]
    type Value<'tcx> = rustc_hir::Safety;
}
impl ParameterizedOverTcx for rustc_hir::def::DefKind {
    #[allow(unused_lifetimes)]
    type Value<'tcx> = rustc_hir::def::DefKind;
}
impl ParameterizedOverTcx for rustc_hir::def_id::DefId {
    #[allow(unused_lifetimes)]
    type Value<'tcx> = rustc_hir::def_id::DefId;
}
impl ParameterizedOverTcx for rustc_hir::def_id::DefIndex {
    #[allow(unused_lifetimes)]
    type Value<'tcx> = rustc_hir::def_id::DefIndex;
}
impl ParameterizedOverTcx for rustc_hir::definitions::DefKey {
    #[allow(unused_lifetimes)]
    type Value<'tcx> = rustc_hir::definitions::DefKey;
}
impl ParameterizedOverTcx for rustc_index::bit_set::DenseBitSet<u32> {
    #[allow(unused_lifetimes)]
    type Value<'tcx> = rustc_index::bit_set::DenseBitSet<u32>;
}
impl ParameterizedOverTcx for
    rustc_middle::middle::codegen_fn_attrs::CodegenFnAttrs {
    #[allow(unused_lifetimes)]
    type Value<'tcx> = rustc_middle::middle::codegen_fn_attrs::CodegenFnAttrs;
}
impl ParameterizedOverTcx for
    rustc_middle::middle::debugger_visualizer::DebuggerVisualizerFile {
    #[allow(unused_lifetimes)]
    type Value<'tcx> =
        rustc_middle::middle::debugger_visualizer::DebuggerVisualizerFile;
}
impl ParameterizedOverTcx for
    rustc_middle::middle::deduced_param_attrs::DeducedParamAttrs {
    #[allow(unused_lifetimes)]
    type Value<'tcx> =
        rustc_middle::middle::deduced_param_attrs::DeducedParamAttrs;
}
impl ParameterizedOverTcx for
    rustc_middle::middle::exported_symbols::SymbolExportInfo {
    #[allow(unused_lifetimes)]
    type Value<'tcx> =
        rustc_middle::middle::exported_symbols::SymbolExportInfo;
}
impl ParameterizedOverTcx for
    rustc_middle::middle::lib_features::FeatureStability {
    #[allow(unused_lifetimes)]
    type Value<'tcx> = rustc_middle::middle::lib_features::FeatureStability;
}
impl ParameterizedOverTcx for rustc_middle::middle::resolve::AmbigModChild {
    #[allow(unused_lifetimes)]
    type Value<'tcx> = rustc_middle::middle::resolve::AmbigModChild;
}
impl ParameterizedOverTcx for rustc_middle::middle::resolve::DocLinkResMap {
    #[allow(unused_lifetimes)]
    type Value<'tcx> = rustc_middle::middle::resolve::DocLinkResMap;
}
impl ParameterizedOverTcx for rustc_middle::middle::resolve::ModChild {
    #[allow(unused_lifetimes)]
    type Value<'tcx> = rustc_middle::middle::resolve::ModChild;
}
impl ParameterizedOverTcx for
    rustc_middle::middle::resolve_bound_vars::ObjectLifetimeDefault {
    #[allow(unused_lifetimes)]
    type Value<'tcx> =
        rustc_middle::middle::resolve_bound_vars::ObjectLifetimeDefault;
}
impl ParameterizedOverTcx for rustc_middle::mir::ConstQualifs {
    #[allow(unused_lifetimes)]
    type Value<'tcx> = rustc_middle::mir::ConstQualifs;
}
impl ParameterizedOverTcx for rustc_middle::mir::ConstValue {
    #[allow(unused_lifetimes)]
    type Value<'tcx> = rustc_middle::mir::ConstValue;
}
impl ParameterizedOverTcx for rustc_middle::ty::AnonConstKind {
    #[allow(unused_lifetimes)]
    type Value<'tcx> = rustc_middle::ty::AnonConstKind;
}
impl ParameterizedOverTcx for rustc_middle::ty::AssocContainer {
    #[allow(unused_lifetimes)]
    type Value<'tcx> = rustc_middle::ty::AssocContainer;
}
impl ParameterizedOverTcx for rustc_middle::ty::AsyncDestructor {
    #[allow(unused_lifetimes)]
    type Value<'tcx> = rustc_middle::ty::AsyncDestructor;
}
impl ParameterizedOverTcx for rustc_middle::ty::Asyncness {
    #[allow(unused_lifetimes)]
    type Value<'tcx> = rustc_middle::ty::Asyncness;
}
impl ParameterizedOverTcx for rustc_middle::ty::Destructor {
    #[allow(unused_lifetimes)]
    type Value<'tcx> = rustc_middle::ty::Destructor;
}
impl ParameterizedOverTcx for rustc_middle::ty::Generics {
    #[allow(unused_lifetimes)]
    type Value<'tcx> = rustc_middle::ty::Generics;
}
impl ParameterizedOverTcx for rustc_middle::ty::ImplTraitInTraitData {
    #[allow(unused_lifetimes)]
    type Value<'tcx> = rustc_middle::ty::ImplTraitInTraitData;
}
impl ParameterizedOverTcx for rustc_middle::ty::IntrinsicDef {
    #[allow(unused_lifetimes)]
    type Value<'tcx> = rustc_middle::ty::IntrinsicDef;
}
impl ParameterizedOverTcx for rustc_middle::ty::RestrictionKind {
    #[allow(unused_lifetimes)]
    type Value<'tcx> = rustc_middle::ty::RestrictionKind;
}
impl ParameterizedOverTcx for rustc_middle::ty::TraitDef {
    #[allow(unused_lifetimes)]
    type Value<'tcx> = rustc_middle::ty::TraitDef;
}
impl ParameterizedOverTcx for rustc_middle::ty::Variance {
    #[allow(unused_lifetimes)]
    type Value<'tcx> = rustc_middle::ty::Variance;
}
impl ParameterizedOverTcx for rustc_middle::ty::Visibility<DefIndex> {
    #[allow(unused_lifetimes)]
    type Value<'tcx> = rustc_middle::ty::Visibility<DefIndex>;
}
impl ParameterizedOverTcx for rustc_middle::ty::adjustment::CoerceUnsizedInfo
    {
    #[allow(unused_lifetimes)]
    type Value<'tcx> = rustc_middle::ty::adjustment::CoerceUnsizedInfo;
}
impl ParameterizedOverTcx for rustc_middle::ty::fast_reject::SimplifiedType {
    #[allow(unused_lifetimes)]
    type Value<'tcx> = rustc_middle::ty::fast_reject::SimplifiedType;
}
impl ParameterizedOverTcx for rustc_session::config::TargetModifier {
    #[allow(unused_lifetimes)]
    type Value<'tcx> = rustc_session::config::TargetModifier;
}
impl ParameterizedOverTcx for
    rustc_session::config::mitigation_coverage::DeniedPartialMitigation {
    #[allow(unused_lifetimes)]
    type Value<'tcx> =
        rustc_session::config::mitigation_coverage::DeniedPartialMitigation;
}
impl ParameterizedOverTcx for rustc_span::ExpnData {
    #[allow(unused_lifetimes)]
    type Value<'tcx> = rustc_span::ExpnData;
}
impl ParameterizedOverTcx for rustc_span::ExpnHash {
    #[allow(unused_lifetimes)]
    type Value<'tcx> = rustc_span::ExpnHash;
}
impl ParameterizedOverTcx for rustc_span::ExpnId {
    #[allow(unused_lifetimes)]
    type Value<'tcx> = rustc_span::ExpnId;
}
impl ParameterizedOverTcx for rustc_span::Ident {
    #[allow(unused_lifetimes)]
    type Value<'tcx> = rustc_span::Ident;
}
impl ParameterizedOverTcx for rustc_span::SourceFile {
    #[allow(unused_lifetimes)]
    type Value<'tcx> = rustc_span::SourceFile;
}
impl ParameterizedOverTcx for rustc_span::Span {
    #[allow(unused_lifetimes)]
    type Value<'tcx> = rustc_span::Span;
}
impl ParameterizedOverTcx for rustc_span::Symbol {
    #[allow(unused_lifetimes)]
    type Value<'tcx> = rustc_span::Symbol;
}
impl ParameterizedOverTcx for rustc_span::hygiene::SyntaxContextKey {
    #[allow(unused_lifetimes)]
    type Value<'tcx> = rustc_span::hygiene::SyntaxContextKey;
}trivially_parameterized_over_tcx! {
71    bool,
72    u32,
73    u64,
74    usize,
75    std::string::String,
76    // tidy-alphabetical-start
77    crate::rmeta::AttrFlags,
78    crate::rmeta::CrateDep,
79    crate::rmeta::CrateHeader,
80    crate::rmeta::CrateRoot,
81    crate::rmeta::CrateRootUnhashed,
82    crate::rmeta::IncoherentImpls,
83    crate::rmeta::ProcMacroKind,
84    crate::rmeta::RawDefId,
85    crate::rmeta::TraitImpls,
86    crate::rmeta::VariantData,
87    rustc_abi::ReprOptions,
88    rustc_ast::DelimArgs,
89    rustc_attr_ir::Attribute,
90    rustc_attr_ir::ConstStability,
91    rustc_attr_ir::DefaultBodyStability,
92    rustc_attr_ir::Deprecation,
93    rustc_attr_ir::EiiDecl,
94    rustc_attr_ir::EiiImpl,
95    rustc_attr_ir::Stability,
96    rustc_attr_ir::StrippedCfgItem<rustc_hir::def_id::DefIndex>,
97    rustc_attr_ir::lang_items::LangItem,
98    rustc_crate_store::ForeignModule,
99    rustc_crate_store::LinkagePreference,
100    rustc_crate_store::NativeLib,
101    rustc_hir::Constness,
102    rustc_hir::CoroutineKind,
103    rustc_hir::Defaultness,
104    rustc_hir::OpaqueTyOrigin<rustc_hir::def_id::DefId>,
105    rustc_hir::PreciseCapturingArgKind<Symbol, Symbol>,
106    rustc_hir::Safety,
107    rustc_hir::def::DefKind,
108    rustc_hir::def_id::DefId,
109    rustc_hir::def_id::DefIndex,
110    rustc_hir::definitions::DefKey,
111    rustc_index::bit_set::DenseBitSet<u32>,
112    rustc_middle::middle::codegen_fn_attrs::CodegenFnAttrs,
113    rustc_middle::middle::debugger_visualizer::DebuggerVisualizerFile,
114    rustc_middle::middle::deduced_param_attrs::DeducedParamAttrs,
115    rustc_middle::middle::exported_symbols::SymbolExportInfo,
116    rustc_middle::middle::lib_features::FeatureStability,
117    rustc_middle::middle::resolve::AmbigModChild,
118    rustc_middle::middle::resolve::DocLinkResMap,
119    rustc_middle::middle::resolve::ModChild,
120    rustc_middle::middle::resolve_bound_vars::ObjectLifetimeDefault,
121    rustc_middle::mir::ConstQualifs,
122    rustc_middle::mir::ConstValue,
123    rustc_middle::ty::AnonConstKind,
124    rustc_middle::ty::AssocContainer,
125    rustc_middle::ty::AsyncDestructor,
126    rustc_middle::ty::Asyncness,
127    rustc_middle::ty::Destructor,
128    rustc_middle::ty::Generics,
129    rustc_middle::ty::ImplTraitInTraitData,
130    rustc_middle::ty::IntrinsicDef,
131    rustc_middle::ty::RestrictionKind,
132    rustc_middle::ty::TraitDef,
133    rustc_middle::ty::Variance,
134    rustc_middle::ty::Visibility<DefIndex>,
135    rustc_middle::ty::adjustment::CoerceUnsizedInfo,
136    rustc_middle::ty::fast_reject::SimplifiedType,
137    rustc_session::config::TargetModifier,
138    rustc_session::config::mitigation_coverage::DeniedPartialMitigation,
139    rustc_span::ExpnData,
140    rustc_span::ExpnHash,
141    rustc_span::ExpnId,
142    rustc_span::Ident,
143    rustc_span::SourceFile,
144    rustc_span::Span,
145    rustc_span::Symbol,
146    rustc_span::hygiene::SyntaxContextKey,
147    // tidy-alphabetical-end
148}
149
150// HACK(compiler-errors): This macro rule can only take a fake path,
151// not a real, due to parsing ambiguity reasons.
152macro_rules! parameterized_over_tcx {
153    ($($( $fake_path:ident )::+ ),+ $(,)?) => {
154        $(
155            impl ParameterizedOverTcx for $( $fake_path )::+ <'static> {
156                type Value<'tcx> = $( $fake_path )::+ <'tcx>;
157            }
158        )*
159    }
160}
161
162impl ParameterizedOverTcx for crate::rmeta::DefPathHashMapRef<'static> {
    type Value<'tcx> = crate::rmeta::DefPathHashMapRef<'tcx>;
}
impl ParameterizedOverTcx for
    rustc_middle::middle::exported_symbols::ExportedSymbol<'static> {
    type Value<'tcx> =
        rustc_middle::middle::exported_symbols::ExportedSymbol<'tcx>;
}
impl ParameterizedOverTcx for rustc_middle::mir::Body<'static> {
    type Value<'tcx> = rustc_middle::mir::Body<'tcx>;
}
impl ParameterizedOverTcx for rustc_middle::mir::CoroutineLayout<'static> {
    type Value<'tcx> = rustc_middle::mir::CoroutineLayout<'tcx>;
}
impl ParameterizedOverTcx for
    rustc_middle::mir::interpret::ConstAllocation<'static> {
    type Value<'tcx> = rustc_middle::mir::interpret::ConstAllocation<'tcx>;
}
impl ParameterizedOverTcx for rustc_middle::ty::Clause<'static> {
    type Value<'tcx> = rustc_middle::ty::Clause<'tcx>;
}
impl ParameterizedOverTcx for rustc_middle::ty::Const<'static> {
    type Value<'tcx> = rustc_middle::ty::Const<'tcx>;
}
impl ParameterizedOverTcx for rustc_middle::ty::ConstConditions<'static> {
    type Value<'tcx> = rustc_middle::ty::ConstConditions<'tcx>;
}
impl ParameterizedOverTcx for rustc_middle::ty::FnSig<'static> {
    type Value<'tcx> = rustc_middle::ty::FnSig<'tcx>;
}
impl ParameterizedOverTcx for rustc_middle::ty::GenericClauses<'static> {
    type Value<'tcx> = rustc_middle::ty::GenericClauses<'tcx>;
}
impl ParameterizedOverTcx for rustc_middle::ty::ImplTraitHeader<'static> {
    type Value<'tcx> = rustc_middle::ty::ImplTraitHeader<'tcx>;
}
impl ParameterizedOverTcx for rustc_middle::ty::TraitRef<'static> {
    type Value<'tcx> = rustc_middle::ty::TraitRef<'tcx>;
}
impl ParameterizedOverTcx for rustc_middle::ty::Ty<'static> {
    type Value<'tcx> = rustc_middle::ty::Ty<'tcx>;
}parameterized_over_tcx! {
163    // tidy-alphabetical-start
164    crate::rmeta::DefPathHashMapRef,
165    rustc_middle::middle::exported_symbols::ExportedSymbol,
166    rustc_middle::mir::Body,
167    rustc_middle::mir::CoroutineLayout,
168    rustc_middle::mir::interpret::ConstAllocation,
169    rustc_middle::ty::Clause,
170    rustc_middle::ty::Const,
171    rustc_middle::ty::ConstConditions,
172    rustc_middle::ty::FnSig,
173    rustc_middle::ty::GenericClauses,
174    rustc_middle::ty::ImplTraitHeader,
175    rustc_middle::ty::TraitRef,
176    rustc_middle::ty::Ty,
177    // tidy-alphabetical-end
178}