rustc_middle/
arena.rs

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