diff --git a/compiler/src/dotty/tools/dotc/typer/Dynamic.scala b/compiler/src/dotty/tools/dotc/typer/Dynamic.scala index afc9e2c08f46..f62bb766dd37 100644 --- a/compiler/src/dotty/tools/dotc/typer/Dynamic.scala +++ b/compiler/src/dotty/tools/dotc/typer/Dynamic.scala @@ -245,7 +245,7 @@ trait Dynamic { if tpe.classSymbol.isDerivedValueClass && qual.tpe <:< defn.ReflectSelectableTypeRef then val genericUnderlying = ValueClasses.valueClassUnbox(tpe.classSymbol.asClass) val underlying = tpe.select(genericUnderlying).widen.resultType - New(tpe.widen, tree.cast(underlying) :: Nil) + New(tpe.widen.dealias, tree.cast(underlying) :: Nil) else tree maybeBoxed.cast(tpe) diff --git a/tests/pos/i24056.scala b/tests/pos/i24056.scala new file mode 100644 index 000000000000..f25a3547f0d3 --- /dev/null +++ b/tests/pos/i24056.scala @@ -0,0 +1,8 @@ +trait DFBit +final class DFVal[+T, +M](val value: Int) extends AnyVal +type DFValOf[+T] = DFVal[T, Any] + +class Top: + val dmn1 = new scala.reflect.Selectable: + val o: DFValOf[DFBit] = ??? + val x = dmn1.o diff --git a/tests/run/i24056.scala b/tests/run/i24056.scala new file mode 100644 index 000000000000..2eb2b9a4e6b7 --- /dev/null +++ b/tests/run/i24056.scala @@ -0,0 +1,13 @@ +trait DFBit +final class DFVal[+T, +M](val value: Int) extends AnyVal +type DFValOf[+T] = DFVal[T, Any] + +class Top: + val dmn1 = new scala.reflect.Selectable: + val o: DFValOf[DFBit] = DFVal(42) + val x: DFValOf[DFBit] = dmn1.o + +object Test: + def main(args: Array[String]): Unit = + val t = Top() + assert(t.x.value == 42)