From aa14d560bffb9796d4520ca19678c60e027f07fa Mon Sep 17 00:00:00 2001 From: Matt Bovel Date: Mon, 24 Nov 2025 18:49:32 +0000 Subject: [PATCH] Dealias type of type constructor in `typedAppliedTypeTree` --- compiler/src/dotty/tools/dotc/typer/Typer.scala | 2 +- tests/pos/i23752.scala | 14 ++++++++++++++ tests/pos/i23752min.scala | 7 +++++++ 3 files changed, 22 insertions(+), 1 deletion(-) create mode 100644 tests/pos/i23752.scala create mode 100644 tests/pos/i23752min.scala 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 = ()