Skip to content

AssertionError with captureChecking, separate compilation, and byname param #26783

Description

@bishabosha

found when testing Result in lampepfl/steps. This crashes with not too much detail other than stack trace.

Compiler version

3.8.4, 3.9.0-RC5

Minimized code

// Lib.scala
import language.experimental.captureChecking

object Lib:
  def wrap[T](t: T): T = t // simulate e.g. constructor call for case class Result.Ok
  inline def make[T](x: => T): T = wrap(x) // simple form of Result.cond(predicate, ifTrue, orElse)
// Use.scala
import language.experimental.captureChecking

val a = Lib.make(1)
$ mkdir libout
$ scala compile -S 3.9.0-RC5 -d libout Lib.scala
$ scala compile -S 3.9.0-RC5 -cp libout Use.scala

Output (click arrow to expand)

Details
Error: Unexpected error when compiling repro-cond-crash_46c42ec178-b2cdff6dde: java.lang.AssertionError: assertion failed
        at scala.runtime.Scala3RunTime$.assertFailed(Scala3RunTime.scala:13)
        at dotty.tools.dotc.cc.CaptureOps$package$.recur$1(CaptureOps.scala:245)
        at dotty.tools.dotc.cc.CaptureOps$package$.boxDeeply(CaptureOps.scala:268)
        at dotty.tools.dotc.cc.Setup$$anon$2.transformTT(Setup.scala:610)
        at dotty.tools.dotc.cc.Setup$$anon$2.traverse$$anonfun$5(Setup.scala:679)
        at scala.runtime.function.JProcedure1.apply(JProcedure1.java:15)
        at scala.runtime.function.JProcedure1.apply(JProcedure1.java:10)
        at scala.collection.AbstractIterable.foreach(Iterable.scala:979)
        at scala.collection.IterableOps$WithFilter.foreach(Iterable.scala:946)
        at dotty.tools.dotc.cc.Setup$$anon$2.traverse(Setup.scala:674)
        at dotty.tools.dotc.ast.Trees$Instance$TreeTraverser.apply(Trees.scala:1819)
        at dotty.tools.dotc.ast.Trees$Instance$TreeTraverser.apply(Trees.scala:1819)
        at dotty.tools.dotc.ast.Trees$Instance$TreeAccumulator.foldOver(Trees.scala:1702)
        at dotty.tools.dotc.ast.Trees$Instance$TreeTraverser.traverseChildren(Trees.scala:1820)
        at dotty.tools.dotc.cc.Setup$$anon$2.traverse(Setup.scala:650)
        at dotty.tools.dotc.ast.Trees$Instance$TreeTraverser.apply(Trees.scala:1819)
        at dotty.tools.dotc.ast.Trees$Instance$TreeTraverser.apply(Trees.scala:1819)
        at dotty.tools.dotc.ast.Trees$Instance$TreeAccumulator.foldOver(Trees.scala:1710)
        at dotty.tools.dotc.ast.Trees$Instance$TreeAccumulator.foldOver(Trees.scala:1689)
        at dotty.tools.dotc.ast.Trees$Instance$TreeTraverser.traverseChildren(Trees.scala:1820)
        at dotty.tools.dotc.cc.Setup$$anon$2.traverse(Setup.scala:708)
        at dotty.tools.dotc.ast.Trees$Instance$TreeTraverser.apply(Trees.scala:1819)
        at dotty.tools.dotc.ast.Trees$Instance$TreeTraverser.apply(Trees.scala:1819)
        at dotty.tools.dotc.ast.Trees$Instance$TreeAccumulator.foldOver(Trees.scala:1736)
        at dotty.tools.dotc.ast.Trees$Instance$TreeTraverser.traverseChildren(Trees.scala:1820)
        at dotty.tools.dotc.cc.Setup$$anon$2.traverse(Setup.scala:708)
        at dotty.tools.dotc.cc.Setup$$anon$2.traverse(Setup.scala:667)
        at dotty.tools.dotc.ast.tpd$TreeTraverserWithPreciseImportContexts.recur$2(tpd.scala:1360)
        at dotty.tools.dotc.ast.tpd$TreeTraverserWithPreciseImportContexts.apply(tpd.scala:1363)
        at dotty.tools.dotc.ast.tpd$TreeTraverserWithPreciseImportContexts.apply(tpd.scala:1355)
        at dotty.tools.dotc.ast.Trees$Instance$TreeTraverser.traverse(Trees.scala:1818)
        at dotty.tools.dotc.ast.tpd$TreeTraverserWithPreciseImportContexts.recur$2(tpd.scala:1361)
        at dotty.tools.dotc.ast.tpd$TreeTraverserWithPreciseImportContexts.apply(tpd.scala:1363)
        at dotty.tools.dotc.ast.tpd$TreeTraverserWithPreciseImportContexts.apply(tpd.scala:1355)
        at dotty.tools.dotc.ast.Trees$Instance$TreeTraverser.traverse(Trees.scala:1818)
        at dotty.tools.dotc.ast.tpd$TreeTraverserWithPreciseImportContexts.recur$2(tpd.scala:1361)
        at dotty.tools.dotc.ast.tpd$TreeTraverserWithPreciseImportContexts.apply(tpd.scala:1363)
        at dotty.tools.dotc.ast.tpd$TreeTraverserWithPreciseImportContexts.apply(tpd.scala:1355)
        at dotty.tools.dotc.ast.Trees$Instance$TreeAccumulator.foldOver(Trees.scala:1778)
        at dotty.tools.dotc.ast.Trees$Instance$TreeTraverser.traverseChildren(Trees.scala:1820)
        at dotty.tools.dotc.cc.Setup$$anon$2.traverse(Setup.scala:708)
        at dotty.tools.dotc.ast.Trees$Instance$TreeTraverser.apply(Trees.scala:1819)
        at dotty.tools.dotc.ast.Trees$Instance$TreeTraverser.apply(Trees.scala:1819)
        at dotty.tools.dotc.ast.Trees$Instance$TreeAccumulator.foldOver(Trees.scala:1775)
        at dotty.tools.dotc.ast.Trees$Instance$TreeTraverser.traverseChildren(Trees.scala:1820)
        at dotty.tools.dotc.cc.Setup$$anon$2.traverse(Setup.scala:684)
        at dotty.tools.dotc.ast.tpd$TreeTraverserWithPreciseImportContexts.recur$2(tpd.scala:1360)
        at dotty.tools.dotc.ast.tpd$TreeTraverserWithPreciseImportContexts.apply(tpd.scala:1363)
        at dotty.tools.dotc.ast.tpd$TreeTraverserWithPreciseImportContexts.apply(tpd.scala:1355)
        at dotty.tools.dotc.ast.Trees$Instance$TreeTraverser.traverse(Trees.scala:1818)
        at dotty.tools.dotc.ast.tpd$TreeTraverserWithPreciseImportContexts.recur$2(tpd.scala:1361)
        at dotty.tools.dotc.ast.tpd$TreeTraverserWithPreciseImportContexts.apply(tpd.scala:1363)
        at dotty.tools.dotc.ast.tpd$TreeTraverserWithPreciseImportContexts.apply(tpd.scala:1355)
        at dotty.tools.dotc.ast.Trees$Instance$TreeTraverser.traverse(Trees.scala:1818)
        at dotty.tools.dotc.ast.tpd$TreeTraverserWithPreciseImportContexts.recur$2(tpd.scala:1358)
        at dotty.tools.dotc.ast.tpd$TreeTraverserWithPreciseImportContexts.apply(tpd.scala:1363)
        at dotty.tools.dotc.ast.tpd$TreeTraverserWithPreciseImportContexts.apply(tpd.scala:1355)
        at dotty.tools.dotc.ast.Trees$Instance$TreeAccumulator.foldOver(Trees.scala:1784)
        at dotty.tools.dotc.ast.Trees$Instance$TreeTraverser.traverseChildren(Trees.scala:1820)
        at dotty.tools.dotc.cc.Setup$$anon$2.traverse(Setup.scala:708)
        at dotty.tools.dotc.cc.Setup.setupUnit(Setup.scala:1040)
        at dotty.tools.dotc.cc.CheckCaptures$CaptureChecker.checkUnit(CheckCaptures.scala:2249)
        at dotty.tools.dotc.transform.Recheck.run(Recheck.scala:154)
        at dotty.tools.dotc.cc.CheckCaptures.run(CheckCaptures.scala:280)
        at dotty.tools.dotc.core.Phases$Phase.runOn$$anonfun$1(Phases.scala:405)
        at scala.runtime.function.JProcedure1.apply(JProcedure1.java:15)
        at scala.runtime.function.JProcedure1.apply(JProcedure1.java:10)
        at scala.collection.immutable.List.foreach(List.scala:331)
        at dotty.tools.dotc.core.Phases$Phase.runOn(Phases.scala:397)
        at dotty.tools.dotc.transform.Recheck.runOn(Recheck.scala:158)
        at dotty.tools.dotc.cc.CheckCaptures.runOn(CheckCaptures.scala:276)
        at dotty.tools.dotc.Run.runPhases$1(Run.scala:412)
        at dotty.tools.dotc.Run.compileUnits$$anonfun$1$$anonfun$2(Run.scala:454)
        at dotty.tools.dotc.Run.compileUnits$$anonfun$1$$anonfun$adapted$1(Run.scala:454)
        at scala.Function0.apply$mcV$sp(Function0.scala:42)
        at dotty.tools.dotc.Run.showProgress(Run.scala:517)
        at dotty.tools.dotc.Run.compileUnits$$anonfun$1(Run.scala:454)
        at dotty.tools.dotc.Run.compileUnits$$anonfun$adapted$1(Run.scala:467)
        at dotty.tools.dotc.util.Stats$.maybeMonitored(Stats.scala:69)
        at dotty.tools.dotc.Run.compileUnits(Run.scala:467)
        at dotty.tools.dotc.Run.compileSources(Run.scala:342)
        at dotty.tools.dotc.Run.compile(Run.scala:327)
        at dotty.tools.dotc.Driver.doCompile(Driver.scala:36)
        at dotty.tools.xsbt.CompilerBridgeDriver.run(CompilerBridgeDriver.java:141)
        at dotty.tools.xsbt.CompilerBridge.run(CompilerBridge.java:22)
        at sbt.internal.inc.AnalyzingCompiler.compile(AnalyzingCompiler.scala:91)
        at sbt.internal.inc.bloop.internal.BloopHighLevelCompiler.compileSources$1(BloopHighLevelCompiler.scala:148)
        at sbt.internal.inc.bloop.internal.BloopHighLevelCompiler.$anonfun$compile$9(BloopHighLevelCompiler.scala:181)
        at scala.runtime.java8.JFunction0$mcV$sp.apply(JFunction0$mcV$sp.java:23)
        at sbt.internal.inc.bloop.internal.BloopHighLevelCompiler.$anonfun$compile$1(BloopHighLevelCompiler.scala:73)
        at bloop.tracing.NoopTracer$.trace(BraveTracer.scala:53)
        at sbt.internal.inc.bloop.internal.BloopHighLevelCompiler.timed$1(BloopHighLevelCompiler.scala:72)
        at sbt.internal.inc.bloop.internal.BloopHighLevelCompiler.$anonfun$compile$8(BloopHighLevelCompiler.scala:181)
        at scala.runtime.java8.JFunction0$mcV$sp.apply(JFunction0$mcV$sp.java:23)
        at monix.eval.internal.TaskRunLoop$.startFull(TaskRunLoop.scala:81)
        at monix.eval.internal.TaskRestartCallback.syncOnSuccess(TaskRestartCallback.scala:101)
        at monix.eval.internal.TaskRestartCallback.onSuccess(TaskRestartCallback.scala:74)
        at monix.eval.internal.TaskExecuteOn$AsyncRegister$$anon$1.run(TaskExecuteOn.scala:71)
        at java.base/java.util.concurrent.ForkJoinTask$RunnableExecuteAction.exec(ForkJoinTask.java:1423)
        at java.base/java.util.concurrent.ForkJoinTask.doExec(ForkJoinTask.java:387)
        at java.base/java.util.concurrent.ForkJoinPool$WorkQueue.topLevelExec(ForkJoinPool.java:1312)
        at java.base/java.util.concurrent.ForkJoinPool.scan(ForkJoinPool.java:1843)
        at java.base/java.util.concurrent.ForkJoinPool.runWorker(ForkJoinPool.java:1808)
        at java.base/java.util.concurrent.ForkJoinWorkerThread.run(ForkJoinWorkerThread.java:188)

Metadata

Metadata

Assignees

No one assigned

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions