Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Backport: Fix isInstanceOf[Array[?]] returning true on non-Array #12108

Conversation

smarter
Copy link
Member

@smarter smarter commented Apr 15, 2021

This is a backport of #12103

Before this commit, the `MultiArrayOf(elem, ndims)` extractor used to
strip wildcards from the element type, this was surprising since it does
not match what the `ArrayOf(elem)` extractor does, and lead to a bug in
`TypeTestCasts.interceptTypeApply` which contains the following code:

case defn.MultiArrayOf(elem, ndims) if isGenericArrayElement(elem, isScala2 = false) =>

`isGenericArrayElement` returns false for `Any` but true for
`_ >: Nothing <: Any`, so the stripped wildcard means that this case was
skipped, resulting in:
    x.isInstanceOf[Array[?]]
being erased to:
    x.isInstanceOf[Object]
instead of:
    scala.runtime.ScalaRunTime.isArray(x, 1)

Fixed by tweaking `MultiArrayOf` to keep any final wildcard around like
`ArrayOf` does.
@smarter smarter added this to the 3.0.0-RC3 milestone Apr 15, 2021
@nicolasstucki nicolasstucki merged commit 45b8dc0 into scala:release-3.0.0 Apr 16, 2021
@nicolasstucki nicolasstucki deleted the backport-fix-isInstanceOf-array branch April 16, 2021 07:49
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.

None yet

2 participants