Skip to content

StackOverflow with cyclic structural type #2088

Closed
@smarter

Description

@smarter

This doesn't compile, as expected:

class Base {
  type A = {
    val m: A
  }
}
2 |  type A = {
  |       ^
  |illegal cyclic reference: alias Object{m: Base.this.A} of type A refers back to the type itself

But this crashes instead of giving an error:

class Base {
  type A = {
    val m: Foo.A
  }
}

object Foo extends Base
        at dotty.tools.dotc.core.Types$TypeAccumulator.foldOver(Types.scala:3644)
        at dotty.tools.dotc.typer.VarianceChecker$Validator$$anonfun$apply$2.apply(VarianceChecker.scala:100)
        at dotty.tools.dotc.typer.VarianceChecker$Validator$$anonfun$apply$2.apply(VarianceChecker.scala:84)
        at dotty.tools.dotc.reporting.Reporting$class.traceIndented(Reporter.scala:136)
        at dotty.tools.dotc.core.Contexts$Context.traceIndented(Contexts.scala:57)
        at dotty.tools.dotc.typer.VarianceChecker$Validator$.apply(VarianceChecker.scala:83)
        at dotty.tools.dotc.typer.VarianceChecker$Validator$$anonfun$apply$2.apply(VarianceChecker.scala:89)
        at dotty.tools.dotc.typer.VarianceChecker$Validator$$anonfun$apply$2.apply(VarianceChecker.scala:84)
        at dotty.tools.dotc.reporting.Reporting$class.traceIndented(Reporter.scala:136)
        at dotty.tools.dotc.core.Contexts$Context.traceIndented(Contexts.scala:57)
        at dotty.tools.dotc.typer.VarianceChecker$Validator$.apply(VarianceChecker.scala:83)
        at dotty.tools.dotc.typer.VarianceChecker$Validator$.apply(VarianceChecker.scala:27)
        at dotty.tools.dotc.core.Types$TypeAccumulator.foldOver(Types.scala:3644)
        at dotty.tools.dotc.typer.VarianceChecker$Validator$$anonfun$apply$2.apply(VarianceChecker.scala:100)
        at dotty.tools.dotc.typer.VarianceChecker$Validator$$anonfun$apply$2.apply(VarianceChecker.scala:84)
        at dotty.tools.dotc.reporting.Reporting$class.traceIndented(Reporter.scala:136)
        at dotty.tools.dotc.core.Contexts$Context.traceIndented(Contexts.scala:57)
        at dotty.tools.dotc.typer.VarianceChecker$Validator$.apply(VarianceChecker.scala:83)
        at dotty.tools.dotc.typer.VarianceChecker$Validator$$anonfun$apply$2.apply(VarianceChecker.scala:89)
        at dotty.tools.dotc.typer.VarianceChecker$Validator$$anonfun$apply$2.apply(VarianceChecker.scala:84)
        at dotty.tools.dotc.reporting.Reporting$class.traceIndented(Reporter.scala:136)
...

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