[llvm] [AssumptionCache] Fix removeAffectedValues() when value is repeated in AssumeInst (PR #205275)
Nikolas Klauser via llvm-commits
llvm-commits at lists.llvm.org
Tue Jun 23 23:54:33 PDT 2026
================
@@ -129,15 +146,28 @@ void AssumptionCache::removeAffectedValues(AssumeInst *CI) {
if (Elem.Assume == CI) {
Found = true;
Elem.Assume = nullptr;
+
+ ExpectedMatches[AV.Assume]--;
+ assert(ExpectedMatches[AV.Assume] >= 0);
+ // After ExpectedMatches[AV.Assume] == 0, we still need to iterate
+ // through this loop to determine the value of HasNonnull, to avoid
+ // prematurely calling AffectedValues.erase(AVI).
}
HasNonnull |= !!Elem.Assume;
if (HasNonnull && Found)
break;
}
- assert(Found && "already unregistered or incorrect cache state");
+
+ if (ExpectedMatches[AV.Assume] > 0)
+ assert(Found && "already unregistered or incorrect cache state");
+
if (!HasNonnull)
AffectedValues.erase(AVI);
}
+
+ for (auto &AV : Affected)
+ assert(!ExpectedMatches[AV.Assume] &&
+ "already unregistered or incorrect cache state");
----------------
philnik777 wrote:
```suggestion
assert(none_of(Affected, [&](auto& AV) { return ExpectedMatches[AV.Assume]; }) &&
"already unregistered or incorrect cache state");
```
https://github.com/llvm/llvm-project/pull/205275
More information about the llvm-commits
mailing list