Intersection: code clean for intvalued
& fix stackoverflow caused by re-intersection of concrete var.
#49073
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Fix #49049 (comment)
The 1st commit cleans the usage of
intvalued
.For cases with
intvalued == 2
, we now records the correctoccurs_inv
(== 2), thus re-intersection would always happen.The 2nd commit makes
UnionAll
‘s re-intersection restore the bound change ifv.concrete
(just likevb.occurs_cov == 1 && !var_occurs_invariant(u->body, u->var, 0)
)This helps to avoid circular constraints and fix the added MWE.
Since v1.9 also has this problem, I think we'd better backport this.