Skip to content

Capture leak by pattern matching on GADT #25320

@Alex1005a

Description

@Alex1005a

Compiler version

3.8.4-RC1-bin-20260222-dd3cd80-NIGHTLY

Minimized code

sealed trait AbstractBox[A]
case class Box[A](x: A) extends AbstractBox[A]
def leak[A](x: AbstractBox[A^]): A = {
  x match {
    case Box(y) => y
  }
}

It is also possible to compile code with a leaky non-polymorphic capability without a GADT.

case class Foo()
case class Box[A](x: A)
def fooLeak(x: Box[Foo^]): Box[Foo] = {
  x match {
    case Box(y) => Box(y)
  }
}

Output

Both examples compile.

Expectation

Should not compile.

Metadata

Metadata

Type

No type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions