aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGuillaume Martres <smarter@ubuntu.com>2014-10-05 02:02:53 +0200
committerGuillaume Martres <smarter@ubuntu.com>2014-10-05 02:02:53 +0200
commitc60218303b65f66ddc8a4afa0add8506d5272533 (patch)
treed1505eff3b8594150101f0d906cc94e7394c79c1
parentf57753ff673d39ab68f2182459d5cfb2125d15a1 (diff)
downloaddotty-c60218303b65f66ddc8a4afa0add8506d5272533.tar.gz
dotty-c60218303b65f66ddc8a4afa0add8506d5272533.tar.bz2
dotty-c60218303b65f66ddc8a4afa0add8506d5272533.zip
Fix isSubType(A#X, B#X) not checking if A <: B
-rw-r--r--src/dotty/tools/dotc/core/TypeComparer.scala1
-rw-r--r--test/dotc/tests.scala1
-rw-r--r--tests/neg/subtyping.scala13
3 files changed, 15 insertions, 0 deletions
diff --git a/src/dotty/tools/dotc/core/TypeComparer.scala b/src/dotty/tools/dotc/core/TypeComparer.scala
index 1e1d02be2..073724922 100644
--- a/src/dotty/tools/dotc/core/TypeComparer.scala
+++ b/src/dotty/tools/dotc/core/TypeComparer.scala
@@ -476,6 +476,7 @@ class TypeComparer(initctx: Context) extends DotClass {
|| sym1.isClass
&& pre2.classSymbol.exists
&& pre2.abstractTypeMembers.isEmpty
+ && isSubType(pre1, pre2)
)
}
)
diff --git a/test/dotc/tests.scala b/test/dotc/tests.scala
index fa577573a..c4b34e0e9 100644
--- a/test/dotc/tests.scala
+++ b/test/dotc/tests.scala
@@ -87,6 +87,7 @@ class tests extends CompilerTest {
@Test def neg_t1843 = compileFile(negDir, "t1843", xerrors = 1)
@Test def neg_t1843_variances = compileFile(negDir, "t1843-variances", xerrors = 1)
@Test def neg_t2994 = compileFile(negDir, "t2994", xerrors = 2)
+ @Test def neg_subtyping = compileFile(negDir, "subtyping", xerrors = 1)
@Test def neg_variances = compileFile(negDir, "variances", xerrors = 2)
@Test def dotc = compileDir(dotcDir + "tools/dotc", twice)
diff --git a/tests/neg/subtyping.scala b/tests/neg/subtyping.scala
new file mode 100644
index 000000000..d7f849ddc
--- /dev/null
+++ b/tests/neg/subtyping.scala
@@ -0,0 +1,13 @@
+class B {
+ class X
+}
+class A extends B
+
+object Test {
+ def foo(a: A#X): Unit = {
+ return;
+ }
+ def test(): Unit = {
+ foo(??? : B#X);
+ }
+}