Skip to content

Commit c7019c1

Browse files
authored
Merge pull request #10397 from SethTisue/bug-12783
2 parents 2f2d4c6 + 52ce4b1 commit c7019c1

File tree

1 file changed

+8
-2
lines changed

1 file changed

+8
-2
lines changed

src/compiler/scala/tools/nsc/symtab/classfile/ClassfileParser.scala

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -825,7 +825,10 @@ abstract class ClassfileParser(reader: ReusableInstance[ReusableDataReader]) {
825825
val paramNameAccess = new Array[Int](paramCount)
826826
var i = 0
827827
while (i < paramCount) {
828-
paramNames(i) = pool.getExternalName(u2)
828+
paramNames(i) = u2() match {
829+
case 0 => null // may occur on JDK 21+, as per scala/bug#12783
830+
case index => pool.getExternalName(index)
831+
}
829832
paramNameAccess(i) = u2
830833
i += 1
831834
}
@@ -1248,6 +1251,7 @@ abstract class ClassfileParser(reader: ReusableInstance[ReusableDataReader]) {
12481251
sym setInfo createFromClonedSymbols(alias.initialize.typeParams, alias.tpe)(typeFun)
12491252
}
12501253
}
1254+
// on JDK 21+, `names` may include nulls, as per scala/bug#12783
12511255
private class ParamNames(val names: Array[NameOrString], val access: Array[Int]) {
12521256
assert(names.length == access.length)
12531257
def length = names.length
@@ -1351,8 +1355,10 @@ abstract class ClassfileParser(reader: ReusableInstance[ReusableDataReader]) {
13511355
case (i, param) =>
13521356
val isSynthetic = (paramNames.access(i) & ACC_SYNTHETIC) != 0
13531357
if (!isSynthetic) {
1354-
param.name = paramNames.names(i).name.toTermName.encode
13551358
param.resetFlag(SYNTHETIC)
1359+
val nameOrString = paramNames.names(i)
1360+
if (nameOrString != null)
1361+
param.name = nameOrString.name.toTermName.encode
13561362
}
13571363
}
13581364
// there's not anything we can do, but it's slightly worrisome

0 commit comments

Comments
 (0)
pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy