Skip to content

Compiler crashes when declaring a class private #23918

@nrinaudo

Description

@nrinaudo

Compiler version

3.8.0-RC1-bin-20250814-0cf7a18-NIGHTLY

Minimized code

//> using scala 3.nightly
//> using option -language:experimental.captureChecking

import scala.util.control.*
import caps.*
import scala.caps.unsafe.unsafeAssumePure

private case class Break[A] (label: Label[A]^{}, value: A) extends ControlThrowable with NoStackTrace
private object Break:
  def apply[T](label: Label[T], value: T) =
    new Break(label.unsafeAssumePure, value)

class Label[E] extends SharedCapability

Output (click arrow to expand)

[2Khttps://repo1.maven.org/maven2/org/scala-lang/scala3-library_3/maven-metadata.xml
[2K  No new update since 2025-09-08 16:53:58
[2A[10000D[2K[1B[2K[1B[2A[2Khttps://repo1.maven.org/maven2/org/scala-lang/scala3-library_3/maven-metadata.xml
[2K  No new update since 2025-09-08 16:53:58
[2A[10000D[2K[1B[2K[1B[2AException in thread "main" java.lang.StackOverflowError
	at dotty.tools.dotc.core.Substituters$.mapArgs$1(Substituters.scala:22)
	at dotty.tools.dotc.core.Substituters$.subst(Substituters.scala:22)
	at dotty.tools.dotc.core.Types$Type.subst(Types.scala:1970)
	at dotty.tools.dotc.core.Types$LambdaType.newLikeThis$$anonfun$2(Types.scala:3906)
	at dotty.tools.dotc.core.Types$MethodType.<init>(Types.scala:4177)
	at dotty.tools.dotc.core.Types$CachedMethodType.<init>(Types.scala:4201)
	at dotty.tools.dotc.core.Types$MethodTypeCompanion.apply(Types.scala:4281)
	at dotty.tools.dotc.core.Types$MethodTypeCompanion.apply(Types.scala:4280)
	at dotty.tools.dotc.core.Types$LambdaType.newLikeThis(Types.scala:3906)
	at dotty.tools.dotc.core.Types$LambdaType.newLikeThis$(Types.scala:3793)
	at dotty.tools.dotc.core.Types$MethodOrPoly.newLikeThis(Types.scala:3919)
	at dotty.tools.dotc.core.Types$LambdaType.derivedLambdaType(Types.scala:3896)
	at dotty.tools.dotc.core.Types$LambdaType.derivedLambdaType$(Types.scala:3793)
	at dotty.tools.dotc.core.Types$MethodOrPoly.derivedLambdaType(Types.scala:3919)
	at dotty.tools.dotc.core.Types$TypeMap.derivedLambdaType(Types.scala:6255)
	at dotty.tools.dotc.core.Types$TypeMap.mapOverLambda(Types.scala:6276)
	at dotty.tools.dotc.core.Types$TypeMap.mapOver(Types.scala:6364)
	at dotty.tools.dotc.core.Substituters$.substParams(Substituters.scala:163)
	at dotty.tools.dotc.core.Types$Type.substParams(Types.scala:1990)
	at dotty.tools.dotc.core.Types$LambdaType.instantiate(Types.scala:3832)
	at dotty.tools.dotc.core.Types$LambdaType.instantiate$(Types.scala:3793)
	at dotty.tools.dotc.core.Types$MethodOrPoly.instantiate(Types.scala:3919)
	at dotty.tools.dotc.typer.TypeAssigner.assignType(TypeAssigner.scala:395)
	at dotty.tools.dotc.typer.TypeAssigner.assignType$(TypeAssigner.scala:18)
	at dotty.tools.dotc.typer.Typer.assignType(Typer.scala:155)
	at dotty.tools.dotc.ast.tpd$.TypeApply(tpd.scala:58)
	at dotty.tools.dotc.ast.tpd$TreeOps$.appliedToTypeTrees$extension(tpd.scala:1018)
	at dotty.tools.dotc.ast.tpd$TreeOps$.appliedToTypes$extension(tpd.scala:1010)
	at dotty.tools.dotc.ast.tpd$.New(tpd.scala:569)
	at dotty.tools.dotc.ast.tpd$.New(tpd.scala:561)
	at dotty.tools.dotc.cc.CaptureAnnotation.tree(CaptureAnnotation.scala:49)
	at dotty.tools.dotc.cc.Capabilities$CapToFresh.apply(Capability.scala:900)
	at dotty.tools.dotc.cc.Capabilities$CapToFresh.apply(Capability.scala:901)
	at dotty.tools.dotc.cc.Capabilities$CapToFresh.apply(Capability.scala:901)
	at dotty.tools.dotc.cc.Capabilities$CapToFresh.apply(Capability.scala:901)
        [...]

Note that removing the private modifiers fixes the issue.

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