Fix #20897: Make Nothing ⋔ Nothing
, as per spec.
#21241
Merged
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.
derivesFrom
, used inprovablyDisjointClasses
, normally returnsfalse
when the receiver isNothing
. However, it returnstrue
if the right-hand-side happens to be exactlyNothing
as well. For the purpose of computingprovablyDisjoint
, that is not what we want.The root issue was that we let the previous algorithm handle
Nothing
like a class type, which it is in dotc but not in the spec. That led to this mistake.AnyKind
suffers a similar issue, but already had special-cases in various places to mitigate it.Instead of adding a new special-case for
Nothing
insideprovablyDisjointClasses
, we address the root issue. Now we deal withNothing
andAnyKind
early, before trying any of the code paths that handle (real) class types.