Skip to content

Compiler crash in tryHeal when accessing Expr of Mirror from wrong staging level #8052

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Closed
biboudis opened this issue Jan 21, 2020 · 0 comments · Fixed by #8342
Closed

Compiler crash in tryHeal when accessing Expr of Mirror from wrong staging level #8052

biboudis opened this issue Jan 21, 2020 · 0 comments · Fixed by #8342

Comments

@biboudis
Copy link
Contributor

minimized code

import scala.deriving._
import scala.quoted._
import scala.quoted.matching._

object Macro2 {
  trait TC[T] {
    def test(): Unit
  }

  object TC {
    def derived[T: Type](ev: Expr[Mirror.Of[T]])(given qctx: QuoteContext): Expr[TC[T]] = '{
      new TC[T] {
        def encode(): Unit = $ev match {
          case '{ $m: Mirror.ProductOf[T] } => ???
        }
      }
    }
  }
}
Stack trace
*** error while checking tests/run-macros/i8007/Macro_2.scala after phase staging ***
java.lang.AssertionError: assertion failed: access to value evidence$1 from wrong staging level:
 - the definition is at level 0,
 - but the access is at level 1.
in Macro2$.TC$._$$anon.encode while compiling tests/run-macros/i8007/Macro_2.scala
Fatal compiler crash when compiling: tests/run-macros/i8007:
assertion failed: access to value evidence$1 from wrong staging level:
 - the definition is at level 0,
 - but the access is at level 1.
in Macro2$.TC$._$$anon.encode
dotty.DottyPredef$.assertFail(DottyPredef.scala:17)
dotty.tools.dotc.transform.Staging$$anon$1.tryHeal(Staging.scala:53)
dotty.tools.dotc.transform.PCPCheckAndHeal.dotty$tools$dotc$transform$PCPCheckAndHeal$$checkSymLevel(PCPCheckAndHeal.scala:179)
dotty.tools.dotc.transform.PCPCheckAndHeal.checkLevel(PCPCheckAndHeal.scala:100)
dotty.tools.dotc.transform.PCPCheckAndHeal.transform(PCPCheckAndHeal.scala:51)
dotty.tools.dotc.transform.PCPCheckAndHeal.transformSplice(PCPCheckAndHeal.scala:68)
dotty.tools.dotc.transform.TreeMapWithStages.transform(TreeMapWithStages.scala:99)
dotty.tools.dotc.transform.PCPCheckAndHeal.transform(PCPCheckAndHeal.scala:51)
dotty.tools.dotc.ast.Trees$Instance$TreeMap.transform$$anonfun$2(Trees.scala:1347)
scala.collection.immutable.List.mapConserve(List.scala:444)
dotty.tools.dotc.ast.Trees$Instance$TreeMap.transform(Trees.scala:1347)
dotty.tools.dotc.ast.Trees$Instance$TreeMap.transform(Trees.scala:1299)
dotty.tools.dotc.ast.TreeMapWithImplicits.transform(TreeMapWithImplicits.scala:117)
dotty.tools.dotc.transform.TreeMapWithStages.mapOverTree$1(TreeMapWithStages.scala:76)
dotty.tools.dotc.transform.TreeMapWithStages.transform(TreeMapWithStages.scala:126)
dotty.tools.dotc.transform.PCPCheckAndHeal.transform(PCPCheckAndHeal.scala:51)
dotty.tools.dotc.ast.Trees$Instance$TreeMap.transform(Trees.scala:1265)
dotty.tools.dotc.ast.TreeMapWithImplicits.transform(TreeMapWithImplicits.scala:117)
dotty.tools.dotc.transform.TreeMapWithStages.mapOverTree$1(TreeMapWithStages.scala:76)
dotty.tools.dotc.transform.TreeMapWithStages.transform(TreeMapWithStages.scala:126)
dotty.tools.dotc.transform.PCPCheckAndHeal.transform(PCPCheckAndHeal.scala:51)
dotty.tools.dotc.transform.PCPCheckAndHeal.transformQuotation(PCPCheckAndHeal.scala:58)
dotty.tools.dotc.transform.TreeMapWithStages.transform(TreeMapWithStages.scala:93)
dotty.tools.dotc.transform.PCPCheckAndHeal.transform(PCPCheckAndHeal.scala:51)
dotty.tools.dotc.ast.TreeMapWithImplicits.transform(TreeMapWithImplicits.scala:112)
dotty.tools.dotc.transform.TreeMapWithStages.mapOverTree$1(TreeMapWithStages.scala:76)
dotty.tools.dotc.transform.TreeMapWithStages.transform(TreeMapWithStages.scala:119)
dotty.tools.dotc.transform.PCPCheckAndHeal.transform(PCPCheckAndHeal.scala:51)
dotty.tools.dotc.ast.Trees$Instance$TreeMap.transform$$anonfun$2(Trees.scala:1347)
scala.collection.immutable.List.mapConserve(List.scala:444)
dotty.tools.dotc.ast.Trees$Instance$TreeMap.transform(Trees.scala:1347)
dotty.tools.dotc.ast.Trees$Instance$TreeMap.transformSub(Trees.scala:1351)
dotty.tools.dotc.ast.Trees$Instance$TreeMap.transform(Trees.scala:1277)
dotty.tools.dotc.ast.TreeMapWithImplicits.transform(TreeMapWithImplicits.scala:117)
dotty.tools.dotc.transform.TreeMapWithStages.mapOverTree$1(TreeMapWithStages.scala:76)
dotty.tools.dotc.transform.TreeMapWithStages.transform(TreeMapWithStages.scala:126)
dotty.tools.dotc.transform.PCPCheckAndHeal.transform(PCPCheckAndHeal.scala:51)
dotty.tools.dotc.ast.TreeMapWithImplicits.transform(TreeMapWithImplicits.scala:97)
dotty.tools.dotc.transform.TreeMapWithStages.mapOverTree$1(TreeMapWithStages.scala:76)
dotty.tools.dotc.transform.TreeMapWithStages.transform(TreeMapWithStages.scala:126)
dotty.tools.dotc.transform.PCPCheckAndHeal.transform(PCPCheckAndHeal.scala:50)
dotty.tools.dotc.ast.TreeMapWithImplicits.traverse$1(TreeMapWithImplicits.scala:51)
dotty.tools.dotc.ast.TreeMapWithImplicits.transformStats(TreeMapWithImplicits.scala:58)
dotty.tools.dotc.ast.TreeMapWithImplicits.transform(TreeMapWithImplicits.scala:108)
dotty.tools.dotc.transform.TreeMapWithStages.mapOverTree$1(TreeMapWithStages.scala:76)
dotty.tools.dotc.transform.TreeMapWithStages.transform(TreeMapWithStages.scala:126)
dotty.tools.dotc.transform.PCPCheckAndHeal.transform(PCPCheckAndHeal.scala:50)
dotty.tools.dotc.ast.Trees$Instance$TreeMap.transform(Trees.scala:1327)
dotty.tools.dotc.ast.TreeMapWithImplicits.transform(TreeMapWithImplicits.scala:101)
dotty.tools.dotc.transform.TreeMapWithStages.mapOverTree$1(TreeMapWithStages.scala:76)
dotty.tools.dotc.transform.TreeMapWithStages.transform(TreeMapWithStages.scala:126)
dotty.tools.dotc.transform.PCPCheckAndHeal.transform(PCPCheckAndHeal.scala:50)
dotty.tools.dotc.ast.Trees$Instance$TreeMap.transform$$anonfun$2(Trees.scala:1347)
scala.collection.immutable.List.mapConserve(List.scala:444)
dotty.tools.dotc.ast.Trees$Instance$TreeMap.transform(Trees.scala:1347)
dotty.tools.dotc.ast.Trees$Instance$TreeMap.transformStats(Trees.scala:1345)
dotty.tools.dotc.ast.Trees$Instance$TreeMap.transform(Trees.scala:1271)
dotty.tools.dotc.ast.TreeMapWithImplicits.transform(TreeMapWithImplicits.scala:89)
dotty.tools.dotc.transform.TreeMapWithStages.mapOverTree$1(TreeMapWithStages.scala:76)
dotty.tools.dotc.transform.TreeMapWithStages.transform(TreeMapWithStages.scala:105)
dotty.tools.dotc.transform.PCPCheckAndHeal.transform(PCPCheckAndHeal.scala:51)
dotty.tools.dotc.transform.PCPCheckAndHeal.transformQuotation(PCPCheckAndHeal.scala:58)
dotty.tools.dotc.transform.TreeMapWithStages.transform(TreeMapWithStages.scala:93)
dotty.tools.dotc.transform.PCPCheckAndHeal.transform(PCPCheckAndHeal.scala:51)
dotty.tools.dotc.ast.Trees$Instance$TreeMap.transform(Trees.scala:1251)
dotty.tools.dotc.ast.TreeMapWithImplicits.transform(TreeMapWithImplicits.scala:117)
dotty.tools.dotc.transform.TreeMapWithStages.mapOverTree$1(TreeMapWithStages.scala:76)
dotty.tools.dotc.transform.TreeMapWithStages.transform(TreeMapWithStages.scala:126)
dotty.tools.dotc.transform.PCPCheckAndHeal.transform(PCPCheckAndHeal.scala:51)
dotty.tools.dotc.ast.Trees$Instance$TreeMap.transform(Trees.scala:1257)
dotty.tools.dotc.ast.TreeMapWithImplicits.transform(TreeMapWithImplicits.scala:117)
dotty.tools.dotc.transform.TreeMapWithStages.mapOverTree$1(TreeMapWithStages.scala:76)
dotty.tools.dotc.transform.TreeMapWithStages.transform(TreeMapWithStages.scala:126)
dotty.tools.dotc.transform.PCPCheckAndHeal.transform(PCPCheckAndHeal.scala:51)
dotty.tools.dotc.ast.TreeMapWithImplicits.transform(TreeMapWithImplicits.scala:97)
dotty.tools.dotc.transform.TreeMapWithStages.mapOverTree$1(TreeMapWithStages.scala:76)
dotty.tools.dotc.transform.TreeMapWithStages.transform(TreeMapWithStages.scala:126)
dotty.tools.dotc.transform.PCPCheckAndHeal.transform(PCPCheckAndHeal.scala:50)
dotty.tools.dotc.ast.TreeMapWithImplicits.traverse$1(TreeMapWithImplicits.scala:51)
dotty.tools.dotc.ast.TreeMapWithImplicits.transformStats(TreeMapWithImplicits.scala:58)
dotty.tools.dotc.ast.TreeMapWithImplicits.transform(TreeMapWithImplicits.scala:108)
dotty.tools.dotc.transform.TreeMapWithStages.mapOverTree$1(TreeMapWithStages.scala:76)
dotty.tools.dotc.transform.TreeMapWithStages.transform(TreeMapWithStages.scala:126)
dotty.tools.dotc.transform.PCPCheckAndHeal.transform(PCPCheckAndHeal.scala:50)
dotty.tools.dotc.ast.Trees$Instance$TreeMap.transform(Trees.scala:1327)
dotty.tools.dotc.ast.TreeMapWithImplicits.transform(TreeMapWithImplicits.scala:101)
dotty.tools.dotc.transform.TreeMapWithStages.mapOverTree$1(TreeMapWithStages.scala:76)
dotty.tools.dotc.transform.TreeMapWithStages.transform(TreeMapWithStages.scala:126)
dotty.tools.dotc.transform.PCPCheckAndHeal.transform(PCPCheckAndHeal.scala:50)
dotty.tools.dotc.ast.TreeMapWithImplicits.traverse$1(TreeMapWithImplicits.scala:51)
dotty.tools.dotc.ast.TreeMapWithImplicits.transformStats(TreeMapWithImplicits.scala:58)
dotty.tools.dotc.ast.TreeMapWithImplicits.transform(TreeMapWithImplicits.scala:108)
dotty.tools.dotc.transform.TreeMapWithStages.mapOverTree$1(TreeMapWithStages.scala:76)
dotty.tools.dotc.transform.TreeMapWithStages.transform(TreeMapWithStages.scala:126)
dotty.tools.dotc.transform.PCPCheckAndHeal.transform(PCPCheckAndHeal.scala:50)
dotty.tools.dotc.ast.Trees$Instance$TreeMap.transform(Trees.scala:1327)
dotty.tools.dotc.ast.TreeMapWithImplicits.transform(TreeMapWithImplicits.scala:101)
dotty.tools.dotc.transform.TreeMapWithStages.mapOverTree$1(TreeMapWithStages.scala:76)
dotty.tools.dotc.transform.TreeMapWithStages.transform(TreeMapWithStages.scala:126)
dotty.tools.dotc.transform.PCPCheckAndHeal.transform(PCPCheckAndHeal.scala:50)
dotty.tools.dotc.ast.Trees$Instance$TreeMap.transform$$anonfun$2(Trees.scala:1347)
scala.collection.immutable.List.mapConserve(List.scala:444)
dotty.tools.dotc.ast.Trees$Instance$TreeMap.transform(Trees.scala:1347)
dotty.tools.dotc.ast.Trees$Instance$TreeMap.transformStats(Trees.scala:1345)
dotty.tools.dotc.ast.Trees$Instance$TreeMap.transform(Trees.scala:1333)
dotty.tools.dotc.ast.TreeMapWithImplicits.transform(TreeMapWithImplicits.scala:101)
dotty.tools.dotc.transform.TreeMapWithStages.mapOverTree$1(TreeMapWithStages.scala:76)
dotty.tools.dotc.transform.TreeMapWithStages.transform(TreeMapWithStages.scala:126)
dotty.tools.dotc.transform.PCPCheckAndHeal.transform(PCPCheckAndHeal.scala:51)
dotty.tools.dotc.transform.Staging.checkPostCondition(Staging.scala:61)
dotty.tools.dotc.transform.TreeChecker.dotty$tools$dotc$transform$TreeChecker$Checker$$_$typedUnadapted$$anonfun$1(TreeChecker.scala:321)
dotty.runtime.function.JProcedure1.apply(JProcedure1.java:15)
dotty.runtime.function.JProcedure1.apply(JProcedure1.java:10)
scala.collection.immutable.List.foreach(List.scala:305)
dotty.tools.dotc.transform.TreeChecker$Checker.typedUnadapted(TreeChecker.scala:321)
dotty.tools.dotc.typer.Typer.typed(Typer.scala:2243)
dotty.tools.dotc.typer.Typer.typed(Typer.scala:2255)
dotty.tools.dotc.transform.TreeChecker$Checker.typed(TreeChecker.scala:289)
dotty.tools.dotc.typer.Typer.typedExpr(Typer.scala:2363)
dotty.tools.dotc.transform.TreeChecker.check(TreeChecker.scala:124)
dotty.tools.dotc.transform.TreeChecker.run(TreeChecker.scala:97)
dotty.tools.dotc.core.Phases$Phase.runOn$$anonfun$1(Phases.scala:315)
scala.collection.immutable.List.map(List.scala:219)
dotty.tools.dotc.core.Phases$Phase.runOn(Phases.scala:316)
dotty.tools.dotc.Run.runPhases$4$$anonfun$4(Run.scala:167)
dotty.runtime.function.JProcedure1.apply(JProcedure1.java:15)
dotty.runtime.function.JProcedure1.apply(JProcedure1.java:10)
scala.collection.ArrayOps$.foreach$extension(ArrayOps.scala:1323)
dotty.tools.dotc.Run.runPhases$5(Run.scala:177)
dotty.tools.dotc.Run.compileUnits$$anonfun$1(Run.scala:185)
dotty.runtime.function.JFunction0$mcV$sp.apply(JFunction0$mcV$sp.java:12)
dotty.tools.dotc.util.Stats$.maybeMonitored(Stats.scala:65)
dotty.tools.dotc.Run.compileUnits(Run.scala:192)
dotty.tools.dotc.Run.compileSources(Run.scala:129)
dotty.tools.dotc.Run.compile(Run.scala:112)
dotty.tools.dotc.Driver.doCompile(Driver.scala:36)
dotty.tools.dotc.Driver.process(Driver.scala:189)
dotty.tools.dotc.Driver.process(Driver.scala:158)
dotty.tools.vulpix.ParallelTesting$Test.compile(ParallelTesting.scala:483)
dotty.tools.vulpix.ParallelTesting$CompilationLogic.compileTestSource$$anonfun$2$$anonfun$1(ParallelTesting.scala:208)
scala.collection.immutable.List.map(List.scala:223)
dotty.tools.vulpix.ParallelTesting$CompilationLogic.compileTestSource$$anonfun$1(ParallelTesting.scala:208)
scala.util.Try$.apply(Try.scala:210)
dotty.tools.vulpix.ParallelTesting$CompilationLogic.dotty$tools$vulpix$ParallelTesting$CompilationLogic$$compileTestSource(ParallelTesting.scala:209)
dotty.tools.vulpix.ParallelTesting$$anon$2.checkTestSource$$anonfun$1(ParallelTesting.scala:252)
dotty.runtime.function.JFunction0$mcV$sp.apply(JFunction0$mcV$sp.java:12)
dotty.tools.vulpix.ParallelTesting$Test.tryCompile(ParallelTesting.scala:424)
dotty.tools.vulpix.ParallelTesting$$anon$2.checkTestSource(ParallelTesting.scala:255)
dotty.tools.vulpix.ParallelTesting$Test$LoggedRunnable.run(ParallelTesting.scala:323)
dotty.tools.vulpix.ParallelTesting$$anon$2.run(ParallelTesting.scala:250)
java.util.concurrent.ForkJoinTask$AdaptedRunnableAction.exec(ForkJoinTask.java:1386)
java.util.concurrent.ForkJoinTask.doExec(ForkJoinTask.java:289)
java.util.concurrent.ForkJoinPool$WorkQueue.runTask(ForkJoinPool.java:1056)
java.util.concurrent.ForkJoinPool.runWorker(ForkJoinPool.java:1692)
java.util.concurrent.ForkJoinWorkerThread.run(ForkJoinWorkerThread.java:157)```
</details>
nicolasstucki added a commit to dotty-staging/dotty that referenced this issue Feb 19, 2020
nicolasstucki added a commit to dotty-staging/dotty that referenced this issue Feb 19, 2020
nicolasstucki added a commit to dotty-staging/dotty that referenced this issue Feb 19, 2020
nicolasstucki added a commit to dotty-staging/dotty that referenced this issue Feb 20, 2020
nicolasstucki added a commit to dotty-staging/dotty that referenced this issue Feb 20, 2020
nicolasstucki added a commit to dotty-staging/dotty that referenced this issue Feb 20, 2020
nicolasstucki added a commit to dotty-staging/dotty that referenced this issue Feb 22, 2020
nicolasstucki added a commit to dotty-staging/dotty that referenced this issue Feb 24, 2020
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

Successfully merging a pull request may close this issue.

2 participants