diff options
-rw-r--r-- | src/dotty/tools/dotc/core/TypeComparer.scala | 8 | ||||
-rw-r--r-- | tests/pos/i1447.scala | 10 |
2 files changed, 17 insertions, 1 deletions
diff --git a/src/dotty/tools/dotc/core/TypeComparer.scala b/src/dotty/tools/dotc/core/TypeComparer.scala index 18eb424bc..d6ada7244 100644 --- a/src/dotty/tools/dotc/core/TypeComparer.scala +++ b/src/dotty/tools/dotc/core/TypeComparer.scala @@ -165,7 +165,13 @@ class TypeComparer(initctx: Context) extends DotClass with ConstraintHandling { // However the original judgment should be true. case _ => } - val sym1 = tp1.symbol + val sym1 = + if (tp1.symbol.is(ModuleClass) && tp2.symbol.is(ModuleVal)) + // For convenience we want X$ <:< X.type + // This is safe because X$ self-type is X.type + tp1.symbol.companionModule + else + tp1.symbol if ((sym1 ne NoSymbol) && (sym1 eq tp2.symbol)) ctx.erasedTypes || sym1.isStaticOwner || diff --git a/tests/pos/i1447.scala b/tests/pos/i1447.scala new file mode 100644 index 000000000..661fc3917 --- /dev/null +++ b/tests/pos/i1447.scala @@ -0,0 +1,10 @@ +case object X + +object Test { + val Alias = X + + val x: X.type = Alias + + type Alias = X.type + val a: Alias = Alias +} |