summaryrefslogtreecommitdiff
path: root/test/files/run/t7455.check
diff options
context:
space:
mode:
authorJason Zaugg <jzaugg@gmail.com>2013-07-17 15:52:48 +1000
committerJason Zaugg <jzaugg@gmail.com>2013-07-28 07:38:16 +0200
commit050b4c951c838699c2fe30cbf01b63942c63a299 (patch)
treeb74d134cbfc14b3dad08162cf6126296ca285df6 /test/files/run/t7455.check
parent54cb6af7dbcf630a4f57e98f0099d77dd3b36693 (diff)
downloadscala-050b4c951c838699c2fe30cbf01b63942c63a299.tar.gz
scala-050b4c951c838699c2fe30cbf01b63942c63a299.tar.bz2
scala-050b4c951c838699c2fe30cbf01b63942c63a299.zip
SI-7455 Drop dummy param for synthetic access constructor
Java synthesizes public constructors in private classes to allow access from inner classes. The signature of that synthetic constructor (known as a "access constructor") has a dummy parameter appended to avoid overloading clashes. javac chooses the type "Enclosing$1" for the dummy parameter (called the "access constructor tag") which is either an existing anonymous class or a synthesized class for this purpose. In OpenJDK, this transformation is performed in: langtools/src/share/classes/com/sun/tools/javac/comp/Lower.java (Incidentally, scalac would just emits a byte-code public constructor in this situation, rather than a private constructor / access constructor pair.) Scala parses the signature of the access contructor, and drops the $outer parameter, but retains the dummy parameter. This causes havoc when it tries to parse the bytecode for that anonymous class; the class file parser doesn't have the enclosing type parameters of Vector in scope and crash ensues. In any case, we shouldn't allow user code to see that constructor; it should only be called from within its own compilation unit. This commit drops the dummy parameter from access constructor signatures in class file parsing.
Diffstat (limited to 'test/files/run/t7455.check')
-rw-r--r--test/files/run/t7455.check4
1 files changed, 4 insertions, 0 deletions
diff --git a/test/files/run/t7455.check b/test/files/run/t7455.check
new file mode 100644
index 0000000000..0eb9342888
--- /dev/null
+++ b/test/files/run/t7455.check
@@ -0,0 +1,4 @@
+private[package <empty>] def <init>(x$1: String): Outer[E]
+private[package <empty>] def <init>(): Outer$PrivateInner
+private[package <empty>] def <init>(): Outer$PrivateStaticInner
+private[package <empty>] def <init>(x$2: String): Outer$PublicInner