Unnamed repository; edit this file 'description' to name the repository.
Diffstat (limited to 'crates/hir-ty/src/next_solver/util.rs')
-rw-r--r--crates/hir-ty/src/next_solver/util.rs31
1 files changed, 21 insertions, 10 deletions
diff --git a/crates/hir-ty/src/next_solver/util.rs b/crates/hir-ty/src/next_solver/util.rs
index 9a1b476976..c175062bda 100644
--- a/crates/hir-ty/src/next_solver/util.rs
+++ b/crates/hir-ty/src/next_solver/util.rs
@@ -13,13 +13,16 @@ use rustc_type_ir::{
solve::SizedTraitKind,
};
-use crate::next_solver::{
- BoundConst, FxIndexMap, ParamEnv, Placeholder, PlaceholderConst, PlaceholderRegion,
- PolyTraitRef,
- infer::{
- InferCtxt,
- traits::{Obligation, ObligationCause, PredicateObligation},
+use crate::{
+ next_solver::{
+ BoundConst, FxIndexMap, ParamEnv, Placeholder, PlaceholderConst, PlaceholderRegion,
+ PolyTraitRef,
+ infer::{
+ InferCtxt,
+ traits::{Obligation, ObligationCause, PredicateObligation},
+ },
},
+ representability::Representability,
};
use super::{
@@ -419,10 +422,18 @@ pub fn sizedness_constraint_for_ty<'db>(
.next_back()
.and_then(|ty| sizedness_constraint_for_ty(interner, sizedness, ty)),
- Adt(adt, args) => adt.struct_tail_ty(interner).and_then(|tail_ty| {
- let tail_ty = tail_ty.instantiate(interner, args);
- sizedness_constraint_for_ty(interner, sizedness, tail_ty)
- }),
+ Adt(adt, args) => {
+ if crate::representability::representability(interner.db, adt.def_id().0)
+ == Representability::Infinite
+ {
+ return None;
+ }
+
+ adt.struct_tail_ty(interner).and_then(|tail_ty| {
+ let tail_ty = tail_ty.instantiate(interner, args);
+ sizedness_constraint_for_ty(interner, sizedness, tail_ty)
+ })
+ }
Placeholder(..) | Bound(..) | Infer(..) => {
panic!("unexpected type `{ty:?}` in sizedness_constraint_for_ty")