diff options
| author | Florian Diebold <flodiebold@gmail.com> | 2024-11-10 18:35:41 +0100 |
|---|---|---|
| committer | jackh726 <git@jackhuey.me> | 2025-08-07 15:16:12 +0000 |
| commit | 29799c2e21a9d6f946283ce6298a43d24716acdc (patch) | |
| tree | d753f16df18450d267c6d37de380f309fd520233 | |
| parent | 4ff22ddc9d0bec9b12a4a878ef4c4a89297081da (diff) | |
| download | rust-29799c2e21a9d6f946283ce6298a43d24716acdc.tar.gz rust-29799c2e21a9d6f946283ce6298a43d24716acdc.zip | |
Add a missing UpcastFrom impl in rustc_type_ir
| -rw-r--r-- | compiler/rustc_middle/src/ty/predicate.rs | 12 | ||||
| -rw-r--r-- | compiler/rustc_type_ir/src/const_kind.rs | 28 | ||||
| -rw-r--r-- | compiler/rustc_type_ir/src/predicate.rs | 9 |
3 files changed, 17 insertions, 32 deletions
diff --git a/compiler/rustc_middle/src/ty/predicate.rs b/compiler/rustc_middle/src/ty/predicate.rs index 73a6f1829af..59e00f85957 100644 --- a/compiler/rustc_middle/src/ty/predicate.rs +++ b/compiler/rustc_middle/src/ty/predicate.rs @@ -6,8 +6,7 @@ use rustc_macros::{HashStable, extension}; use rustc_type_ir as ir; use crate::ty::{ - self, DebruijnIndex, EarlyBinder, PredicatePolarity, Ty, TyCtxt, TypeFlags, Upcast, UpcastFrom, - WithCachedTypeInfo, + self, DebruijnIndex, EarlyBinder, Ty, TyCtxt, TypeFlags, Upcast, UpcastFrom, WithCachedTypeInfo, }; pub type TraitRef<'tcx> = ir::TraitRef<TyCtxt<'tcx>>; @@ -536,15 +535,6 @@ impl<'tcx> UpcastFrom<TyCtxt<'tcx>, ty::Binder<'tcx, TraitRef<'tcx>>> for Clause } } -impl<'tcx> UpcastFrom<TyCtxt<'tcx>, ty::Binder<'tcx, TraitRef<'tcx>>> for PolyTraitPredicate<'tcx> { - fn upcast_from(from: ty::Binder<'tcx, TraitRef<'tcx>>, _tcx: TyCtxt<'tcx>) -> Self { - from.map_bound(|trait_ref| TraitPredicate { - trait_ref, - polarity: PredicatePolarity::Positive, - }) - } -} - impl<'tcx> UpcastFrom<TyCtxt<'tcx>, TraitPredicate<'tcx>> for Predicate<'tcx> { fn upcast_from(from: TraitPredicate<'tcx>, tcx: TyCtxt<'tcx>) -> Self { PredicateKind::Clause(ClauseKind::Trait(from)).upcast(tcx) diff --git a/compiler/rustc_type_ir/src/const_kind.rs b/compiler/rustc_type_ir/src/const_kind.rs index 327a6671a46..4be38d4e702 100644 --- a/compiler/rustc_type_ir/src/const_kind.rs +++ b/compiler/rustc_type_ir/src/const_kind.rs @@ -7,10 +7,7 @@ use rustc_data_structures::stable_hasher::{HashStable, StableHasher}; use rustc_macros::{Decodable_NoContext, Encodable_NoContext, HashStable_NoContext}; use rustc_type_ir_macros::{Lift_Generic, TypeFoldable_Generic, TypeVisitable_Generic}; -use crate::{ - self as ty, DebruijnIndex, FallibleTypeFolder, Interner, TypeFoldable, TypeFolder, - TypeVisitable, TypeVisitor, VisitorResult, -}; +use crate::{self as ty, DebruijnIndex, Interner}; /// Represents a constant in Rust. #[derive_where(Clone, Copy, Hash, PartialEq, Eq; I: Interner)] @@ -95,10 +92,15 @@ rustc_index::newtype_index! { /// An inference variable for a const, for use in const generics. #[derive(Copy, Clone, Eq, PartialEq, PartialOrd, Ord, Hash)] +#[derive(TypeVisitable_Generic, TypeFoldable_Generic)] #[cfg_attr(feature = "nightly", derive(Encodable_NoContext, Decodable_NoContext))] pub enum InferConst { /// Infer the value of the const. - Var(ConstVid), + Var( + #[type_foldable(identity)] + #[type_visitable(ignore)] + ConstVid, + ), /// A fresh const variable. See `infer::freshen` for more details. Fresh(u32), } @@ -123,19 +125,3 @@ impl<CTX> HashStable<CTX> for InferConst { } } } - -impl<I: Interner> TypeFoldable<I> for InferConst { - fn try_fold_with<F: FallibleTypeFolder<I>>(self, _folder: &mut F) -> Result<Self, F::Error> { - Ok(self) - } - - fn fold_with<F: TypeFolder<I>>(self, _folder: &mut F) -> Self { - self - } -} - -impl<I: Interner> TypeVisitable<I> for InferConst { - fn visit_with<V: TypeVisitor<I>>(&self, _visitor: &mut V) -> V::Result { - V::Result::output() - } -} diff --git a/compiler/rustc_type_ir/src/predicate.rs b/compiler/rustc_type_ir/src/predicate.rs index c9489c98cce..9e4447ccd99 100644 --- a/compiler/rustc_type_ir/src/predicate.rs +++ b/compiler/rustc_type_ir/src/predicate.rs @@ -184,6 +184,15 @@ impl<I: Interner> UpcastFrom<I, TraitRef<I>> for TraitPredicate<I> { } } +impl<I: Interner> UpcastFrom<I, ty::Binder<I, TraitRef<I>>> for ty::Binder<I, TraitPredicate<I>> { + fn upcast_from(from: ty::Binder<I, TraitRef<I>>, _tcx: I) -> Self { + from.map_bound(|trait_ref| TraitPredicate { + trait_ref, + polarity: PredicatePolarity::Positive, + }) + } +} + impl<I: Interner> fmt::Debug for TraitPredicate<I> { fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result { write!(f, "TraitPredicate({:?}, polarity:{:?})", self.trait_ref, self.polarity) |
