Skip to content

Refinement with concrete type and method throw RecursionOverflow:  #17381

Closed
@steinybot

Description

@steinybot

Compiler version

3.3.0-RC3

Minimized code

type Y = { type T = String; def u(): T }

trait Test {

  val y1: Y
  val y2 = y1.u()
}

Output

Recursion limit exceeded.
Maybe there is an illegal cyclic reference?
If that's not the case, you could also try to increase the stacksize using the -Xss JVM option.
For the unprocessed stack trace, compile with -Yno-decode-stacktraces.
A recurring operation is (inner to outer):

  find-member Object#T
  find-member Object#T
  find-member Object#T
  find-member Object#T
  find-member Object#T
  find-member Object#T
  find-member Object#T
  find-member Object#T
  find-member Object#T
  find-member Object#T
  ...

  find-member Object#T
  find-member Object#T
  find-member Object#T
  find-member Object#T
  find-member Object#T
  find-member Object#T
  find-member Object#T
  find-member Object#T
  find-member Object#T
  find-member y1.u

Expectation

I'm would expect this one to compile.

It is pretty strange. It triggers when:

  • The refinement has a concrete type member.
  • There is a method that has a parameter list (even if empty) and the return type is the type member

This is similar to #17380 although it appears to be quite different but perhaps it is the same underlying bug. This one throws at the call site.

Metadata

Metadata

Assignees

No one assigned

    Type

    No type

    Projects

    No projects

    Milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions