Skip to content

Commit 55a63e9

Browse files
committed
Add Copy/Sized clauses for arrays
1 parent 28b92c6 commit 55a63e9

File tree

2 files changed

+15
-3
lines changed

2 files changed

+15
-3
lines changed

chalk-solve/src/clauses/builtin_traits/copy.rs

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ use crate::clauses::builtin_traits::needs_impl_for_tys;
22
use crate::clauses::ClauseBuilder;
33
use crate::{Interner, RustIrDatabase, TraitRef};
44
use chalk_ir::{ApplicationTy, Substitution, TyData, TypeName};
5+
use std::iter;
56

67
fn push_tuple_copy_conditions<I: Interner>(
78
db: &dyn RustIrDatabase<I>,
@@ -41,6 +42,15 @@ pub fn add_copy_program_clauses<I: Interner>(
4142
TypeName::Tuple(arity) => {
4243
push_tuple_copy_conditions(db, builder, trait_ref, *arity, substitution)
4344
}
45+
TypeName::Array => {
46+
let interner = db.interner();
47+
needs_impl_for_tys(
48+
db,
49+
builder,
50+
trait_ref,
51+
iter::once(substitution.at(interner, 0).assert_ty_ref(interner).clone()),
52+
);
53+
}
4454
_ => return,
4555
},
4656
TyData::Function(_) => builder.push_fact(trait_ref.clone()),

chalk-solve/src/clauses/builtin_traits/sized.rs

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -74,9 +74,11 @@ pub fn add_sized_program_clauses<I: Interner>(
7474
TypeName::Tuple(arity) => {
7575
push_tuple_sized_conditions(db, builder, trait_ref, *arity, substitution)
7676
}
77-
TypeName::Never | TypeName::Scalar(_) | TypeName::Raw(_) | TypeName::Ref(_) => {
78-
builder.push_fact(trait_ref.clone())
79-
}
77+
TypeName::Array
78+
| TypeName::Never
79+
| TypeName::Scalar(_)
80+
| TypeName::Raw(_)
81+
| TypeName::Ref(_) => builder.push_fact(trait_ref.clone()),
8082
_ => return,
8183
},
8284
TyData::Function(_) => builder.push_fact(trait_ref.clone()),

0 commit comments

Comments
 (0)