summaryrefslogtreecommitdiff
path: root/test/files/neg/t9286c.check
diff options
context:
space:
mode:
authorJason Zaugg <jzaugg@gmail.com>2015-05-01 12:34:51 +1000
committerJason Zaugg <jzaugg@gmail.com>2015-05-18 11:17:09 +1000
commitaca8f96d1cf5f645c24eac11f695dadae08ea381 (patch)
tree46badacf236a24013536acee469a898aa979e9c8 /test/files/neg/t9286c.check
parent2f1b5259188698501dbc8430f63972bf7bc68154 (diff)
downloadscala-aca8f96d1cf5f645c24eac11f695dadae08ea381.tar.gz
scala-aca8f96d1cf5f645c24eac11f695dadae08ea381.tar.bz2
scala-aca8f96d1cf5f645c24eac11f695dadae08ea381.zip
SI-9286 Check subclass privates for "same type after erasure"
The overriding pairs cursor used to detect erased signature clashes was turning a blind eye to any pair that contained a private method. However, this could lead to a `VerifyError` or `IllegalAccessError`. Checking against javac's behaviour in both directions: ``` % cat sandbox/Test.java public abstract class Test { class C { int foo() { return 0; } } class D extends C { private <A> int foo() { return 1; } } } % javac sandbox/Test.java sandbox/Test.java:3: error: name clash: <A>foo() in Test.D and foo() in Test.C have the same erasure, yet neither overrides the other class D extends C { private <A> int foo() { return 1; } } ^ where A is a type-variable: A extends Object declared in method <A>foo() 1 error ``` ``` % cat sandbox/Test.java public abstract class Test { class C { private int foo() { return 0; } } class D extends C { <A> int foo() { return 1; } } } % javac sandbox/Test.java % ``` This commit only the exludes private symbols from the superclass from the checks by moving the test from `excludes` to `matches`.
Diffstat (limited to 'test/files/neg/t9286c.check')
-rw-r--r--test/files/neg/t9286c.check7
1 files changed, 7 insertions, 0 deletions
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