Skip to content

Commit e0b290c

Browse files
committed
Merge pull request #179 from smarter/fix/namedtype-subtyping
Fix isSubType(A#X, B#X) not checking if A <: B
2 parents f57753f + c602183 commit e0b290c

File tree

3 files changed

+15
-0
lines changed

3 files changed

+15
-0
lines changed

src/dotty/tools/dotc/core/TypeComparer.scala

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -476,6 +476,7 @@ class TypeComparer(initctx: Context) extends DotClass {
476476
|| sym1.isClass
477477
&& pre2.classSymbol.exists
478478
&& pre2.abstractTypeMembers.isEmpty
479+
&& isSubType(pre1, pre2)
479480
)
480481
}
481482
)

test/dotc/tests.scala

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -87,6 +87,7 @@ class tests extends CompilerTest {
8787
@Test def neg_t1843 = compileFile(negDir, "t1843", xerrors = 1)
8888
@Test def neg_t1843_variances = compileFile(negDir, "t1843-variances", xerrors = 1)
8989
@Test def neg_t2994 = compileFile(negDir, "t2994", xerrors = 2)
90+
@Test def neg_subtyping = compileFile(negDir, "subtyping", xerrors = 1)
9091
@Test def neg_variances = compileFile(negDir, "variances", xerrors = 2)
9192

9293
@Test def dotc = compileDir(dotcDir + "tools/dotc", twice)

tests/neg/subtyping.scala

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
class B {
2+
class X
3+
}
4+
class A extends B
5+
6+
object Test {
7+
def foo(a: A#X): Unit = {
8+
return;
9+
}
10+
def test(): Unit = {
11+
foo(??? : B#X);
12+
}
13+
}

0 commit comments

Comments
 (0)