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( pub(crate) fn variances_of_cycle_fn(
_db: &dyn HirDatabase, _db: &dyn HirDatabase,
result: &Option<Arc<[Variance]>>, _result: &Option<Arc<[Variance]>>,
_count: u32, _count: u32,
_def: GenericDefId, _def: GenericDefId,
) -> CycleRecoveryAction<Option<Arc<[Variance]>>> { ) -> CycleRecoveryAction<Option<Arc<[Variance]>>> {
CycleRecoveryAction::Fallback(result.clone()) CycleRecoveryAction::Iterate
} }
pub(crate) fn variances_of_cycle_initial( pub(crate) fn variances_of_cycle_initial(
@ -961,16 +961,12 @@ struct S3<T>(S<T, T>);
#[test] #[test]
fn prove_fixedpoint() { 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( check(
r#" r#"
struct FixedPoint<T, U, V>(&'static FixedPoint<(), T, U>, V); struct FixedPoint<T, U, V>(&'static FixedPoint<(), T, U>, V);
"#, "#,
expect![[r#" expect![[r#"
FixedPoint[T: bivariant, U: bivariant, V: bivariant] FixedPoint[T: covariant, U: covariant, V: covariant]
"#]], "#]],
); );
} }