Preserve the intersection of disjoint numbers in match analysis #14550
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.
The use of provablyDisjoint is a way of simplifying an intersection of
two types into the Empty space, using type comparing logic. However,
for types like (42L: Long) and (it: Int) (a constant type and a term
ref, of two different number types) the two types are provably disjoint,
but that doesn't mean that a "case
it
=>" won't match a "42L"scrutinee. So we extend the logic to keep the intersection as it is
when numeric value types are in play.
Closes #14407