Fix variance

This one does need fixpoint.
This commit is contained in:
Chayim Refael Friedman 2025-04-18 06:56:10 +03:00
parent 57c019a3c5
commit 547c124c05

View file

@ -57,11 +57,11 @@ pub(crate) fn variances_of(db: &dyn HirDatabase, def: GenericDefId) -> Option<Ar
pub(crate) fn variances_of_cycle_fn(
_db: &dyn HirDatabase,
result: &Option<Arc<[Variance]>>,
_result: &Option<Arc<[Variance]>>,
_count: u32,
_def: GenericDefId,
) -> CycleRecoveryAction<Option<Arc<[Variance]>>> {
CycleRecoveryAction::Fallback(result.clone())
CycleRecoveryAction::Iterate
}
pub(crate) fn variances_of_cycle_initial(
@ -961,16 +961,12 @@ struct S3<T>(S<T, T>);
#[test]
fn prove_fixedpoint() {
// FIXME: This is wrong, this should be `FixedPoint[T: covariant, U: covariant, V: covariant]`
// This is a limitation of current salsa where a cycle may only set a fallback value to the
// query result, but we need to solve a fixpoint here. The new salsa will have this
// fortunately.
check(
r#"
struct FixedPoint<T, U, V>(&'static FixedPoint<(), T, U>, V);
"#,
expect![[r#"
FixedPoint[T: bivariant, U: bivariant, V: bivariant]
FixedPoint[T: covariant, U: covariant, V: covariant]
"#]],
);
}