summaryrefslogtreecommitdiff
path: root/test
diff options
context:
space:
mode:
authorAdriaan Moors <adriaan.moors@typesafe.com>2015-05-21 16:11:38 -0700
committerAdriaan Moors <adriaan.moors@typesafe.com>2015-05-21 16:11:38 -0700
commitdcf6b0a97f083aa76fa80c605446c06b2821b84d (patch)
tree124f9239ffcfb6cf5cc3480ce3f2d58600619e0e /test
parent97543db610bcccdd0243091ba3bebc23061102e8 (diff)
parentaca8f96d1cf5f645c24eac11f695dadae08ea381 (diff)
downloadscala-dcf6b0a97f083aa76fa80c605446c06b2821b84d.tar.gz
scala-dcf6b0a97f083aa76fa80c605446c06b2821b84d.tar.bz2
scala-dcf6b0a97f083aa76fa80c605446c06b2821b84d.zip
Merge pull request #4477 from retronym/ticket/9286
SI-9286 Check subclass privates for "same type after erasure"
Diffstat (limited to 'test')
-rw-r--r--test/files/neg/t9286a.check7
-rw-r--r--test/files/neg/t9286a.scala13
-rw-r--r--test/files/neg/t9286b.check7
-rw-r--r--test/files/neg/t9286b.scala5
-rw-r--r--test/files/neg/t9286c.check7
-rw-r--r--test/files/neg/t9286c.scala14
6 files changed, 53 insertions, 0 deletions
diff --git a/test/files/neg/t9286a.check b/test/files/neg/t9286a.check
new file mode 100644
index 0000000000..2bc7c0cf15
--- /dev/null
+++ b/test/files/neg/t9286a.check
@@ -0,0 +1,7 @@
+t9286a.scala:6: error: name clash between defined and inherited member:
+def foo(o: (String,)): Unit in class T and
+private def foo(o: (Any,)): Unit at line 6
+have same type after erasure: (o: Tuple1)Unit
+ private def foo(o: Tuple1[Any]) = ()
+ ^
+one error found
diff --git a/test/files/neg/t9286a.scala b/test/files/neg/t9286a.scala
new file mode 100644
index 0000000000..0375ac591f
--- /dev/null
+++ b/test/files/neg/t9286a.scala
@@ -0,0 +1,13 @@
+class T {
+ def foo(o: Tuple1[String]) = ()
+}
+
+class U extends T {
+ private def foo(o: Tuple1[Any]) = ()
+}
+
+object Test {
+ def main(args: Array[String]): Unit = {
+ new U().foo(null) // IllegalAccessError: tried to access method U.foo(Lscala/Tuple1;)V from class Test$
+ }
+}
diff --git a/test/files/neg/t9286b.check b/test/files/neg/t9286b.check
new file mode 100644
index 0000000000..89a191bfee
--- /dev/null
+++ b/test/files/neg/t9286b.check
@@ -0,0 +1,7 @@
+t9286b.scala:2: error: name clash between defined and inherited member:
+def foo: Int in class C and
+private def foo[A]: Int at line 2
+have same type after erasure: ()Int
+class D extends C { private def foo[A] = 0 }
+ ^
+one error found
diff --git a/test/files/neg/t9286b.scala b/test/files/neg/t9286b.scala
new file mode 100644
index 0000000000..5c23075426
--- /dev/null
+++ b/test/files/neg/t9286b.scala
@@ -0,0 +1,5 @@
+class C { def foo = 0 }
+class D extends C { private def foo[A] = 0 }
+
+class E { private def foo = 0 }
+class F extends E { def foo[A] = 0 } // okay
diff --git a/test/files/neg/t9286c.check b/test/files/neg/t9286c.check
new file mode 100644
index 0000000000..785cb3f937
--- /dev/null
+++ b/test/files/neg/t9286c.check
@@ -0,0 +1,7 @@
+t9286c.scala:8: error: name clash between defined and inherited member:
+def foo(m: M[_ >: String]): Int in trait T and
+private def foo(m: M[_ >: Any]): Int at line 8
+have same type after erasure: (m: M)Int
+ def foo(m: M[_ >: Any]) = 0 // Expected: "same type after erasure"
+ ^
+one error found
diff --git a/test/files/neg/t9286c.scala b/test/files/neg/t9286c.scala
new file mode 100644
index 0000000000..3df08dcfe6
--- /dev/null
+++ b/test/files/neg/t9286c.scala
@@ -0,0 +1,14 @@
+class M[_]
+trait T {
+ def foo(m: M[_ >: String]) = 42
+}
+
+object Test {
+ def t: T = new T {
+ def foo(m: M[_ >: Any]) = 0 // Expected: "same type after erasure"
+ }
+ def main(args: Array[String]): Unit = {
+ val m: M[String] = null
+ t.foo(m) // VeriyError: Duplicate method name&signature
+ }
+}