about summary refs log tree commit diff
diff options
context:
space:
mode:
-rw-r--r--src/tools/rust-analyzer/crates/salsa/src/derived.rs3
-rw-r--r--src/tools/rust-analyzer/crates/salsa/src/derived/slot.rs6
2 files changed, 8 insertions, 1 deletions
diff --git a/src/tools/rust-analyzer/crates/salsa/src/derived.rs b/src/tools/rust-analyzer/crates/salsa/src/derived.rs
index c0d4d674f70..8b2fdd6b19c 100644
--- a/src/tools/rust-analyzer/crates/salsa/src/derived.rs
+++ b/src/tools/rust-analyzer/crates/salsa/src/derived.rs
@@ -43,6 +43,7 @@ where
 impl<Q> DerivedStorage<Q>
 where
     Q: QueryFunction,
+    Q::Value: Eq,
 {
     fn slot(&self, key: &Q::Key) -> Arc<Slot<Q>> {
         if let Some(v) = self.slot_map.read().get(key) {
@@ -64,6 +65,7 @@ where
 impl<Q> QueryStorageOps<Q> for DerivedStorage<Q>
 where
     Q: QueryFunction,
+    Q::Value: Eq,
 {
     const CYCLE_STRATEGY: crate::plumbing::CycleRecoveryStrategy = Q::CYCLE_STRATEGY;
 
@@ -139,6 +141,7 @@ where
 impl<Q> DerivedQueryStorageOps<Q> for DerivedStorage<Q>
 where
     Q: QueryFunction,
+    Q::Value: Eq,
 {
     fn invalidate<S>(&self, runtime: &mut Runtime, key: &S)
     where
diff --git a/src/tools/rust-analyzer/crates/salsa/src/derived/slot.rs b/src/tools/rust-analyzer/crates/salsa/src/derived/slot.rs
index b5c3d9f4f24..de7a3976074 100644
--- a/src/tools/rust-analyzer/crates/salsa/src/derived/slot.rs
+++ b/src/tools/rust-analyzer/crates/salsa/src/derived/slot.rs
@@ -94,6 +94,7 @@ enum MaybeChangedSinceProbeState<G> {
 impl<Q> Slot<Q>
 where
     Q: QueryFunction,
+    Q::Value: Eq,
 {
     pub(super) fn new(database_key_index: DatabaseKeyIndex) -> Self {
         Self {
@@ -270,7 +271,7 @@ where
             // used to be, that is a "breaking change" that our
             // consumers must be aware of. Becoming *more* durable
             // is not. See the test `constant_to_non_constant`.
-            if revisions.durability >= old_memo.revisions.durability {
+            if revisions.durability >= old_memo.revisions.durability && old_memo.value == value {
                 debug!(
                     "read_upgrade({:?}): value is equal, back-dating to {:?}",
                     self, old_memo.revisions.changed_at,
@@ -550,6 +551,7 @@ where
 struct PanicGuard<'me, Q>
 where
     Q: QueryFunction,
+    Q::Value: Eq,
 {
     slot: &'me Slot<Q>,
     runtime: &'me Runtime,
@@ -558,6 +560,7 @@ where
 impl<'me, Q> PanicGuard<'me, Q>
 where
     Q: QueryFunction,
+    Q::Value: Eq,
 {
     fn new(slot: &'me Slot<Q>, runtime: &'me Runtime) -> Self {
         Self { slot, runtime }
@@ -616,6 +619,7 @@ Please report this bug to https://github.com/salsa-rs/salsa/issues."
 impl<'me, Q> Drop for PanicGuard<'me, Q>
 where
     Q: QueryFunction,
+    Q::Value: Eq,
 {
     fn drop(&mut self) {
         if std::thread::panicking() {