diff --git a/compiler/src/dotty/tools/dotc/typer/Typer.scala b/compiler/src/dotty/tools/dotc/typer/Typer.scala index f2e7e4a2c07c..4b54419bd7a2 100644 --- a/compiler/src/dotty/tools/dotc/typer/Typer.scala +++ b/compiler/src/dotty/tools/dotc/typer/Typer.scala @@ -2680,7 +2680,7 @@ class Typer(@constructorOnly nestingLevel: Int = 0) extends Namer val tpt1 = withoutMode(Mode.Pattern): typed(tree.tpt, AnyTypeConstructorProto) - val tparams = tpt1.tpe.typeParams + val tparams = tpt1.tpe.dealiasKeepAnnotsAndOpaques.typeParams if tpt1.tpe.isError then val args1 = tree.args.mapconserve(typedType(_)) assignType(cpy.AppliedTypeTree(tree)(tpt1, args1), tpt1, args1) diff --git a/tests/pos/i23752.scala b/tests/pos/i23752.scala new file mode 100644 index 000000000000..6e44f54c86f8 --- /dev/null +++ b/tests/pos/i23752.scala @@ -0,0 +1,14 @@ +trait MyOutput[T] +final type MyOutputAlias1[T] = MyOutput[T] +final type MyOutputAlias2 = MyOutput + +trait MyType +object MyType { + val value1: MyOutput[MyType] = ??? + val value2: MyOutputAlias1[MyType] = ??? + val value3: MyOutputAlias2[MyType] = ??? // was COMPILATION ERROR +} + +val value1: MyOutput[MyType] = ??? +val value2: MyOutputAlias1[MyType] = ??? +val value3: MyOutputAlias2[MyType] = ??? diff --git a/tests/pos/i23752min.scala b/tests/pos/i23752min.scala new file mode 100644 index 000000000000..62cc74a95c99 --- /dev/null +++ b/tests/pos/i23752min.scala @@ -0,0 +1,7 @@ +trait MyOutput[T] +type MyOutputAlias2 = MyOutput + +object MyType: + val v: MyOutputAlias2[String] = ??? // was COMPILATION ERROR + +@main def Test = ()