Skip to content

Conversation

nox213
Copy link
Contributor

@nox213 nox213 commented Sep 12, 2025

closes #23620

If opaques type have upper bounds, use it for exhaustivity and reachability checks

classSym.is(Case) ||
(tpw.isInstanceOf[TypeRef] && {
val tref = tpw.asInstanceOf[TypeRef]
tref.symbol.isOpaqueAlias && !tref.info.hiBound.isNothingType
Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Should I extract this logic into a separate function? If so, where would be a good place to put it?

else NoType
}.filter(_.exists)
parts
case tref: TypeRef if tref.symbol.isOpaqueAlias && !tref.info.hiBound.isNothingType =>
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

None of this logic should be limited to opaque type aliases. It should work also for abstract type members, or not work for either. From the outside of its scope, an opaque type alias is an abstract type member. It makes no sense to treat them differently in this situation.

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

c70aaa3
Is this correct?

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Seems correct to me, as far as that comment is concerned.

I cannot vouch for the whole PR. I am not familiar with pattern-match analysis.

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I see, thank you for the review.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

False pattern match not exhaustive for union types + opaque types
4 participants