Skip to content

Commit 9592a2c

Browse files
committed
Auto merge of #759 - flodiebold:function-pointer-unification, r=nikomatsakis
Fix function pointers of different param counts unifying
2 parents 514ca40 + f7634ba commit 9592a2c

File tree

2 files changed

+13
-6
lines changed

2 files changed

+13
-6
lines changed

chalk-ir/src/zip.rs

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -525,12 +525,12 @@ impl<I: Interner> Zip<I> for FnSubst<I> {
525525
) -> Fallible<()> {
526526
let interner = zipper.interner();
527527
// Parameters
528-
for (a, b) in a.0.as_slice(interner)[..a.0.len(interner) - 1]
529-
.iter()
530-
.zip(b.0.as_slice(interner)[..b.0.len(interner) - 1].iter())
531-
{
532-
Zip::zip_with(zipper, variance.xform(Variance::Contravariant), a, b)?;
533-
}
528+
Zip::zip_with(
529+
zipper,
530+
variance.xform(Variance::Contravariant),
531+
&a.0.as_slice(interner)[..a.0.len(interner) - 1],
532+
&b.0.as_slice(interner)[..b.0.len(interner) - 1],
533+
)?;
534534
// Return type
535535
Zip::zip_with(
536536
zipper,

tests/test/unify.rs

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -149,6 +149,13 @@ fn forall_equality() {
149149
expect![["Unique"]]
150150
}
151151

152+
goal {
153+
// Function pointers with different parameters should not be equal.
154+
fn(u32): Eq<fn(u32, u32)>
155+
} yields {
156+
expect![["No possible solution"]]
157+
}
158+
152159
goal {
153160
// Variadic function pointers should not be equal to non-variadic fn pointers.
154161
fn(u8, ...): Eq<fn(u8)>

0 commit comments

Comments
 (0)