diff options
author | Lukas Rytz <lukas.rytz@gmail.com> | 2015-01-20 23:20:26 +0100 |
---|---|---|
committer | Lukas Rytz <lukas.rytz@gmail.com> | 2015-03-11 12:53:35 -0700 |
commit | 4e982451decdc3821febfe975e1b8e406a3741e8 (patch) | |
tree | 95438438c6cd166b68418e765d8d599bb6a91573 /test/files/run/bcodeInlinerMixed/Test.scala | |
parent | 37c91654433a12249ae125b9454ba17cef103327 (diff) | |
download | scala-4e982451decdc3821febfe975e1b8e406a3741e8.tar.gz scala-4e982451decdc3821febfe975e1b8e406a3741e8.tar.bz2 scala-4e982451decdc3821febfe975e1b8e406a3741e8.zip |
Don't crash the inliner in mixed compilation
In mixed compilation, the bytecode of Java classes is not availalbe:
the Scala compiler does not produce any, and there are no classfiles
yet.
When inlining a (Scala defined) method that contains an invocation to
a Java method, we need the Java method's bytecode in order to check
whether that invocation can be transplanted to the new location
without causing an IllegalAccessError. If the bytecode cannot be
found, inlining won't be allowed.
Diffstat (limited to 'test/files/run/bcodeInlinerMixed/Test.scala')
-rw-r--r-- | test/files/run/bcodeInlinerMixed/Test.scala | 16 |
1 files changed, 16 insertions, 0 deletions
diff --git a/test/files/run/bcodeInlinerMixed/Test.scala b/test/files/run/bcodeInlinerMixed/Test.scala new file mode 100644 index 0000000000..c8c7a9fe2a --- /dev/null +++ b/test/files/run/bcodeInlinerMixed/Test.scala @@ -0,0 +1,16 @@ +import scala.tools.partest.{BytecodeTest, ASMConverters} +import ASMConverters._ + +object Test extends BytecodeTest { + def show: Unit = { + val gIns = instructionsFromMethod(getMethod(loadClassNode("B"), "g")) + val hIns = instructionsFromMethod(getMethod(loadClassNode("C"), "h")) + // val invocation = Invoke(INVOKESTATIC, A_1, bar, ()I, false) + for (i <- List(gIns, hIns)) { + assert(i exists { + case Invoke(_, _, "bar", "()I", _) => true + case _ => false + }, i mkString "\n") + } + } +} |