Closed odd closed 5 years ago
@smarter suggested I ping @lrytz for this issue.
The same problem as when calling from
also occurs when calling empty
.
The following code causes the error:
def f()= {
"x" match {
case "y" => List.empty[Int]
case _ => collection.immutable.ArraySeq.empty[Int]
}
}
The following code does not cause the error:
def f()= {
"x" match {
case "y" => List.empty[Int]
case _ => collection.mutable.ArraySeq.empty[Int]
}
}
@odd I couldn't reproduce this by just compiling the method in a separate source file. Could you push a branch somewhere with your changes and let me know what to run to trigger the error?
@lrytz I have created https://github.com/odd/scala-stackmaperror, please have a look and see if you can reproduce it there (if not is probably something wrong with my local 2.13.0-M5
jar or something like that...).
I can reproduce the problem. I'm having a hard time nailing it down though. The error message is
Type
scala/collection/immutable/List
(current frame, locals[1]) is not assignable toscala/collection/immutable/AbstractSeq
Indeed the stack map frame says
L3
FRAME FULL [Failures scala/collection/immutable/AbstractSeq java/lang/String] []
and one of the branches jumping to L3 stores an scala/collection/immutable/List
into local variable 1.
The Scala version is set to 2.13.0-M5, and looking at the classfile (unzip /Users/luc/.ivy2/cache/org.scala-lang/scala-library/jars/scala-library-2.13.0-M5.jar scala/collection/immutable/List.class
) I get
public abstract class scala/collection/immutable/List extends scala/collection/immutable/AbstractSeq ...
It seems the error is thrown when jmh is processing classfiles. Running with sbt --debug
, I see
Annotation generator had thrown the exception.
java.lang.VerifyError: Inconsistent stackmap frames at branch target 69
...
My wild guess is that there's a different scala-library version on the classpath. I just don't know right now how to debug this further. Maybe @ktoso can help us out?
@dwijnand would you have some spare cycles to diagnose / verify Lukas's hypo that the underlying issue is conflicting scala-library jars on the classpath?
Hmm, no, and not enough prior knowledge of sbt-jmh or jmh to backfill the lack of cycles.
Another wild guess (less probably) is the scala.List rewrite in the compiler?
I can also repro by invoking the given task, but can't repro it programmatically from the console (to further diagnose what the classpath is etc):
I got the values used by doing show etc, but i must be missing some aspect of how the forked classpath is set up. I can't do show failures / Jmh / fullClasspathAsJar
without getting the verify error already, so not sure where to look for that
➜ scala-stackmaperror git:(master) ✗ sbt
[info] Loading settings for project scala-stackmaperror-build from plugins.sbt ...
[info] Loading project definition from /private/tmp/scala-stackmaperror/project
[info] Loading settings for project scala-stackmaperror from build.sbt ...
[info] Set current project to scala-stackmaperror (in build file:/private/tmp/scala-stackmaperror/)
[info] sbt server started at local:///Users/adriaan/.sbt/1.0/server/0f5d1c7e25bb3149770f/sock
sbt:scala-stackmaperror> failures/console
[info] Starting scala interpreter...
Welcome to Scala 2.13.0-M5 (Java HotSpot(TM) 64-Bit Server VM, Java 1.8.0_181).
Type in expressions for evaluation. Or try :help.
scala> val cp =
| List("/Users/adriaan/.ivy2/cache/org.scala-lang/scala-library/jars/scala-library-2.13.0-M5.jar",
| "/Users/adriaan/.ivy2/cache/pl.project13.scala/sbt-jmh-extras/jars/sbt-jmh-extras-0.3.4.jar",
| "/Users/adriaan/.ivy2/cache/org.openjdk.jmh/jmh-core/jars/jmh-core-1.21.jar",
| "/Users/adriaan/.ivy2/cache/net.sf.jopt-simple/jopt-simple/jars/jopt-simple-4.6.jar",
| "/Users/adriaan/.ivy2/cache/org.apache.commons/commons-math3/jars/commons-math3-3.2.jar",
| "/Users/adriaan/.ivy2/cache/org.openjdk.jmh/jmh-generator-bytecode/jars/jmh-generator-bytecode-1.21.jar",
| "/Users/adriaan/.ivy2/cache/org.openjdk.jmh/jmh-generator-reflection/jars/jmh-generator-reflection-1.21.jar",
| "/Users/adriaan/.ivy2/cache/org.openjdk.jmh/jmh-generator-asm/jars/jmh-generator-asm-1.21.jar",
| "/Users/adriaan/.ivy2/cache/org.ow2.asm/asm/jars/asm-5.0.3.jar")
cp: List[String] = List(/Users/adriaan/.ivy2/cache/org.scala-lang/scala-library/jars/scala-library-2.13.0-M5.jar, /Users/adriaan/.ivy2/cache/pl.project13.scala/sbt-jmh-extras/jars/sbt-jmh-extras-0.3.4.jar, /Users/adriaan/.ivy2/cache/org.openjdk.jmh/jmh-core/jars/jmh-core-1.21.jar, /Users/adriaan/.ivy2/cache/net.sf.jopt-simple/jopt-simple/jars/jopt-simple-4.6.jar, /Users/adriaan/.ivy2/cache/org.apache.commons/commons-math3/jars/commons-math3-3.2.jar, /Users/adriaan/.ivy2/cache/org.openjdk.jmh/jmh-generator-bytecode/jars/jmh-generator-bytecode-1.21.jar, /Users/adriaan/.ivy2/cache/org.openjdk.jmh/jmh-generator-reflection/jars/jmh-generator-reflection-1.21.jar, /Users/adriaan/.ivy2/cache/org.openjdk.jmh/jmh-generator-asm/jars/jmh-generator-asm-1.21.jar, /Users/adriaan/.ivy2/cache/org.ow2.as...
scala>
scala>
scala> val bytecodeDir = "/tmp/scala-stackmaperror/failures/target/scala-2.13.0-M5/classes"
bytecodeDir: String = /tmp/scala-stackmaperror/failures/target/scala-2.13.0-M5/classes
scala> val sourceDir = "/tmp/scala-stackmaperror/failures/target/scala-2.13.0-M5/src_managed"
sourceDir: String = /tmp/scala-stackmaperror/failures/target/scala-2.13.0-M5/src_managed
scala> val resourceDir = "/tmp/scala-stackmaperror/failures/target/scala-2.13.0-M5/resource_managed/"
resourceDir: String = /tmp/scala-stackmaperror/failures/target/scala-2.13.0-M5/resource_managed/
scala>
scala> import org.openjdk.jmh.generators.bytecode.JmhBytecodeGenerator
import org.openjdk.jmh.generators.bytecode.JmhBytecodeGenerator
scala> import org.openjdk.jmh.annotations.Benchmark
import org.openjdk.jmh.annotations.Benchmark
scala> import scala.tools.nsc.util.ScalaClassLoader.URLClassLoader
import scala.tools.nsc.util.ScalaClassLoader.URLClassLoader
scala>
scala>
scala> // rebuild everything -- folders emptied manually
scala> //IO.delete(sourceDir)
scala> //IO.createDirectory(sourceDir)
scala> //IO.delete(resourceDir)
scala> //IO.createDirectory(resourceDir)
scala>
scala> val bench = classOf[Benchmark]
bench: Class[org.openjdk.jmh.annotations.Benchmark] = interface org.openjdk.jmh.annotations.Benchmark
scala> val loader = new URLClassLoader(cp.map(p => new java.io.File(p).toURI.toURL), bench.getClassLoader)
warning: there was one deprecation warning (since 2.11.0); for details, enable `:setting -deprecation' or `:replay -deprecation'
loader: tools.nsc.util.ScalaClassLoader.URLClassLoader = scala.reflect.internal.util.ScalaClassLoader$URLClassLoader@244f0b2
scala> val old = Thread.currentThread.getContextClassLoader
old: ClassLoader = scala.tools.nsc.interpreter.IMain$TranslatingClassLoader@140137a1
scala> Thread.currentThread.setContextClassLoader(loader)
scala>
scala> JmhBytecodeGenerator.main(Array(bytecodeDir, sourceDir, resourceDir, "default").map(_.toString))
Processing 1 classes from /tmp/scala-stackmaperror/failures/target/scala-2.13.0-M5/classes with "reflection" generator
Writing out Java source to /tmp/scala-stackmaperror/failures/target/scala-2.13.0-M5/src_managed and resources to /tmp/scala-stackmaperror/failures/target/scala-2.13.0-M5/resource_managed
Ok, I convinced myself it's a classpath problem with the plugin. It has the scala 2.13.0-M5 library as well as the 2.12.7 jars on the classpath.
Painstakingly recreating the classloaders yields:
val cp =
List("/Users/adriaan/.ivy2/cache/org.scala-lang/scala-library/jars/scala-library-2.13.0-M5.jar",
"/Users/adriaan/.ivy2/cache/pl.project13.scala/sbt-jmh-extras/jars/sbt-jmh-extras-0.3.4.jar",
"/Users/adriaan/.ivy2/cache/org.openjdk.jmh/jmh-core/jars/jmh-core-1.21.jar",
"/Users/adriaan/.ivy2/cache/net.sf.jopt-simple/jopt-simple/jars/jopt-simple-4.6.jar",
"/Users/adriaan/.ivy2/cache/org.apache.commons/commons-math3/jars/commons-math3-3.2.jar",
"/Users/adriaan/.ivy2/cache/org.openjdk.jmh/jmh-generator-bytecode/jars/jmh-generator-bytecode-1.21.jar",
"/Users/adriaan/.ivy2/cache/org.openjdk.jmh/jmh-generator-reflection/jars/jmh-generator-reflection-1.21.jar",
"/Users/adriaan/.ivy2/cache/org.openjdk.jmh/jmh-generator-asm/jars/jmh-generator-asm-1.21.jar",
"/Users/adriaan/.ivy2/cache/org.ow2.asm/asm/jars/asm-5.0.3.jar")
val benchCp = List(
"/Users/adriaan/.ivy2/local/pl.project13.scala/sbt-jmh/scala_2.12/sbt_1.0/0.3.5-SNAPSHOT/jars/sbt-jmh.jar",
"/Users/adriaan/.ivy2/local/pl.project13.scala/sbt-jmh-extras/0.3.5-local/jars/sbt-jmh-extras.jar",
"/Users/adriaan/.ivy2/cache/org.openjdk.jmh/jmh-core/jars/jmh-core-1.21.jar",
"/Users/adriaan/.ivy2/cache/net.sf.jopt-simple/jopt-simple/jars/jopt-simple-4.6.jar",
"/Users/adriaan/.ivy2/cache/org.apache.commons/commons-math3/jars/commons-math3-3.2.jar",
"/Users/adriaan/.ivy2/cache/org.openjdk.jmh/jmh-generator-bytecode/jars/jmh-generator-bytecode-1.21.jar",
"/Users/adriaan/.ivy2/cache/org.openjdk.jmh/jmh-generator-reflection/jars/jmh-generator-reflection-1.21.jar",
"/Users/adriaan/.ivy2/cache/org.openjdk.jmh/jmh-generator-asm/jars/jmh-generator-asm-1.21.jar",
"/Users/adriaan/.ivy2/cache/org.ow2.asm/asm/jars/asm-5.0.3.jar")
val benchParentCp = List(
"/Users/adriaan/.sbt/boot/scala-2.12.7/org.scala-sbt/sbt/1.2.7/apple-file-events-1.3.2.jar",
"/Users/adriaan/.sbt/boot/scala-2.12.7/org.scala-sbt/sbt/1.2.7/sjson-new-core_2.12-0.8.2.jar",
"/Users/adriaan/.sbt/boot/scala-2.12.7/org.scala-sbt/sbt/1.2.7/config-1.2.0.jar",
"/Users/adriaan/.sbt/boot/scala-2.12.7/org.scala-sbt/sbt/1.2.7/scalapb-runtime_2.12-0.6.0.jar",
"/Users/adriaan/.sbt/boot/scala-2.12.7/org.scala-sbt/sbt/1.2.7/log4j-api-2.11.1.jar",
"/Users/adriaan/.sbt/boot/scala-2.12.7/org.scala-sbt/sbt/1.2.7/core-macros_2.12-1.2.7.jar",
"/Users/adriaan/.sbt/boot/scala-2.12.7/org.scala-sbt/sbt/1.2.7/gigahorse-core_2.12-0.3.0.jar",
"/Users/adriaan/.sbt/boot/scala-2.12.7/org.scala-sbt/sbt/1.2.7/main-settings_2.12-1.2.7.jar",
"/Users/adriaan/.sbt/boot/scala-2.12.7/org.scala-sbt/sbt/1.2.7/ivy-2.3.0-sbt-b18f59ea3bc914a297bb6f1a4f7fb0ace399e310.jar",
"/Users/adriaan/.sbt/boot/scala-2.12.7/org.scala-sbt/sbt/1.2.7/command_2.12-1.2.7.jar",
"/Users/adriaan/.sbt/boot/scala-2.12.7/org.scala-sbt/sbt/1.2.7/zinc-ivy-integration_2.12-1.2.5.jar",
"/Users/adriaan/.sbt/boot/scala-2.12.7/org.scala-sbt/sbt/1.2.7/util-control_2.12-1.2.4.jar",
"/Users/adriaan/.sbt/boot/scala-2.12.7/org.scala-sbt/sbt/1.2.7/actions_2.12-1.2.7.jar",
"/Users/adriaan/.sbt/boot/scala-2.12.7/org.scala-sbt/sbt/1.2.7/scripted-plugin_2.12-1.2.7.jar",
"/Users/adriaan/.sbt/boot/scala-2.12.7/org.scala-sbt/sbt/1.2.7/scala-reflect-2.12.7.jar",
"/Users/adriaan/.sbt/boot/scala-2.12.7/org.scala-sbt/sbt/1.2.7/tasks_2.12-1.2.7.jar",
"/Users/adriaan/.sbt/boot/scala-2.12.7/org.scala-sbt/sbt/1.2.7/scripted-sbt-redux_2.12-1.2.7.jar",
"/Users/adriaan/.sbt/boot/scala-2.12.7/org.scala-sbt/sbt/1.2.7/slf4j-api-1.7.25.jar",
"/Users/adriaan/.sbt/boot/scala-2.12.7/org.scala-sbt/sbt/1.2.7/collections_2.12-1.2.7.jar",
"/Users/adriaan/.sbt/boot/scala-2.12.7/org.scala-sbt/sbt/1.2.7/sbinary_2.12-0.5.0.jar",
"/Users/adriaan/.sbt/boot/scala-2.12.7/org.scala-sbt/sbt/1.2.7/test-interface-1.0.jar",
"/Users/adriaan/.sbt/boot/scala-2.12.7/org.scala-sbt/sbt/1.2.7/logic_2.12-1.2.7.jar",
"/Users/adriaan/.sbt/boot/scala-2.12.7/org.scala-sbt/sbt/1.2.7/log4j-slf4j-impl-2.11.1.jar",
"/Users/adriaan/.sbt/boot/scala-2.12.7/org.scala-sbt/sbt/1.2.7/zinc-classpath_2.12-1.2.5.jar",
"/Users/adriaan/.sbt/boot/scala-2.12.7/org.scala-sbt/sbt/1.2.7/log4j-core-2.11.1.jar",
"/Users/adriaan/.sbt/boot/scala-2.12.7/org.scala-sbt/sbt/1.2.7/zinc-persist_2.12-1.2.5.jar",
"/Users/adriaan/.sbt/boot/scala-2.12.7/org.scala-sbt/sbt/1.2.7/ssl-config-core_2.12-0.2.2.jar",
"/Users/adriaan/.sbt/boot/scala-2.12.7/org.scala-sbt/sbt/1.2.7/jline-2.14.6.jar",
"/Users/adriaan/.sbt/boot/scala-2.12.7/org.scala-sbt/sbt/1.2.7/util-logging_2.12-1.2.4.jar",
"/Users/adriaan/.sbt/boot/scala-2.12.7/org.scala-sbt/sbt/1.2.7/fastparse-utils_2.12-0.4.2.jar",
"/Users/adriaan/.sbt/boot/scala-2.12.7/org.scala-sbt/sbt/1.2.7/run_2.12-1.2.7.jar",
"/Users/adriaan/.sbt/boot/scala-2.12.7/org.scala-sbt/sbt/1.2.7/launcher-interface-1.0.4.jar",
"/Users/adriaan/.sbt/boot/scala-2.12.7/org.scala-sbt/sbt/1.2.7/compiler-interface-1.2.5.jar",
"/Users/adriaan/.sbt/boot/scala-2.12.7/org.scala-sbt/sbt/1.2.7/protobuf-java-3.3.1.jar",
"/Users/adriaan/.sbt/boot/scala-2.12.7/org.scala-sbt/sbt/1.2.7/protocol_2.12-1.2.7.jar",
"/Users/adriaan/.sbt/boot/scala-2.12.7/org.scala-sbt/sbt/1.2.7/io_2.12-1.2.2.jar",
"/Users/adriaan/.sbt/boot/scala-2.12.7/org.scala-sbt/sbt/1.2.7/reactive-streams-1.0.0.jar",
"/Users/adriaan/.sbt/boot/scala-2.12.7/org.scala-sbt/sbt/1.2.7/sjson-new-scalajson_2.12-0.8.2.jar",
"/Users/adriaan/.sbt/boot/scala-2.12.7/org.scala-sbt/sbt/1.2.7/zinc-apiinfo_2.12-1.2.5.jar",
"/Users/adriaan/.sbt/boot/scala-2.12.7/org.scala-sbt/sbt/1.2.7/test-agent-1.2.7.jar",
"/Users/adriaan/.sbt/boot/scala-2.12.7/org.scala-sbt/sbt/1.2.7/okhttp-3.7.0.jar",
"/Users/adriaan/.sbt/boot/scala-2.12.7/org.scala-sbt/sbt/1.2.7/sourcecode_2.12-0.1.3.jar",
"/Users/adriaan/.sbt/boot/scala-2.12.7/org.scala-sbt/sbt/1.2.7/lenses_2.12-0.4.12.jar",
"/Users/adriaan/.sbt/boot/scala-2.12.7/org.scala-sbt/sbt/1.2.7/jna-4.5.0.jar",
"/Users/adriaan/.sbt/boot/scala-2.12.7/org.scala-sbt/sbt/1.2.7/zinc-compile-core_2.12-1.2.5.jar",
"/Users/adriaan/.sbt/boot/scala-2.12.7/org.scala-sbt/sbt/1.2.7/okhttp-urlconnection-3.7.0.jar",
"/Users/adriaan/.sbt/boot/scala-2.12.7/org.scala-sbt/sbt/1.2.7/gigahorse-okhttp_2.12-0.3.0.jar",
"/Users/adriaan/.sbt/boot/scala-2.12.7/org.scala-sbt/sbt/1.2.7/disruptor-3.4.2.jar",
"/Users/adriaan/.sbt/boot/scala-2.12.7/org.scala-sbt/sbt/1.2.7/compiler-bridge_2.12-1.2.5.jar",
"/Users/adriaan/.sbt/boot/scala-2.12.7/org.scala-sbt/sbt/1.2.7/completion_2.12-1.2.7.jar",
"/Users/adriaan/.sbt/boot/scala-2.12.7/org.scala-sbt/sbt/1.2.7/util-tracking_2.12-1.2.4.jar",
"/Users/adriaan/.sbt/boot/scala-2.12.7/org.scala-sbt/sbt/1.2.7/template-resolver-0.1.jar",
"/Users/adriaan/.sbt/boot/scala-2.12.7/org.scala-sbt/sbt/1.2.7/zinc_2.12-1.2.5.jar",
"/Users/adriaan/.sbt/boot/scala-2.12.7/org.scala-sbt/sbt/1.2.7/jna-platform-4.5.0.jar",
"/Users/adriaan/.sbt/boot/scala-2.12.7/org.scala-sbt/sbt/1.2.7/zinc-core_2.12-1.2.5.jar",
"/Users/adriaan/.sbt/boot/scala-2.12.7/org.scala-sbt/sbt/1.2.7/okio-1.12.0.jar",
"/Users/adriaan/.sbt/boot/scala-2.12.7/org.scala-sbt/sbt/1.2.7/jawn-parser_2.12-0.10.4.jar",
"/Users/adriaan/.sbt/boot/scala-2.12.7/org.scala-sbt/sbt/1.2.7/fastparse_2.12-0.4.2.jar",
"/Users/adriaan/.sbt/boot/scala-2.12.7/org.scala-sbt/sbt/1.2.7/util-scripted_2.12-1.2.4.jar",
"/Users/adriaan/.sbt/boot/scala-2.12.7/org.scala-sbt/sbt/1.2.7/librarymanagement-ivy_2.12-1.2.3.jar",
"/Users/adriaan/.sbt/boot/scala-2.12.7/org.scala-sbt/sbt/1.2.7/jsch-0.1.54.jar",
"/Users/adriaan/.sbt/boot/scala-2.12.7/org.scala-sbt/sbt/1.2.7/util-position_2.12-1.2.4.jar",
"/Users/adriaan/.sbt/boot/scala-2.12.7/org.scala-sbt/sbt/1.2.7/sbt-1.2.7.jar",
"/Users/adriaan/.sbt/boot/scala-2.12.7/org.scala-sbt/sbt/1.2.7/scalacache-caffeine_2.12-0.20.0.jar",
"/Users/adriaan/.sbt/boot/scala-2.12.7/org.scala-sbt/sbt/1.2.7/zinc-compile_2.12-1.2.5.jar",
"/Users/adriaan/.sbt/boot/scala-2.12.7/org.scala-sbt/sbt/1.2.7/util-relation_2.12-1.2.4.jar",
"/Users/adriaan/.sbt/boot/scala-2.12.7/org.scala-sbt/sbt/1.2.7/scalacache-core_2.12-0.20.0.jar",
"/Users/adriaan/.sbt/boot/scala-2.12.7/org.scala-sbt/sbt/1.2.7/util-interface-1.2.4.jar",
"/Users/adriaan/.sbt/boot/scala-2.12.7/org.scala-sbt/sbt/1.2.7/main_2.12-1.2.7.jar",
"/Users/adriaan/.sbt/boot/scala-2.12.7/org.scala-sbt/sbt/1.2.7/scala-xml_2.12-1.0.6.jar",
"/Users/adriaan/.sbt/boot/scala-2.12.7/org.scala-sbt/sbt/1.2.7/ipcsocket-1.0.0.jar",
"/Users/adriaan/.sbt/boot/scala-2.12.7/org.scala-sbt/sbt/1.2.7/task-system_2.12-1.2.7.jar",
"/Users/adriaan/.sbt/boot/scala-2.12.7/org.scala-sbt/sbt/1.2.7/librarymanagement-core_2.12-1.2.3.jar",
"/Users/adriaan/.sbt/boot/scala-2.12.7/org.scala-sbt/sbt/1.2.7/caffeine-2.5.6.jar",
"/Users/adriaan/.sbt/boot/scala-2.12.7/org.scala-sbt/sbt/1.2.7/zinc-classfile_2.12-1.2.5.jar",
"/Users/adriaan/.sbt/boot/scala-2.12.7/org.scala-sbt/sbt/1.2.7/sjson-new-murmurhash_2.12-0.8.2.jar",
"/Users/adriaan/.sbt/boot/scala-2.12.7/org.scala-sbt/sbt/1.2.7/shaded-scalajson_2.12-1.0.0-M4.jar",
"/Users/adriaan/.sbt/boot/scala-2.12.7/org.scala-sbt/sbt/1.2.7/util-cache_2.12-1.2.4.jar",
"/Users/adriaan/.sbt/boot/scala-2.12.7/org.scala-sbt/sbt/1.2.7/testing_2.12-1.2.7.jar",
"/Users/adriaan/.sbt/boot/scala-2.12.7/org.scala-sbt/sbt/1.2.7/scala-parser-combinators_2.12-1.0.5.jar")
val benchGrandParentCp = List("/Users/adriaan/.sbt/boot/scala-2.12.7/lib/scala-compiler.jar", "/Users/adriaan/.sbt/boot/scala-2.12.7/lib/jline.jar", "/Users/adriaan/.sbt/boot/scala-2.12.7/lib/scala-reflect.jar", "/Users/adriaan/.sbt/boot/scala-2.12.7/lib/scala-xml_2.12.jar")
val bytecodeDir = "/tmp/scala-stackmaperror/failures/target/scala-2.13.0-M5/classes"
val sourceDir = "/tmp/scala-stackmaperror/failures/target/scala-2.13.0-M5/src_managed/jmh"
val resourceDir = "/tmp/scala-stackmaperror/failures/target/scala-2.13.0-M5/resource_managed/jmh"
import org.openjdk.jmh.generators.bytecode.JmhBytecodeGenerator
import scala.tools.nsc.util.ScalaClassLoader.URLClassLoader
val loader = new URLClassLoader(cp.map(p => new java.io.File(p).toURI.toURL),
new java.net.URLClassLoader(benchCp.map(p => new java.io.File(p).toURI.toURL).toArray, new java.net.URLClassLoader(benchParentCp.map(p => new java.io.File(p).toURI.toURL).toArray, new java.net.URLClassLoader(benchGrandParentCp.map(p => new java.io.File(p).toURI.toURL).toArray, null))))
Thread.currentThread.setContextClassLoader(loader)
JmhBytecodeGenerator.main(Array(bytecodeDir, sourceDir, resourceDir, "default").map(_.toString))
While working on adding benchmarks for the new 2.13 collections using JMH, the following error has been encountered:
The code causing the error is:
It does not seem to matter which immutable seq sub types that are used; the error occurs as long as
immutable.AbstractSeq
is a common super type. Using a mutable seq like the following code does not cause the error:The branching mechanism doesn't matter, the following code causes the same error:
Tested on JVM: 1.8.0_181, 1.8.0_192 Graal, 11/18.9 Scala: 2.13.0-M5 JMH: 1.21