-
Notifications
You must be signed in to change notification settings - Fork 21
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
On JDK 21, ClassfileParser
doesn't handle MethodParameter
attributes without names
#12783
Comments
Thanks for the report — it's well timed, since there's likely still time for a fix to make the upcoming 2.13.11 release. |
not sure if |
for reference, scala/scala#4735 is where the support originally landed |
a quick way to reproduce the problem without involving sbt is simply to open the Scala REPL (using the default regardless, we should have a failing unit test that targets the issue specifically reminder to self: Scala 3 will need the same fix |
using |
or not... the problem affects the compiler itself, so any compiler on which this hypothetical unit test would fail, is a compiler that wouldn't even be able to compile the unit test |
I've been through the desert on an arg with no name. |
ClassfileParser
doesn't handle MethodParameter
attributes without names
they won't pass until we're using a Scala 3 release that has a fix for scala/bug#12783
this is a forward port of scala/scala#10397 (fixing scala/bug#12783, from which Scala 3 also suffers)
this is a forward port of scala/scala#10397 (fixing scala/bug#12783, from which Scala 3 also suffers) — the same fix we'll be shipping in 2.12.18 and 2.13.11 I haven't included a unit test, because * a similar change has already been well validated in a Scala 2 context * without this change, the compiler can't compile anything at all on JDK 21 * we need the reference compiler to include this change before we can bootstrap on JDK 21 anyway but I did manually test it locally, by bootstrapping on JDK 11, publishing the resulting compiler locally, and then launching the REPL and evaluating `2 + 2` on 3.3.0-RC6, that fails with: > error while loading AccessFlag, > class file /modules/java.base/java/lang/reflect/AccessFlag.class is broken, reading aborted with class java.lang.RuntimeException > bad constant pool index: 0 at pos: 5189 > error while loading ElementType, > class file /modules/java.base/java/lang/annotation/ElementType.class is broken, reading aborted with class java.lang.RuntimeException > bad constant pool index: 0 at pos: 1220 > 2 errors found whereas with this change, it succeeds.
this is a forward port of scala/scala#10397 (fixing scala/bug#12783, from which Scala 3 also suffers)
* Implement Verilog output stream `PanamaCIRCTConverter` * Truncate or pad when connecting ports with different widths * Use `scala.math.BigInt.bitLength` instead of our own `bitLength` * Use correct module name for instances * Binder introduces Firtool options * fix binder for JDK21 and firtool 1.67.0 refer to: - openjdk/jdk#13079 - llvm-project/circt dadf87b742f547840f6866beb50bdf46a76d3fed * fix for review * reformat * bump GitHub CI to JDK 21 and mill 0.11.5 * remove 2.13.0 to 2.13.10 for JDK21 in build.sc ref to: scala/bug#12783 --------- Co-authored-by: Jiuyang Liu <liu@jiuyang.me>
* Implement Verilog output stream `PanamaCIRCTConverter` * Truncate or pad when connecting ports with different widths * Use `scala.math.BigInt.bitLength` instead of our own `bitLength` * Use correct module name for instances * Binder introduces Firtool options * fix binder for JDK21 and firtool 1.67.0 refer to: - openjdk/jdk#13079 - llvm-project/circt dadf87b742f547840f6866beb50bdf46a76d3fed * fix for review * reformat * bump GitHub CI to JDK 21 and mill 0.11.5 * remove 2.13.0 to 2.13.10 for JDK21 in build.sc ref to: scala/bug#12783 --------- Co-authored-by: Jiuyang Liu <liu@jiuyang.me>
We'd added this to work around scala/bug#12783 , but sbt has taken the 2.12.18 upgrade now
I'm seeing
bad constant pool index: 0
crashes in scala with the latests OpenJDK 21 EA builds, with stack traces like:The latest JDK 21 EA builds contain some system classes with
MethodParameters
attributes that contain empty names. This change was caused by the fix for JDK-8292275: javac does not emit SYNTHETIC and MANDATED flags for parameters by default.This was allowed by the specification in earlier versions, but wasn't used in practice (at least by the JDK), and some class reading implementations made the assumption that the name was always present.
The relevant part of the JVMS is:
https://docs.oracle.com/javase/specs/jvms/se20/html/jvms-4.html#jvms-4.7.24
I think this is the logic that needs updating:
https://github.com/scala/scala/blob/0e30133df211bc383fb8c7b7f8f4162f514f5aad/src/compiler/scala/tools/nsc/symtab/classfile/ClassfileParser.scala#L843
The fix is probably something like:
The text was updated successfully, but these errors were encountered: