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

ArrayIndexOutOfBoundsException at scala.tools.asm.ClassWriter.addType #10127

Closed
scabug opened this issue Dec 30, 2016 · 3 comments
Closed

ArrayIndexOutOfBoundsException at scala.tools.asm.ClassWriter.addType #10127

scabug opened this issue Dec 30, 2016 · 3 comments

Comments

@scabug
Copy link

scabug commented Dec 30, 2016

Scala compiler fails to compile the attached program (which is a bit long, yet
meaningful as it tests integer multiplication and division for all pairs of integers
between -10 and + 10). The following error messages are emitted:

natint.scala:62: warning: match may not be exhaustive.
It would fail on the following input: (Zero(), Succ(_))
(rec_x1, rec_x2) match {
^
error: java.lang.ArrayIndexOutOfBoundsException: -32768
	at scala.tools.asm.ClassWriter.addType(ClassWriter.java:1630)
	at scala.tools.asm.ClassWriter.addUninitializedType(ClassWriter.java:1605)
	at scala.tools.asm.Frame.execute(Frame.java:1213)
	at scala.tools.asm.MethodWriter.visitTypeInsn(MethodWriter.java:838)
	at scala.tools.nsc.backend.jvm.GenASM$JPlainBuilder.genObjsInstr$1(GenASM.scala:2342)
	at scala.tools.nsc.backend.jvm.GenASM$JPlainBuilder.scala$tools$nsc$backend$jvm$GenASM$JPlainBuilder$$genInstr$1(GenASM.scala:2347)
	at scala.tools.nsc.backend.jvm.GenASM$JPlainBuilder$$anonfun$genBlock$1$2.apply(GenASM.scala:2227)
	at scala.tools.nsc.backend.jvm.GenASM$JPlainBuilder$$anonfun$genBlock$1$2.apply(GenASM.scala:2213)
	at scala.collection.IndexedSeqOptimized$class.foreach(IndexedSeqOptimized.scala:33)
	at scala.collection.mutable.ArrayOps$ofRef.foreach(ArrayOps.scala:186)
	at scala.tools.nsc.backend.icode.BasicBlocks$BasicBlock.foreach(BasicBlocks.scala:195)
	at scala.tools.nsc.backend.jvm.GenASM$JPlainBuilder.genBlock$1(GenASM.scala:2213)
	at scala.tools.nsc.backend.jvm.GenASM$JPlainBuilder.genBlocks$1(GenASM.scala:2151)
	at scala.tools.nsc.backend.jvm.GenASM$JPlainBuilder.genCode(GenASM.scala:2746)
	at scala.tools.nsc.backend.jvm.GenASM$JPlainBuilder.genMethod(GenASM.scala:1471)
	at scala.tools.nsc.backend.jvm.GenASM$JPlainBuilder.genClass(GenASM.scala:1341)
	at scala.tools.nsc.backend.jvm.GenASM$AsmPhase.emitFor$1(GenASM.scala:198)
	at scala.tools.nsc.backend.jvm.GenASM$AsmPhase.run(GenASM.scala:204)
	at scala.tools.nsc.Global$Run.compileUnitsInternal(Global.scala:1501)
	at scala.tools.nsc.Global$Run.compileUnits(Global.scala:1486)
	at scala.tools.nsc.Global$Run.compileSources(Global.scala:1481)
	at scala.tools.nsc.Global$Run.compile(Global.scala:1582)
	at scala.tools.nsc.Driver.doCompile(Driver.scala:32)
	at scala.tools.nsc.MainClass.doCompile(Main.scala:23)
	at scala.tools.nsc.Driver.process(Driver.scala:51)
	at scala.tools.nsc.Driver.main(Driver.scala:64)
	at scala.tools.nsc.Main.main(Main.scala)
Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: -32768
	at scala.tools.asm.ClassWriter.addType(ClassWriter.java:1630)
	at scala.tools.asm.ClassWriter.addUninitializedType(ClassWriter.java:1605)
	at scala.tools.asm.Frame.execute(Frame.java:1213)
	at scala.tools.asm.MethodWriter.visitTypeInsn(MethodWriter.java:838)
	at scala.tools.nsc.backend.jvm.GenASM$JPlainBuilder.genObjsInstr$1(GenASM.scala:2342)
	at scala.tools.nsc.backend.jvm.GenASM$JPlainBuilder.scala$tools$nsc$backend$jvm$GenASM$JPlainBuilder$$genInstr$1(GenASM.scala:2347)
	at scala.tools.nsc.backend.jvm.GenASM$JPlainBuilder$$anonfun$genBlock$1$2.apply(GenASM.scala:2227)
	at scala.tools.nsc.backend.jvm.GenASM$JPlainBuilder$$anonfun$genBlock$1$2.apply(GenASM.scala:2213)
	at scala.collection.IndexedSeqOptimized$class.foreach(IndexedSeqOptimized.scala:33)
	at scala.collection.mutable.ArrayOps$ofRef.foreach(ArrayOps.scala:186)
	at scala.tools.nsc.backend.icode.BasicBlocks$BasicBlock.foreach(BasicBlocks.scala:195)
	at scala.tools.nsc.backend.jvm.GenASM$JPlainBuilder.genBlock$1(GenASM.scala:2213)
	at scala.tools.nsc.backend.jvm.GenASM$JPlainBuilder.genBlocks$1(GenASM.scala:2151)
	at scala.tools.nsc.backend.jvm.GenASM$JPlainBuilder.genCode(GenASM.scala:2746)
	at scala.tools.nsc.backend.jvm.GenASM$JPlainBuilder.genMethod(GenASM.scala:1471)
	at scala.tools.nsc.backend.jvm.GenASM$JPlainBuilder.genClass(GenASM.scala:1341)
	at scala.tools.nsc.backend.jvm.GenASM$AsmPhase.emitFor$1(GenASM.scala:198)
	at scala.tools.nsc.backend.jvm.GenASM$AsmPhase.run(GenASM.scala:204)
	at scala.tools.nsc.Global$Run.compileUnitsInternal(Global.scala:1501)
	at scala.tools.nsc.Global$Run.compileUnits(Global.scala:1486)
	at scala.tools.nsc.Global$Run.compileSources(Global.scala:1481)
	at scala.tools.nsc.Global$Run.compile(Global.scala:1582)
	at scala.tools.nsc.Driver.doCompile(Driver.scala:32)
	at scala.tools.nsc.MainClass.doCompile(Main.scala:23)
	at scala.tools.nsc.Driver.process(Driver.scala:51)
	at scala.tools.nsc.Driver.main(Driver.scala:64)
	at scala.tools.nsc.Main.main(Main.scala)
Exit [1]
48.20 user, 1.01 system, 25.64 elapsed -- Max VSize = 10076KB, Max RSS = 1900KB
@scabug
Copy link
Author

scabug commented Dec 30, 2016

Imported From: https://issues.scala-lang.org/browse/SI-10127?orig=1
Reporter: Hubert Garavel (hub)
Affected Versions: 2.11.8
Attachments:

  • natint.scala (created on Dec 30, 2016 9:23:41 AM UTC, 330121 bytes)

@scabug
Copy link
Author

scabug commented Dec 30, 2016

@SethTisue said:
You're probably hitting the JVM's hard limit on method size here. If so, there isn't really anything we can do (except improve the error message).

@scabug
Copy link
Author

scabug commented Dec 30, 2016

@som-snytt said:
The improvement on new backend or 2.12:

$ scalac211 -d /tmp -Ybackend:GenBCode natint.scala 
natint.scala:62: warning: match may not be exhaustive.
It would fail on the following input: (Zero(), Succ(_))
(rec_x1, rec_x2) match {
^
java.lang.ArrayIndexOutOfBoundsException: -32768
	at scala.tools.asm.ClassWriter.addType(ClassWriter.java:1630)
	at scala.tools.asm.ClassWriter.addUninitializedType(ClassWriter.java:1605)
	at scala.tools.asm.Frame.execute(Frame.java:1213)
	at scala.tools.asm.MethodWriter.visitTypeInsn(MethodWriter.java:838)
	at scala.tools.asm.tree.TypeInsnNode.accept(TypeInsnNode.java:83)
	at scala.tools.asm.tree.InsnList.accept(InsnList.java:162)
	at scala.tools.asm.tree.MethodNode.accept(MethodNode.java:817)
	at scala.tools.asm.tree.MethodNode.accept(MethodNode.java:727)
	at scala.tools.asm.tree.ClassNode.accept(ClassNode.java:412)
	at scala.tools.nsc.backend.jvm.GenBCode$BCodePhase$Worker2.getByteArray$1(GenBCode.scala:267)
	at scala.tools.nsc.backend.jvm.GenBCode$BCodePhase$Worker2.addToQ3(GenBCode.scala:274)
	at scala.tools.nsc.backend.jvm.GenBCode$BCodePhase$Worker2.run(GenBCode.scala:253)
	at scala.tools.nsc.backend.jvm.GenBCode$BCodePhase.buildAndSendToDisk(GenBCode.scala:360)
	at scala.tools.nsc.backend.jvm.GenBCode$BCodePhase.run(GenBCode.scala:326)
	at scala.tools.nsc.Global$Run.compileUnitsInternal(Global.scala:1501)
	at scala.tools.nsc.Global$Run.compileUnits(Global.scala:1486)
	at scala.tools.nsc.Global$Run.compileSources(Global.scala:1481)
	at scala.tools.nsc.Global$Run.compile(Global.scala:1582)
	at scala.tools.nsc.Driver.doCompile(Driver.scala:32)
	at scala.tools.nsc.MainClass.doCompile(Main.scala:23)
	at scala.tools.nsc.Driver.process(Driver.scala:51)
	at scala.tools.nsc.Driver.main(Driver.scala:64)
	at scala.tools.nsc.Main.main(Main.scala)
error: Error while emitting natint$
-32768
one warning found
one error found

"A type table used to temporarily store internal names that will not necessarily be stored in the constant pool."

https://github.com/scala/scala-asm/blob/v5.1.0-scala-1/src/main/java/scala/tools/asm/ClassWriter.java#L1665

@SethTisue SethTisue closed this as not planned Won't fix, can't repro, duplicate, stale May 16, 2023
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

No branches or pull requests

2 participants