diff options
author | Paul Phillips <paulp@improving.org> | 2013-11-04 16:51:20 -0800 |
---|---|---|
committer | Paul Phillips <paulp@improving.org> | 2013-11-04 16:51:20 -0800 |
commit | 075f6f260ccfba83b118c308195d1ede2e66ad18 (patch) | |
tree | 9b3720df7575e52da14c5a7a0854d4fc1f290e39 /test/files/run | |
parent | 05681d4def04f290728e673b7856a57b872c8019 (diff) | |
download | scala-075f6f260ccfba83b118c308195d1ede2e66ad18.tar.gz scala-075f6f260ccfba83b118c308195d1ede2e66ad18.tar.bz2 scala-075f6f260ccfba83b118c308195d1ede2e66ad18.zip |
SI-6546 InnerClasses attribute refers to absent class
At issue is that the optimizer would eliminate closure classes
completely, then neglect to eliminate those classes from the
container's InnerClasses attribute. This breaks tooling which
expects those entries to correspond to real classes.
The code change is essentially mgarcia's - I minimized it and
put the caches in perRunCaches, and added the test case which
verifies that after being compiled under -optimise, there are
no inner classes. Before/after:
7,8d6
< InnerClasses:
< public final #22; //class A_1$$anonfun$f$1
37,45c35,40
< #21 = Utf8 A_1$$anonfun$f$1
< #22 = Class #21 // A_1$$anonfun$f$1
< #23 = Utf8 Code
---
> #21 = Utf8 Code
Diffstat (limited to 'test/files/run')
-rw-r--r-- | test/files/run/t6546.flags | 1 | ||||
-rw-r--r-- | test/files/run/t6546/A_1.scala | 6 | ||||
-rw-r--r-- | test/files/run/t6546/B_2.scala | 8 |
3 files changed, 15 insertions, 0 deletions
diff --git a/test/files/run/t6546.flags b/test/files/run/t6546.flags new file mode 100644 index 0000000000..eb4d19bcb9 --- /dev/null +++ b/test/files/run/t6546.flags @@ -0,0 +1 @@ +-optimise
\ No newline at end of file diff --git a/test/files/run/t6546/A_1.scala b/test/files/run/t6546/A_1.scala new file mode 100644 index 0000000000..bd086c08f8 --- /dev/null +++ b/test/files/run/t6546/A_1.scala @@ -0,0 +1,6 @@ +final class Opt { + @inline def getOrElse(x: => String): String = "" +} +class A_1 { + def f(x: Opt): String = x getOrElse null +} diff --git a/test/files/run/t6546/B_2.scala b/test/files/run/t6546/B_2.scala new file mode 100644 index 0000000000..64ec966f75 --- /dev/null +++ b/test/files/run/t6546/B_2.scala @@ -0,0 +1,8 @@ +import scala.tools.partest.BytecodeTest + +object Test extends BytecodeTest { + def show: Unit = { + val node = loadClassNode("A_1") + assert(node.innerClasses.isEmpty, node.innerClasses) + } +} |