From c60218303b65f66ddc8a4afa0add8506d5272533 Mon Sep 17 00:00:00 2001 From: Guillaume Martres Date: Sun, 5 Oct 2014 02:02:53 +0200 Subject: [PATCH] Fix isSubType(A#X, B#X) not checking if A <: B --- src/dotty/tools/dotc/core/TypeComparer.scala | 1 + test/dotc/tests.scala | 1 + tests/neg/subtyping.scala | 13 +++++++++++++ 3 files changed, 15 insertions(+) create mode 100644 tests/neg/subtyping.scala diff --git a/src/dotty/tools/dotc/core/TypeComparer.scala b/src/dotty/tools/dotc/core/TypeComparer.scala index 1e1d02be2fd5..0737249221f5 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 fa577573a2af..c4b34e0e90b0 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 000000000000..d7f849ddc650 --- /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); + } +}