Unnamed repository; edit this file 'description' to name the repository.
Fix variance
This one does need fixpoint.
Chayim Refael Friedman 2025-04-22
parent 57c019a · commit 547c124
-rw-r--r--crates/hir-ty/src/variance.rs10
1 files changed, 3 insertions, 7 deletions
diff --git a/crates/hir-ty/src/variance.rs b/crates/hir-ty/src/variance.rs
index 4053982788..4e9aa5610a 100644
--- a/crates/hir-ty/src/variance.rs
+++ b/crates/hir-ty/src/variance.rs
@@ -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]
"#]],
);
}