summaryrefslogtreecommitdiff
path: root/test
diff options
context:
space:
mode:
authorStefan Zeiger <szeiger@novocode.com>2016-02-09 12:27:31 +0100
committerStefan Zeiger <szeiger@novocode.com>2016-02-09 12:27:31 +0100
commit08dd102e002b38c7c3151c0c081ee0f902e3b918 (patch)
treebc23db761f046a4d85a7fc401eb6dbd37afe0b27 /test
parentf48692daa5cd07107b160da0dd81bd59e63661a5 (diff)
parentfbba81991e69faf3e7416b4caabed1e99c528917 (diff)
downloadscala-08dd102e002b38c7c3151c0c081ee0f902e3b918.tar.gz
scala-08dd102e002b38c7c3151c0c081ee0f902e3b918.tar.bz2
scala-08dd102e002b38c7c3151c0c081ee0f902e3b918.zip
Merge pull request #4948 from szeiger/issue/9574
SI-9574 Prevent illegal overrides of members with module types
Diffstat (limited to 'test')
-rw-r--r--test/files/neg/override-object-no.check10
-rw-r--r--test/files/neg/override-object-no.scala11
2 files changed, 20 insertions, 1 deletions
diff --git a/test/files/neg/override-object-no.check b/test/files/neg/override-object-no.check
index 9cfda80fc3..972a719b3b 100644
--- a/test/files/neg/override-object-no.check
+++ b/test/files/neg/override-object-no.check
@@ -20,4 +20,12 @@ an overriding object must conform to the overridden object's class bound;
required: case2.Bar[Traversable[String]]
override object A extends Bar[List[String]] // err
^
-four errors found
+override-object-no.scala:52: error: overriding method x in trait A of type => SI9574.Foo.type;
+ method x has incompatible type
+ trait B extends A { def x: Bar.type } // should not compile (SI-9574)
+ ^
+override-object-no.scala:53: error: overriding method x in trait A of type => SI9574.Foo.type;
+ object x has incompatible type
+ trait C extends A { override object x }
+ ^
+6 errors found
diff --git a/test/files/neg/override-object-no.scala b/test/files/neg/override-object-no.scala
index 745cdb2332..517408886d 100644
--- a/test/files/neg/override-object-no.scala
+++ b/test/files/neg/override-object-no.scala
@@ -43,3 +43,14 @@ package case2 {
override object A extends Bar[List[String]] // err
}
}
+
+// Both overridden and overriding members must be objects, not vals with a module type
+object SI9574 {
+ object Foo
+ object Bar
+ trait A { def x: Foo.type }
+ trait B extends A { def x: Bar.type } // should not compile (SI-9574)
+ trait C extends A { override object x }
+ trait D { object x; def y = x }
+ trait E extends D { override val x: super.x.type = y } // OK but doesn't need object subtyping exception
+}