Closed
Description
import scala.quoted._
object Foo {
inline def foo2(): Unit = ~foo2Impl()
def foo2Impl(): Expr[Unit] = '()
inline def foo(): Unit = foo2()
}
fail Ycheck with
exception while typing inline def foo(): Unit = StagedStreams.foo2() of class class dotty.tools.dotc.ast.Trees$DefDef # 49
exception while typing @scala.annotation.internal.SourceFile(
"tests/run-no-deep-subtypes/staged-streams-macro/staged-streams_1.scala"
) final module class StagedStreams() extends Object() {
this: StagedStreams.type =>
inline def foo2(): Seq[Any] => Object =
{
def $anonfun$1(x$0: Seq[Any]): quoted.Expr[Unit] =
{
val tastyContext$1: scala.tasty.Tasty =
x$0.apply(0).asInstanceOf[scala.tasty.Tasty]
StagedStreams.foo2Impl()
}
closure($anonfun$1)
}
def foo2Impl(): quoted.Expr[Unit] =
scala.runtime.quoted.Unpickler.liftedExpr[Unit](())
inline def foo(): Unit = StagedStreams.foo2()
} of class class dotty.tools.dotc.ast.Trees$TypeDef # 180
exception while typing package <empty> {
import scala.quoted._
final lazy module val StagedStreams: StagedStreams = new StagedStreams()
@scala.annotation.internal.SourceFile(
"tests/run-no-deep-subtypes/staged-streams-macro/staged-streams_1.scala"
) final module class StagedStreams() extends Object() {
this: StagedStreams.type =>
inline def foo2(): Seq[Any] => Object =
{
def $anonfun$1(x$0: Seq[Any]): quoted.Expr[Unit] =
{
val tastyContext$1: scala.tasty.Tasty =
x$0.apply(0).asInstanceOf[scala.tasty.Tasty]
StagedStreams.foo2Impl()
}
closure($anonfun$1)
}
def foo2Impl(): quoted.Expr[Unit] =
scala.runtime.quoted.Unpickler.liftedExpr[Unit](())
inline def foo(): Unit = StagedStreams.foo2()
}
} of class class dotty.tools.dotc.ast.Trees$PackageDef # 181
*** error while checking tests/run-no-deep-subtypes/staged-streams-macro/staged-streams_1.scala after phase reifyQuotes ***
exception occurred while compiling tests/run-no-deep-subtypes/staged-streams-macro/staged-streams_1.scala
Exception in thread "main" java.lang.AssertionError: assertion failed: Types differ
Original type : Unit
After checking: Seq[Any] => Object
Original tree : StagedStreams.foo2()
After checking: StagedStreams.foo2()
Why different :
Subtype trace:
==> Seq[Any] => Object <:< Unit
<== Seq[Any] => Object <:< Unit = false
at scala.Predef$.assert(Predef.scala:219)
at dotty.tools.dotc.transform.TreeChecker$Checker.typedUnadapted(TreeChecker.scala:288)
at dotty.tools.dotc.typer.Typer.$anonfun$typed$2(Typer.scala:1870)
at dotty.tools.dotc.reporting.trace$.apply(trace.scala:40)
at dotty.tools.dotc.typer.Typer.typed(Typer.scala:1866)
at dotty.tools.dotc.typer.Typer.typed(Typer.scala:1882)
at dotty.tools.dotc.transform.TreeChecker$Checker.typed(TreeChecker.scala:263)
at dotty.tools.dotc.typer.Typer.typedExpr(Typer.scala:1941)
at dotty.tools.dotc.typer.Typer.$anonfun$typedDefDef$1(Typer.scala:1428)
at dotty.tools.dotc.util.Stats$.track(Stats.scala:35)
at dotty.tools.dotc.typer.Typer.typedDefDef(Typer.scala:1410)
at dotty.tools.dotc.transform.TreeChecker$Checker.super$typedDefDef(TreeChecker.scala:408)
at dotty.tools.dotc.transform.TreeChecker$Checker.$anonfun$typedDefDef$2(TreeChecker.scala:408)
at dotty.tools.dotc.transform.TreeChecker$Checker.withDefinedSyms(TreeChecker.scala:179)
at dotty.tools.dotc.transform.TreeChecker$Checker.$anonfun$typedDefDef$1(TreeChecker.scala:397)
at dotty.tools.dotc.transform.TreeChecker$Checker.withDefinedSyms(TreeChecker.scala:179)
at dotty.tools.dotc.transform.TreeChecker$Checker.typedDefDef(TreeChecker.scala:396)
...