Skip to content

StackOverflow during staging #22688

Open
Open
@hearnadam

Description

@hearnadam

On my github CI, I consistently see compiler crashes during staging. The code itself has been hard to minimize due to the crash not happening locally. I tried a variety of stack sizes, but once I reach -Xss512k other parts of the code fail to compile due to non-trivial inlining.

Compiler version

  • 3.6.3

Minimized code

The code is very similar to this file: https://github.com/getkyo/kyo/blob/main/kyo-examples/jvm/src/main/scala/examples/ledger/api/Endpoints.scala

It uses kyo-direct. The code is private, but happy to share privately with maintainers.

Output (click arrow to expand)

error] ## Exception when compiling 3 sources to /home/runner/work/winedb/winedb/backend/target/scala-3.6.3/classes
[error] java.lang.StackOverflowError
[error] dotty.tools.dotc.ast.Trees$Instance$TreeMap.transform(Trees.scala:1524)
[error] dotty.tools.dotc.ast.TreeMapWithImplicits.transform(TreeMapWithImplicits.scala:67)
[error] dotty.tools.dotc.staging.TreeMapWithStages.transform(TreeMapWithStages.scala:46)
[error] dotty.tools.dotc.staging.CrossStageSafety.transform(CrossStageSafety.scala:123)
[error] dotty.tools.dotc.ast.Trees$Instance$TreeMap.transform(Trees.scala:1531)
[error] dotty.tools.dotc.ast.TreeMapWithImplicits.transform(TreeMapWithImplicits.scala:67)
[error] dotty.tools.dotc.staging.TreeMapWithStages.transform(TreeMapWithStages.scala:46)
[error] dotty.tools.dotc.staging.CrossStageSafety.transform(CrossStageSafety.scala:123)
[error] dotty.tools.dotc.ast.Trees$Instance$TreeMap.transform(Trees.scala:1537)
[error] dotty.tools.dotc.ast.TreeMapWithImplicits.transform(TreeMapWithImplicits.scala:67)
[error] dotty.tools.dotc.staging.TreeMapWithStages.transform(TreeMapWithStages.scala:46)
[error] dotty.tools.dotc.staging.CrossStageSafety.transform(CrossStageSafety.scala:123)
[error] dotty.tools.dotc.ast.Trees$Instance$TreeMap.transform$$anonfun$1(Trees.scala:1643)
[error] scala.collection.immutable.List.mapConserve(List.scala:473)
[error] dotty.tools.dotc.ast.Trees$Instance$TreeMap.transform(Trees.scala:1643)
[error] dotty.tools.dotc.ast.TreeMapWithImplicits.transform(TreeMapWithImplicits.scala:55)
[error] dotty.tools.dotc.staging.TreeMapWithStages.transform(TreeMapWithStages.scala:34)
[error] dotty.tools.dotc.staging.CrossStageSafety.transform(CrossStageSafety.scala:123)
[error] dotty.tools.dotc.ast.Trees$Instance$TreeMap.transform(Trees.scala:1605)
[error] dotty.tools.dotc.ast.TreeMapWithImplicits.transform(TreeMapWithImplicits.scala:67)
[error] dotty.tools.dotc.staging.TreeMapWithStages.transform(TreeMapWithStages.scala:43)
[error] dotty.tools.dotc.staging.CrossStageSafety.transform(CrossStageSafety.scala:123)
[error] dotty.tools.dotc.ast.tpd$TreeMapWithPreciseStatContexts.loop$2(tpd.scala:1289)
[error] dotty.tools.dotc.ast.tpd$TreeMapWithPreciseStatContexts.transformStats(tpd.scala:1289)
[error] dotty.tools.dotc.ast.tpd$TreeMapWithPreciseStatContexts.transformBlock(tpd.scala:1294)
[error] dotty.tools.dotc.ast.Trees$Instance$TreeMap.transform(Trees.scala:1551)
[error] dotty.tools.dotc.ast.TreeMapWithImplicits.transform(TreeMapWithImplicits.scala:43)
[error] dotty.tools.dotc.staging.TreeMapWithStages.transform(TreeMapWithStages.scala:24)
[error] dotty.tools.dotc.staging.CrossStageSafety.transform(CrossStageSafety.scala:123)
[error] dotty.tools.dotc.ast.Trees$Instance$TreeMap.transform(Trees.scala:1600)
[error] dotty.tools.dotc.ast.TreeMapWithImplicits.transform(TreeMapWithImplicits.scala:67)
[error] dotty.tools.dotc.staging.TreeMapWithStages.transform(TreeMapWithStages.scala:43)
[error] dotty.tools.dotc.staging.CrossStageSafety.transform(CrossStageSafety.scala:123)
[error] dotty.tools.dotc.ast.tpd$TreeMapWithPreciseStatContexts.loop$2(tpd.scala:1289)
[error] dotty.tools.dotc.ast.tpd$TreeMapWithPreciseStatContexts.transformStats(tpd.scala:1289)
[error] dotty.tools.dotc.ast.tpd$TreeMapWithPreciseStatContexts.transformBlock(tpd.scala:1294)
[error] dotty.tools.dotc.ast.Trees$Instance$TreeMap.transform(Trees.scala:1551)
[error] dotty.tools.dotc.ast.TreeMapWithImplicits.transform(TreeMapWithImplicits.scala:43)
[error] dotty.tools.dotc.staging.TreeMapWithStages.transform(TreeMapWithStages.scala:24)
[error] dotty.tools.dotc.staging.CrossStageSafety.transform(CrossStageSafety.scala:123)
[error] dotty.tools.dotc.ast.Trees$Instance$TreeMap.transform(Trees.scala:1545)
[error] dotty.tools.dotc.ast.TreeMapWithImplicits.transform(TreeMapWithImplicits.scala:67)
[error] dotty.tools.dotc.staging.TreeMapWithStages.transform(TreeMapWithStages.scala:46)
[error] dotty.tools.dotc.staging.CrossStageSafety.transform(CrossStageSafety.scala:123)
[error] dotty.tools.dotc.ast.Trees$Instance$TreeMap.transform(Trees.scala:1571)
[error] dotty.tools.dotc.ast.TreeMapWithImplicits.transform(TreeMapWithImplicits.scala:67)
[error] dotty.tools.dotc.staging.TreeMapWithStages.transform(TreeMapWithStages.scala:46)
[error] dotty.tools.dotc.staging.CrossStageSafety.transform(CrossStageSafety.scala:123)
[error] dotty.tools.dotc.ast.Trees$Instance$TreeMap.transform(Trees.scala:1531)
[error] dotty.tools.dotc.ast.TreeMapWithImplicits.transform(TreeMapWithImplicits.scala:67)
[error] dotty.tools.dotc.staging.TreeMapWithStages.transform(TreeMapWithStages.scala:46)
[error] dotty.tools.dotc.staging.CrossStageSafety.transform(CrossStageSafety.scala:123)
[error] dotty.tools.dotc.ast.Trees$Instance$TreeMap.transform(Trees.scala:1539)
[error] dotty.tools.dotc.ast.TreeMapWithImplicits.transform(TreeMapWithImplicits.scala:67)
[error] dotty.tools.dotc.staging.TreeMapWithStages.transform(TreeMapWithStages.scala:46)
[error] dotty.tools.dotc.staging.CrossStageSafety.transform(CrossStageSafety.scala:123)
[error] dotty.tools.dotc.ast.Trees$Instance$TreeMap.transform(Trees.scala:1537)
[error] dotty.tools.dotc.ast.TreeMapWithImplicits.transform(TreeMapWithImplicits.scala:67)
[error] dotty.tools.dotc.staging.TreeMapWithStages.transform(TreeMapWithStages.scala:46)
[error] dotty.tools.dotc.staging.CrossStageSafety.transform(CrossStageSafety.scala:123)
[error] dotty.tools.dotc.ast.tpd$TreeMapWithPreciseStatContexts.transformBlock$$anonfun$1$$anonfun$1(tpd.scala:1294)
[error] dotty.tools.dotc.ast.tpd$TreeMapWithPreciseStatContexts.loop$2(tpd.scala:1276)
[error] dotty.tools.dotc.ast.tpd$TreeMapWithPreciseStatContexts.transformStats(tpd.scala:1289)
[error] dotty.tools.dotc.ast.tpd$TreeMapWithPreciseStatContexts.transformBlock(tpd.scala:1294)
[error] dotty.tools.dotc.ast.Trees$Instance$TreeMap.transform(Trees.scala:1551)
[error] dotty.tools.dotc.ast.TreeMapWithImplicits.transform(TreeMapWithImplicits.scala:43)
[error] dotty.tools.dotc.staging.TreeMapWithStages.transform(TreeMapWithStages.scala:24)
[error] dotty.tools.dotc.staging.CrossStageSafety.transform(CrossStageSafety.scala:123)
[error] dotty.tools.dotc.ast.tpd$TreeMapWithPreciseStatContexts.transformBlock$$anonfun$1$$anonfun$1(tpd.scala:1294)
[error] dotty.tools.dotc.ast.tpd$TreeMapWithPreciseStatContexts.loop$2(tpd.scala:1276)
[error] dotty.tools.dotc.ast.tpd$TreeMapWithPreciseStatContexts.transformStats(tpd.scala:1289)
[error] dotty.tools.dotc.ast.tpd$TreeMapWithPreciseStatContexts.transformBlock(tpd.scala:1294)
[error] dotty.tools.dotc.ast.Trees$Instance$TreeMap.transform(Trees.scala:1551)
[error] dotty.tools.dotc.ast.TreeMapWithImplicits.transform(TreeMapWithImplicits.scala:43)
[error] dotty.tools.dotc.staging.TreeMapWithStages.transform(TreeMapWithStages.scala:24)
[error] dotty.tools.dotc.staging.CrossStageSafety.transform(CrossStageSafety.scala:123)
[error] dotty.tools.dotc.ast.Trees$Instance$TreeMap.transform(Trees.scala:1545)
[error] dotty.tools.dotc.ast.TreeMapWithImplicits.transform(TreeMapWithImplicits.scala:67)
[error] dotty.tools.dotc.staging.TreeMapWithStages.transform(TreeMapWithStages.scala:46)
[error] dotty.tools.dotc.staging.CrossStageSafety.transform(CrossStageSafety.scala:123)
[error] dotty.tools.dotc.ast.Trees$Instance$TreeMap.transform(Trees.scala:1571)
[error] dotty.tools.dotc.ast.TreeMapWithImplicits.transform(TreeMapWithImplicits.scala:67)
[error] dotty.tools.dotc.staging.TreeMapWithStages.transform(TreeMapWithStages.scala:46)
[error] dotty.tools.dotc.staging.CrossStageSafety.transform(CrossStageSafety.scala:123)
[error] dotty.tools.dotc.ast.Trees$Instance$TreeMap.transform(Trees.scala:1531)
[error] dotty.tools.dotc.ast.TreeMapWithImplicits.transform(TreeMapWithImplicits.scala:67)
[error] dotty.tools.dotc.staging.TreeMapWithStages.transform(TreeMapWithStages.scala:46)
[error] dotty.tools.dotc.staging.CrossStageSafety.transform(CrossStageSafety.scala:123)
[error] dotty.tools.dotc.ast.Trees$Instance$TreeMap.transform(Trees.scala:1539)
[error] dotty.tools.dotc.ast.TreeMapWithImplicits.transform(TreeMapWithImplicits.scala:67)
[error] dotty.tools.dotc.staging.TreeMapWithStages.transform(TreeMapWithStages.scala:46)
[error] dotty.tools.dotc.staging.CrossStageSafety.transform(CrossStageSafety.scala:123)
[error] dotty.tools.dotc.ast.Trees$Instance$TreeMap.transform(Trees.scala:1537)
[error] dotty.tools.dotc.ast.TreeMapWithImplicits.transform(TreeMapWithImplicits.scala:67)
[error] dotty.tools.dotc.staging.TreeMapWithStages.transform(TreeMapWithStages.scala:46)
[error] dotty.tools.dotc.staging.CrossStageSafety.transform(CrossStageSafety.scala:123)
[error] dotty.tools.dotc.ast.tpd$TreeMapWithPreciseStatContexts.transformBlock$$anonfun$1$$anonfun$1(tpd.scala:1294)
[error] dotty.tools.dotc.ast.tpd$TreeMapWithPreciseStatContexts.loop$2(tpd.scala:1276)
[error] dotty.tools.dotc.ast.tpd$TreeMapWithPreciseStatContexts.transformStats(tpd.scala:1289)
[error] dotty.tools.dotc.ast.tpd$TreeMapWithPreciseStatContexts.transformBlock(tpd.scala:1294)
[error] dotty.tools.dotc.ast.Trees$Instance$TreeMap.transform(Trees.scala:1551)
[error] dotty.tools.dotc.ast.TreeMapWithImplicits.transform(TreeMapWithImplicits.scala:43)
[error] dotty.tools.dotc.staging.TreeMapWithStages.transform(TreeMapWithStages.scala:24)
[error] dotty.tools.dotc.staging.CrossStageSafety.transform(CrossStageSafety.scala:123)
[error] dotty.tools.dotc.ast.tpd$TreeMapWithPreciseStatContexts.transformBlock$$anonfun$1$$anonfun$1(tpd.scala:1294)
[error] dotty.tools.dotc.ast.tpd$TreeMapWithPreciseStatContexts.loop$2(tpd.scala:1276)
[error] dotty.tools.dotc.ast.tpd$TreeMapWithPreciseStatContexts.transformStats(tpd.scala:1289)
[error] dotty.tools.dotc.ast.tpd$TreeMapWithPreciseStatContexts.transformBlock(tpd.scala:1294)
[error] dotty.tools.dotc.ast.Trees$Instance$TreeMap.transform(Trees.scala:1551)
[error] dotty.tools.dotc.ast.TreeMapWithImplicits.transform(TreeMapWithImplicits.scala:43)
[error] dotty.tools.dotc.staging.TreeMapWithStages.transform(TreeMapWithStages.scala:24)
[error] dotty.tools.dotc.staging.CrossStageSafety.transform(CrossStageSafety.scala:123)
[error] dotty.tools.dotc.ast.Trees$Instance$TreeMap.transform(Trees.scala:1545)
[error] dotty.tools.dotc.ast.TreeMapWithImplicits.transform(TreeMapWithImplicits.scala:67)
[error] dotty.tools.dotc.staging.TreeMapWithStages.transform(TreeMapWithStages.scala:46)
[error] dotty.tools.dotc.staging.CrossStageSafety.transform(CrossStageSafety.scala:123)
[error] dotty.tools.dotc.ast.Trees$Instance$TreeMap.transform(Trees.scala:1571)
[error] dotty.tools.dotc.ast.TreeMapWithImplicits.transform(TreeMapWithImplicits.scala:67)
[error] dotty.tools.dotc.staging.TreeMapWithStages.transform(TreeMapWithStages.scala:46)
[error] dotty.tools.dotc.staging.CrossStageSafety.transform(CrossStageSafety.scala:123)
[error] dotty.tools.dotc.ast.Trees$Instance$TreeMap.transform(Trees.scala:1531)
[error] dotty.tools.dotc.ast.TreeMapWithImplicits.transform(TreeMapWithImplicits.scala:67)
[error] dotty.tools.dotc.staging.TreeMapWithStages.transform(TreeMapWithStages.scala:46)
[error] dotty.tools.dotc.staging.CrossStageSafety.transform(CrossStageSafety.scala:123)
[error] dotty.tools.dotc.ast.Trees$Instance$TreeMap.transform(Trees.scala:1539)
[error] dotty.tools.dotc.ast.TreeMapWithImplicits.transform(TreeMapWithImplicits.scala:67)
[error] dotty.tools.dotc.staging.TreeMapWithStages.transform(TreeMapWithStages.scala:46)
[error] dotty.tools.dotc.staging.CrossStageSafety.transform(CrossStageSafety.scala:123)
[error] dotty.tools.dotc.ast.Trees$Instance$TreeMap.transform(Trees.scala:1537)
[error] dotty.tools.dotc.ast.TreeMapWithImplicits.transform(TreeMapWithImplicits.scala:67)
[error] dotty.tools.dotc.staging.TreeMapWithStages.transform(TreeMapWithStages.scala:46)
[error] dotty.tools.dotc.staging.CrossStageSafety.transform(CrossStageSafety.scala:123)
[error] dotty.tools.dotc.ast.tpd$TreeMapWithPreciseStatContexts.transformBlock$$anonfun$1$$anonfun$1(tpd.scala:1294)
[error] dotty.tools.dotc.ast.tpd$TreeMapWithPreciseStatContexts.loop$2(tpd.scala:1276)
[error] dotty.tools.dotc.ast.tpd$TreeMapWithPreciseStatContexts.transformStats(tpd.scala:1289)
[error] dotty.tools.dotc.ast.tpd$TreeMapWithPreciseStatContexts.transformBlock(tpd.scala:1294)
[error] dotty.tools.dotc.ast.Trees$Instance$TreeMap.transform(Trees.scala:1551)
[error] dotty.tools.dotc.ast.TreeMapWithImplicits.transform(TreeMapWithImplicits.scala:43)
[error] dotty.tools.dotc.staging.TreeMapWithStages.transform(TreeMapWithStages.scala:24)
[error] dotty.tools.dotc.ast.TreeMapWithImplicits.transform(TreeMapWithImplicits.scala:43)
[error] dotty.tools.dotc.staging.TreeMapWithStages.transform(TreeMapWithStages.scala:24)
[error] dotty.tools.dotc.staging.CrossStageSafety.transform(CrossStageSafety.scala:123)
[error] dotty.tools.dotc.ast.Trees$Instance$TreeMap.transform(Trees.scala:1600)
[error] dotty.tools.dotc.ast.TreeMapWithImplicits.transform(TreeMapWithImplicits.scala:67)
[error] dotty.tools.dotc.staging.TreeMapWithStages.transform(TreeMapWithStages.scala:43)
[error] dotty.tools.dotc.staging.CrossStageSafety.transform(CrossStageSafety.scala:123)
[error] dotty.tools.dotc.ast.tpd$TreeMapWithPreciseStatContexts.loop$2(tpd.scala:1289)
[error] dotty.tools.dotc.ast.tpd$TreeMapWithPreciseStatContexts.transformStats(tpd.scala:1289)
[error] dotty.tools.dotc.ast.tpd$TreeMapWithPreciseStatContexts.transformBlock(tpd.scala:1294)
[error] dotty.tools.dotc.ast.Trees$Instance$TreeMap.transform(Trees.scala:1551)
[error] dotty.tools.dotc.ast.TreeMapWithImplicits.transform(TreeMapWithImplicits.scala:43)
[error] dotty.tools.dotc.staging.TreeMapWithStages.transform(TreeMapWithStages.scala:24)
[error] dotty.tools.dotc.staging.CrossStageSafety.transform(CrossStageSafety.scala:123)
[error] dotty.tools.dotc.ast.Trees$Instance$TreeMap.transform(Trees.scala:1545)
[error] dotty.tools.dotc.ast.TreeMapWithImplicits.transform(TreeMapWithImplicits.scala:67)
[error] dotty.tools.dotc.staging.TreeMapWithStages.transform(TreeMapWithStages.scala:46)
[error] dotty.tools.dotc.staging.CrossStageSafety.transform(CrossStageSafety.scala:123)
[error] dotty.tools.dotc.ast.Trees$Instance$TreeMap.transform(Trees.scala:1571)
[error] dotty.tools.dotc.ast.TreeMapWithImplicits.transform(TreeMapWithImplicits.scala:67)
[error] dotty.tools.dotc.staging.TreeMapWithStages.transform(TreeMapWithStages.scala:46)
[error] dotty.tools.dotc.staging.CrossStageSafety.transform(CrossStageSafety.scala:123)
[error] dotty.tools.dotc.ast.Trees$Instance$TreeMap.transform(Trees.scala:1531)
[error] dotty.tools.dotc.ast.TreeMapWithImplicits.transform(TreeMapWithImplicits.scala:67)
[error] dotty.tools.dotc.staging.TreeMapWithStages.transform(TreeMapWithStages.scala:46)
[error] dotty.tools.dotc.staging.CrossStageSafety.transform(CrossStageSafety.scala:123)
[error] dotty.tools.dotc.ast.Trees$Instance$TreeMap.transform(Trees.scala:1539)
[error] dotty.tools.dotc.ast.TreeMapWithImplicits.transform(TreeMapWithImplicits.scala:67)
[error] dotty.tools.dotc.staging.TreeMapWithStages.transform(TreeMapWithStages.scala:46)
[error] dotty.tools.dotc.staging.CrossStageSafety.transform(CrossStageSafety.scala:123)
[error] dotty.tools.dotc.ast.Trees$Instance$TreeMap.transform(Trees.scala:1537)
[error] dotty.tools.dotc.ast.TreeMapWithImplicits.transform(TreeMapWithImplicits.scala:67)
[error] dotty.tools.dotc.staging.TreeMapWithStages.transform(TreeMapWithStages.scala:46)
[error] dotty.tools.dotc.staging.CrossStageSafety.transform(CrossStageSafety.scala:123)
[error] dotty.tools.dotc.ast.tpd$TreeMapWithPreciseStatContexts.transformBlock$$anonfun$1$$anonfun$1(tpd.scala:1294)

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