Skip to content

Commit d28678e

Browse files
committed
Clean up trivial traversal/lift impl generator macro calls.
We have four macros for generating trivial traversal (fold/visit) and lift impls. - `rustc_ir::TrivialTypeTraversalImpls` - `rustc_middle::TrivialTypeTraversalImpls` - `rustc_middle::TrivialLiftImpls` - `rustc_middle::TrivialTypeTraversalAndLiftImpls` The first two are very similar. The last one just combines the second and third one. The macros themselves are ok, but their use is a mess. This commit does the following. - Removes types that no longer need a lift and/or traversal impl from the macro calls. - Consolidates the macro calls into the smallest number of calls possible, with each one mentioning as many types as possible. - Orders the types within those macro calls alphabetically, and makes the module qualification more consistent. - Eliminates `rustc_middle::mir::type_foldable`, because the macro calls were merged and the manual `TypeFoldable` impls are better placed in `structural_impls.rs`, alongside all the other ones. This makes the code more concise. Moving forward, it also makes it more obvious where new types should be added.
1 parent e5f11af commit d28678e

File tree

11 files changed

+100
-151
lines changed

11 files changed

+100
-151
lines changed

Diff for: compiler/rustc_middle/src/infer/canonical.rs

-4
Original file line numberDiff line numberDiff line change
@@ -142,10 +142,6 @@ impl<'tcx, R> QueryResponse<'tcx, R> {
142142
pub type QueryOutlivesConstraint<'tcx> =
143143
(ty::OutlivesPredicate<'tcx, GenericArg<'tcx>>, ConstraintCategory<'tcx>);
144144

145-
TrivialTypeTraversalImpls! {
146-
crate::infer::canonical::Certainty,
147-
}
148-
149145
#[derive(Default)]
150146
pub struct CanonicalParamEnvCache<'tcx> {
151147
map: Lock<

Diff for: compiler/rustc_middle/src/mir/basic_blocks.rs

+1
Original file line numberDiff line numberDiff line change
@@ -163,6 +163,7 @@ impl<'tcx> graph::Predecessors for BasicBlocks<'tcx> {
163163
}
164164
}
165165

166+
// Done here instead of in `structural_impls.rs` because `Cache` is private, as is `basic_blocks`.
166167
TrivialTypeTraversalImpls! { Cache }
167168

168169
impl<S: Encoder> Encodable<S> for Cache {

Diff for: compiler/rustc_middle/src/mir/interpret/error.rs

-2
Original file line numberDiff line numberDiff line change
@@ -95,8 +95,6 @@ impl From<ReportedErrorInfo> for ErrorGuaranteed {
9595
}
9696
}
9797

98-
TrivialTypeTraversalImpls! { ErrorHandled }
99-
10098
pub type EvalToAllocationRawResult<'tcx> = Result<ConstAlloc<'tcx>, ErrorHandled>;
10199
pub type EvalStaticInitializerRawResult<'tcx> = Result<ConstAllocation<'tcx>, ErrorHandled>;
102100
pub type EvalToConstValueResult<'tcx> = Result<ConstValue<'tcx>, ErrorHandled>;

Diff for: compiler/rustc_middle/src/mir/mod.rs

-4
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,6 @@ use self::visit::TyContext;
3434
use crate::mir::interpret::{AllocRange, Scalar};
3535
use crate::mir::visit::MirVisitable;
3636
use crate::ty::codec::{TyDecoder, TyEncoder};
37-
use crate::ty::fold::{FallibleTypeFolder, TypeFoldable};
3837
use crate::ty::print::{FmtPrinter, Printer, pretty_print_const, with_no_trimmed_paths};
3938
use crate::ty::visit::TypeVisitableExt;
4039
use crate::ty::{
@@ -59,7 +58,6 @@ pub mod tcx;
5958
mod terminator;
6059

6160
pub mod traversal;
62-
mod type_foldable;
6361
pub mod visit;
6462

6563
pub use consts::*;
@@ -927,8 +925,6 @@ pub enum BindingForm<'tcx> {
927925
RefForGuard,
928926
}
929927

930-
TrivialTypeTraversalImpls! { BindingForm<'tcx> }
931-
932928
mod binding_form_impl {
933929
use rustc_data_structures::stable_hasher::{HashStable, StableHasher};
934930
use rustc_query_system::ich::StableHashingContext;

Diff for: compiler/rustc_middle/src/mir/type_foldable.rs

-67
This file was deleted.

Diff for: compiler/rustc_middle/src/traits/mod.rs

-4
Original file line numberDiff line numberDiff line change
@@ -427,10 +427,6 @@ pub enum IsConstable {
427427
Ctor,
428428
}
429429

430-
TrivialTypeTraversalAndLiftImpls! {
431-
IsConstable,
432-
}
433-
434430
/// The 'location' at which we try to perform HIR-based wf checking.
435431
/// This information is used to obtain an `hir::Ty`, which
436432
/// we can walk in order to obtain precise spans for any

Diff for: compiler/rustc_middle/src/traits/select.rs

-2
Original file line numberDiff line numberDiff line change
@@ -260,8 +260,6 @@ impl From<ErrorGuaranteed> for OverflowError {
260260
}
261261
}
262262

263-
TrivialTypeTraversalImpls! { OverflowError }
264-
265263
impl<'tcx> From<OverflowError> for SelectionError<'tcx> {
266264
fn from(overflow_error: OverflowError) -> SelectionError<'tcx> {
267265
match overflow_error {

Diff for: compiler/rustc_middle/src/ty/abstract_const.rs

-2
Original file line numberDiff line numberDiff line change
@@ -30,8 +30,6 @@ impl From<ErrorGuaranteed> for NotConstEvaluatable {
3030
}
3131
}
3232

33-
TrivialTypeTraversalImpls! { NotConstEvaluatable }
34-
3533
pub type BoundAbstractConst<'tcx> =
3634
Result<Option<EarlyBinder<'tcx, ty::Const<'tcx>>>, ErrorGuaranteed>;
3735

Diff for: compiler/rustc_middle/src/ty/context.rs

+5-9
Original file line numberDiff line numberDiff line change
@@ -76,11 +76,11 @@ use crate::traits::solve::{
7676
};
7777
use crate::ty::predicate::ExistentialPredicateStableCmpExt as _;
7878
use crate::ty::{
79-
self, AdtDef, AdtDefData, AdtKind, Binder, BoundConstness, Clause, Clauses, Const, GenericArg,
80-
GenericArgs, GenericArgsRef, GenericParamDefKind, ImplPolarity, List, ListWithCachedTypeInfo,
81-
ParamConst, ParamTy, Pattern, PatternKind, PolyExistentialPredicate, PolyFnSig, Predicate,
82-
PredicateKind, PredicatePolarity, Region, RegionKind, ReprOptions, TraitObjectVisitor, Ty,
83-
TyKind, TyVid, Visibility,
79+
self, AdtDef, AdtDefData, AdtKind, Binder, Clause, Clauses, Const, GenericArg, GenericArgs,
80+
GenericArgsRef, GenericParamDefKind, List, ListWithCachedTypeInfo, ParamConst, ParamTy,
81+
Pattern, PatternKind, PolyExistentialPredicate, PolyFnSig, Predicate, PredicateKind,
82+
PredicatePolarity, Region, RegionKind, ReprOptions, TraitObjectVisitor, Ty, TyKind, TyVid,
83+
Visibility,
8484
};
8585

8686
#[allow(rustc::usage_of_ty_tykind)]
@@ -2279,10 +2279,6 @@ macro_rules! nop_slice_lift {
22792279

22802280
nop_slice_lift! {ty::ValTree<'a> => ty::ValTree<'tcx>}
22812281

2282-
TrivialLiftImpls! {
2283-
ImplPolarity, PredicatePolarity, Promoted, BoundConstness,
2284-
}
2285-
22862282
macro_rules! sty_debug_print {
22872283
($fmt: expr, $ctxt: expr, $($variant: ident),*) => {{
22882284
// Curious inner module to allow variant names to be used as

Diff for: compiler/rustc_middle/src/ty/structural_impls.rs

+92-46
Original file line numberDiff line numberDiff line change
@@ -6,15 +6,18 @@
66
use std::fmt::{self, Debug};
77

88
use rustc_abi::TyAndLayout;
9+
use rustc_ast::InlineAsmTemplatePiece;
910
use rustc_ast_ir::try_visit;
1011
use rustc_ast_ir::visit::VisitorResult;
1112
use rustc_hir::def::Namespace;
13+
use rustc_hir::def_id::LocalDefId;
14+
use rustc_span::Span;
1215
use rustc_span::source_map::Spanned;
1316
use rustc_type_ir::ConstKind;
1417

1518
use super::print::PrettyPrinter;
1619
use super::{GenericArg, GenericArgKind, Pattern, Region};
17-
use crate::mir::interpret;
20+
use crate::mir::PlaceElem;
1821
use crate::ty::fold::{FallibleTypeFolder, TypeFoldable, TypeSuperFoldable};
1922
use crate::ty::print::{FmtPrinter, Printer, with_no_trimmed_paths};
2023
use crate::ty::visit::{TypeSuperVisitable, TypeVisitable, TypeVisitor};
@@ -221,76 +224,83 @@ impl<'tcx> fmt::Debug for Region<'tcx> {
221224
// copy...), just add them to one of these lists as appropriate.
222225

223226
// For things for which the type library provides traversal implementations
224-
// for all Interners, we only need to provide a Lift implementation:
227+
// for all Interners, we only need to provide a Lift implementation.
225228
TrivialLiftImpls! {
226-
(),
227-
bool,
228-
usize,
229-
u64,
229+
(),
230+
bool,
231+
usize,
232+
u64,
233+
crate::mir::Promoted,
234+
crate::mir::interpret::AllocId,
235+
crate::mir::interpret::Scalar,
236+
rustc_abi::ExternAbi,
237+
rustc_abi::Size,
238+
rustc_hir::Safety,
239+
rustc_type_ir::BoundConstness,
240+
rustc_type_ir::PredicatePolarity,
230241
}
231242

232243
// For some things about which the type library does not know, or does not
233244
// provide any traversal implementations, we need to provide a traversal
234245
// implementation (only for TyCtxt<'_> interners).
235246
TrivialTypeTraversalImpls! {
236-
::rustc_abi::FieldIdx,
237-
::rustc_abi::VariantIdx,
238-
crate::middle::region::Scope,
239-
::rustc_ast::InlineAsmOptions,
240-
::rustc_ast::InlineAsmTemplatePiece,
241-
::rustc_ast::NodeId,
242-
::rustc_hir::def::Res,
243-
::rustc_hir::def_id::LocalDefId,
244-
::rustc_hir::ByRef,
245-
::rustc_hir::HirId,
246-
::rustc_hir::MatchSource,
247-
::rustc_target::asm::InlineAsmRegOrRegClass,
248-
crate::mir::coverage::BlockMarkerId,
249-
crate::mir::coverage::CounterId,
250-
crate::mir::coverage::ExpressionId,
251-
crate::mir::coverage::ConditionId,
247+
crate::infer::canonical::Certainty,
248+
crate::mir::BasicBlock,
249+
crate::mir::BindingForm<'tcx>,
250+
crate::mir::BlockTailInfo,
251+
crate::mir::BorrowKind,
252+
crate::mir::CastKind,
253+
crate::mir::ConstValue<'tcx>,
254+
crate::mir::CoroutineSavedLocal,
255+
crate::mir::FakeReadCause,
252256
crate::mir::Local,
257+
crate::mir::MirPhase,
258+
crate::mir::NullOp<'tcx>,
253259
crate::mir::Promoted,
254-
crate::ty::adjustment::AutoBorrowMutability,
260+
crate::mir::RawPtrKind,
261+
crate::mir::RetagKind,
262+
crate::mir::SourceInfo,
263+
crate::mir::SourceScope,
264+
crate::mir::SourceScopeLocalData,
265+
crate::mir::SwitchTargets,
266+
crate::traits::IsConstable,
267+
crate::traits::OverflowError,
255268
crate::ty::AdtKind,
256-
crate::ty::BoundRegion,
257-
// Including `BoundRegionKind` is a *bit* dubious, but direct
258-
// references to bound region appear in `ty::Error`, and aren't
259-
// really meant to be folded. In general, we can only fold a fully
260-
// general `Region`.
261-
crate::ty::BoundRegionKind,
262269
crate::ty::AssocItem,
263270
crate::ty::AssocKind,
271+
crate::ty::BoundRegion,
272+
crate::ty::BoundVar,
264273
crate::ty::Placeholder<crate::ty::BoundRegion>,
265274
crate::ty::Placeholder<crate::ty::BoundTy>,
266275
crate::ty::Placeholder<ty::BoundVar>,
267-
crate::ty::LateParamRegion,
276+
crate::ty::UserTypeAnnotationIndex,
277+
crate::ty::ValTree<'tcx>,
278+
crate::ty::abstract_const::NotConstEvaluatable,
279+
crate::ty::adjustment::AutoBorrowMutability,
268280
crate::ty::adjustment::PointerCoercion,
269-
::rustc_span::Ident,
270-
::rustc_span::Span,
271-
::rustc_span::Symbol,
272-
ty::BoundVar,
273-
ty::ValTree<'tcx>,
281+
rustc_abi::FieldIdx,
282+
rustc_abi::VariantIdx,
283+
rustc_ast::InlineAsmOptions,
284+
rustc_ast::InlineAsmTemplatePiece,
285+
rustc_hir::CoroutineKind,
286+
rustc_hir::HirId,
287+
rustc_hir::MatchSource,
288+
rustc_hir::def_id::LocalDefId,
289+
rustc_span::Ident,
290+
rustc_span::Span,
291+
rustc_span::Symbol,
292+
rustc_target::asm::InlineAsmRegOrRegClass,
274293
}
294+
275295
// For some things about which the type library does not know, or does not
276296
// provide any traversal implementations, we need to provide a traversal
277297
// implementation and a lift implementation (the former only for TyCtxt<'_>
278298
// interners).
279299
TrivialTypeTraversalAndLiftImpls! {
280-
::rustc_hir::def_id::DefId,
281-
crate::ty::ClosureKind,
282300
crate::ty::ParamConst,
283301
crate::ty::ParamTy,
284302
crate::ty::instance::ReifyReason,
285-
interpret::AllocId,
286-
interpret::CtfeProvenance,
287-
interpret::Scalar,
288-
rustc_abi::Size,
289-
}
290-
291-
TrivialLiftImpls! {
292-
::rustc_hir::Safety,
293-
::rustc_abi::ExternAbi,
303+
rustc_hir::def_id::DefId,
294304
}
295305

296306
///////////////////////////////////////////////////////////////////////////
@@ -672,3 +682,39 @@ impl<'tcx, T: TypeFoldable<TyCtxt<'tcx>> + Debug + Clone> TypeFoldable<TyCtxt<'t
672682
})
673683
}
674684
}
685+
686+
impl<'tcx> TypeFoldable<TyCtxt<'tcx>> for &'tcx [InlineAsmTemplatePiece] {
687+
fn try_fold_with<F: FallibleTypeFolder<TyCtxt<'tcx>>>(
688+
self,
689+
_folder: &mut F,
690+
) -> Result<Self, F::Error> {
691+
Ok(self)
692+
}
693+
}
694+
695+
impl<'tcx> TypeFoldable<TyCtxt<'tcx>> for &'tcx [Span] {
696+
fn try_fold_with<F: FallibleTypeFolder<TyCtxt<'tcx>>>(
697+
self,
698+
_folder: &mut F,
699+
) -> Result<Self, F::Error> {
700+
Ok(self)
701+
}
702+
}
703+
704+
impl<'tcx> TypeFoldable<TyCtxt<'tcx>> for &'tcx ty::List<LocalDefId> {
705+
fn try_fold_with<F: FallibleTypeFolder<TyCtxt<'tcx>>>(
706+
self,
707+
_folder: &mut F,
708+
) -> Result<Self, F::Error> {
709+
Ok(self)
710+
}
711+
}
712+
713+
impl<'tcx> TypeFoldable<TyCtxt<'tcx>> for &'tcx ty::List<PlaceElem<'tcx>> {
714+
fn try_fold_with<F: FallibleTypeFolder<TyCtxt<'tcx>>>(
715+
self,
716+
folder: &mut F,
717+
) -> Result<Self, F::Error> {
718+
ty::util::fold_list(self, folder, |tcx, v| tcx.mk_place_elems(v))
719+
}
720+
}

Diff for: compiler/rustc_type_ir/src/macros.rs

+2-11
Original file line numberDiff line numberDiff line change
@@ -47,23 +47,14 @@ TrivialTypeTraversalImpls! {
4747
u16,
4848
u32,
4949
u64,
50-
String,
5150
crate::AliasRelationDirection,
52-
crate::AliasTyKind,
5351
crate::BoundConstness,
5452
crate::DebruijnIndex,
55-
crate::FloatTy,
56-
crate::InferTy,
57-
crate::IntVarValue,
5853
crate::PredicatePolarity,
59-
crate::RegionVid,
54+
crate::UniverseIndex,
55+
crate::Variance,
6056
crate::solve::BuiltinImplSource,
6157
crate::solve::Certainty,
6258
crate::solve::GoalSource,
63-
crate::solve::MaybeCause,
64-
crate::solve::NoSolution,
65-
crate::UniverseIndex,
66-
crate::Variance,
67-
rustc_ast_ir::Movability,
6859
rustc_ast_ir::Mutability,
6960
}

0 commit comments

Comments
 (0)