summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorIulian Dragos <jaguarul@gmail.com>2010-11-02 18:01:54 +0000
committerIulian Dragos <jaguarul@gmail.com>2010-11-02 18:01:54 +0000
commit3b0b4d7480627d3d19a5745a7163c5b9e3d8f16b (patch)
treeeb09ccb78e8a18753dc5c42ff2c4b834233b7a82
parent8e320487627e85cce44a4eab0d77d28fd0904d50 (diff)
downloadscala-3b0b4d7480627d3d19a5745a7163c5b9e3d8f16b.tar.gz
scala-3b0b4d7480627d3d19a5745a7163c5b9e3d8f16b.tar.bz2
scala-3b0b4d7480627d3d19a5745a7163c5b9e3d8f16b.zip
Closes #3973. Review by extempore.
-rw-r--r--src/compiler/scala/tools/nsc/backend/jvm/GenJVM.scala5
-rw-r--r--test/files/run/duplicate-meth.check1
-rw-r--r--test/files/run/duplicate-meth.scala23
3 files changed, 26 insertions, 3 deletions
diff --git a/src/compiler/scala/tools/nsc/backend/jvm/GenJVM.scala b/src/compiler/scala/tools/nsc/backend/jvm/GenJVM.scala
index 60c186cb27..cac9453904 100644
--- a/src/compiler/scala/tools/nsc/backend/jvm/GenJVM.scala
+++ b/src/compiler/scala/tools/nsc/backend/jvm/GenJVM.scala
@@ -923,12 +923,11 @@ abstract class GenJVM extends SubComponent {
* then all matching names.
*/
def memberNames(sym: Symbol) = sym.info.members map (_.name.toString) toSet
- lazy val membersInCommon = atPhase(currentRun.picklerPhase)(
+ lazy val membersInCommon =
memberNames(linkedModule) intersect memberNames(linkedClass)
- )
/** Should method `m' get a forwarder in the mirror class? */
- def shouldForward(m: Symbol): Boolean = atPhase(currentRun.picklerPhase)(
+ def shouldForward(m: Symbol): Boolean = (
m.owner != ObjectClass
&& m.isMethod
&& m.isPublic
diff --git a/test/files/run/duplicate-meth.check b/test/files/run/duplicate-meth.check
new file mode 100644
index 0000000000..0992502806
--- /dev/null
+++ b/test/files/run/duplicate-meth.check
@@ -0,0 +1 @@
+verified!
diff --git a/test/files/run/duplicate-meth.scala b/test/files/run/duplicate-meth.scala
new file mode 100644
index 0000000000..40c0d3d676
--- /dev/null
+++ b/test/files/run/duplicate-meth.scala
@@ -0,0 +1,23 @@
+
+trait Base {
+ private val secure_# = 10l
+}
+
+class TestUser extends Base {
+ def clsMeth(x: Int) = x
+ private def foo(x: Int) = x
+}
+
+object TestUser extends TestUser {
+ def objMeth = "a"
+
+ private def foo(x: Int) = x
+}
+
+object Test {
+ def main(args: Array[String]) {
+ TestUser.objMeth
+ // no-op, just check that it passes verification
+ println("verified!")
+ }
+}