rustc_middle/
arena.rs

1#![allow(rustc::usage_of_ty_tykind)]
2
3/// This higher-order macro declares a list of types which can be allocated by `Arena`.
4///
5/// Specifying the `decode` modifier will add decode impls for `&T` and `&[T]` where `T` is the type
6/// listed. These impls will appear in the implement_ty_decoder! macro.
7#[macro_export]
8macro_rules! arena_types {
9    ($macro:path) => (
10        $macro!([
11            [] layout: rustc_abi::LayoutData<rustc_abi::FieldIdx, rustc_abi::VariantIdx>,
12            [] fn_abi: rustc_target::callconv::FnAbi<'tcx, rustc_middle::ty::Ty<'tcx>>,
13            // AdtDef are interned and compared by address
14            [decode] adt_def: rustc_middle::ty::AdtDefData,
15            [] steal_thir: rustc_data_structures::steal::Steal<rustc_middle::thir::Thir<'tcx>>,
16            [] steal_mir: rustc_data_structures::steal::Steal<rustc_middle::mir::Body<'tcx>>,
17            [decode] mir: rustc_middle::mir::Body<'tcx>,
18            [] steal_promoted:
19                rustc_data_structures::steal::Steal<
20                    rustc_index::IndexVec<
21                        rustc_middle::mir::Promoted,
22                        rustc_middle::mir::Body<'tcx>
23                    >
24                >,
25            [decode] promoted:
26                rustc_index::IndexVec<
27                    rustc_middle::mir::Promoted,
28                    rustc_middle::mir::Body<'tcx>
29                >,
30            [decode] typeck_results: rustc_middle::ty::TypeckResults<'tcx>,
31            [decode] borrowck_result: rustc_middle::mir::BorrowCheckResult<'tcx>,
32            [] resolver: rustc_data_structures::steal::Steal<(
33                rustc_middle::ty::ResolverAstLowering,
34                std::sync::Arc<rustc_ast::Crate>,
35            )>,
36            [] crate_for_resolver: rustc_data_structures::steal::Steal<(rustc_ast::Crate, rustc_ast::AttrVec)>,
37            [] resolutions: rustc_middle::ty::ResolverGlobalCtxt,
38            [] const_allocs: rustc_middle::mir::interpret::Allocation,
39            [] region_scope_tree: rustc_middle::middle::region::ScopeTree,
40            // Required for the incremental on-disk cache
41            [] mir_keys: rustc_hir::def_id::DefIdSet,
42            [] dropck_outlives:
43                rustc_middle::infer::canonical::Canonical<'tcx,
44                    rustc_middle::infer::canonical::QueryResponse<'tcx,
45                        rustc_middle::traits::query::DropckOutlivesResult<'tcx>
46                    >
47                >,
48            [] normalize_canonicalized_projection_ty:
49                rustc_middle::infer::canonical::Canonical<'tcx,
50                    rustc_middle::infer::canonical::QueryResponse<'tcx,
51                        rustc_middle::traits::query::NormalizationResult<'tcx>
52                    >
53                >,
54            [] implied_outlives_bounds:
55                rustc_middle::infer::canonical::Canonical<'tcx,
56                    rustc_middle::infer::canonical::QueryResponse<'tcx,
57                        Vec<rustc_middle::traits::query::OutlivesBound<'tcx>>
58                    >
59                >,
60            [] dtorck_constraint: rustc_middle::traits::query::DropckConstraint<'tcx>,
61            [] candidate_step: rustc_middle::traits::query::CandidateStep<'tcx>,
62            [] autoderef_bad_ty: rustc_middle::traits::query::MethodAutoderefBadTy<'tcx>,
63            [] query_region_constraints: rustc_middle::infer::canonical::QueryRegionConstraints<'tcx>,
64            [] type_op_subtype:
65                rustc_middle::infer::canonical::Canonical<'tcx,
66                    rustc_middle::infer::canonical::QueryResponse<'tcx, ()>
67                >,
68            [] type_op_normalize_poly_fn_sig:
69                rustc_middle::infer::canonical::Canonical<'tcx,
70                    rustc_middle::infer::canonical::QueryResponse<'tcx, rustc_middle::ty::PolyFnSig<'tcx>>
71                >,
72            [] type_op_normalize_fn_sig:
73                rustc_middle::infer::canonical::Canonical<'tcx,
74                    rustc_middle::infer::canonical::QueryResponse<'tcx, rustc_middle::ty::FnSig<'tcx>>
75                >,
76            [] type_op_normalize_clause:
77                rustc_middle::infer::canonical::Canonical<'tcx,
78                    rustc_middle::infer::canonical::QueryResponse<'tcx, rustc_middle::ty::Clause<'tcx>>
79                >,
80            [] type_op_normalize_ty:
81                rustc_middle::infer::canonical::Canonical<'tcx,
82                    rustc_middle::infer::canonical::QueryResponse<'tcx, rustc_middle::ty::Ty<'tcx>>
83                >,
84            [] effective_visibilities: rustc_middle::middle::privacy::EffectiveVisibilities,
85            [] upvars_mentioned: rustc_data_structures::fx::FxIndexMap<rustc_hir::HirId, rustc_hir::Upvar>,
86            [] dyn_compatibility_violations: rustc_middle::traits::DynCompatibilityViolation,
87            [] codegen_unit: rustc_middle::mir::mono::CodegenUnit<'tcx>,
88            [decode] attribute: rustc_hir::Attribute,
89            [] name_set: rustc_data_structures::unord::UnordSet<rustc_span::Symbol>,
90            [] autodiff_item: rustc_ast::expand::autodiff_attrs::AutoDiffItem,
91            [] ordered_name_set: rustc_data_structures::fx::FxIndexSet<rustc_span::Symbol>,
92            [] pats: rustc_middle::ty::PatternKind<'tcx>,
93            [] valtree: rustc_middle::ty::ValTreeKind<'tcx>,
94
95            // Note that this deliberately duplicates items in the `rustc_hir::arena`,
96            // since we need to allocate this type on both the `rustc_hir` arena
97            // (during lowering) and the `rustc_middle` arena (for decoding MIR)
98            [decode] asm_template: rustc_ast::InlineAsmTemplatePiece,
99            [decode] used_trait_imports: rustc_data_structures::unord::UnordSet<rustc_hir::def_id::LocalDefId>,
100            [decode] is_late_bound_map: rustc_data_structures::fx::FxIndexSet<rustc_hir::ItemLocalId>,
101            [decode] impl_source: rustc_middle::traits::ImplSource<'tcx, ()>,
102
103            [] dep_kind: rustc_middle::dep_graph::DepKindStruct<'tcx>,
104
105            [decode] trait_impl_trait_tys:
106                rustc_data_structures::unord::UnordMap<
107                    rustc_hir::def_id::DefId,
108                    rustc_middle::ty::EarlyBinder<'tcx, rustc_middle::ty::Ty<'tcx>>
109                >,
110            [] external_constraints: rustc_middle::traits::solve::ExternalConstraintsData<rustc_middle::ty::TyCtxt<'tcx>>,
111            [] predefined_opaques_in_body: rustc_middle::traits::solve::PredefinedOpaquesData<rustc_middle::ty::TyCtxt<'tcx>>,
112            [decode] doc_link_resolutions: rustc_hir::def::DocLinkResMap,
113            [] stripped_cfg_items: rustc_ast::expand::StrippedCfgItem,
114            [] mod_child: rustc_middle::metadata::ModChild,
115            [] features: rustc_feature::Features,
116            [decode] specialization_graph: rustc_middle::traits::specialization_graph::Graph,
117            [] crate_inherent_impls: rustc_middle::ty::CrateInherentImpls,
118            [] hir_owner_nodes: rustc_hir::OwnerNodes<'tcx>,
119        ]);
120    )
121}
122
123arena_types!(rustc_arena::declare_arena);