Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Unreasonably slow (or even non-terminating) compilation of pattern match involving GADT reasoning on nested types #16785

Closed
TomasMikula opened this issue Jan 29, 2023 · 36 comments · Fixed by #16827

Comments

@TomasMikula
Copy link
Contributor

TomasMikula commented Jan 29, 2023

Compiler version

3.2.2
3.3.0-RC2

Reproduction steps

git clone https://github.com/TomasMikula/libretto.git
cd libretto
git checkout 075f9f1911652ccaaa77dbf16e0b35ebd4a9dfc3
sbt core/compile

Note that I hit this bug in the middle of a refactoring session, so most likely the code should not compile just yet.
It is hard to minimize, because whatever I undo, I do get an actual compiler error. I'm hoping you could detect where it's looping, anyway.

UPDATE: Here's a minimization:

class VarImpl[P, A]()

class ContextImpl[Var[_]]()

trait Lambdas[F[_, _], P] {

  type Var[A] = VarImpl[P, A]

}

class LambdasImpl[F[_, _], P] extends Lambdas[F, P] {

  opaque type Context = ContextImpl[Var]

  sealed trait Foo[A]
  case class Bar[T, U]() extends Foo[F[Var[T], Var[U]]]

  def go[X](that: Foo[Var[X]]): Unit =
    that match
      case _ => ()
}

Output

After a while, compilation hangs with 100% of 1 CPU core.

@TomasMikula TomasMikula added itype:bug itype:crash stat:needs triage Every issue needs to have an "area" and "itype" label labels Jan 29, 2023
@TomasMikula
Copy link
Contributor Author

TomasMikula commented Jan 29, 2023

3.2.1 does give me a few errors, so it is a regression. Actually, 3.2.1 rejects the code because of some type checking issues that are fixed in 3.2.2. This commit reproduces the compiler hang for 3.2.1: cb455f2ad06d50da921fed2bb6bdb9aeeacbab84.

@smarter
Copy link
Member

smarter commented Jan 29, 2023

Just tried it on my machine and I can't reproduce the hang:

[root@HEAD]> core/compile
[info] compiling 83 Scala sources to /home/smarter/opt/libretto/core/target/scala-3.2.2/classes ...
[error] -- [E008] Not Found Error: /home/smarter/opt/libretto/core/src/main/scala/libretto/util/atomic/package.scala:19:13
[error] 19 |      go(ref.getOpaque())
[error]    |         ^^^^^^^^^^^^^
[error]    |value getOpaque is not a member of java.util.concurrent.atomic.AtomicReference[A]
[error]    |
[error]    |where:    A is a type in method modifyOpaque with bounds <: AnyRef
[error] -- [E008] Not Found Error: /home/smarter/opt/libretto/core/src/main/scala/libretto/util/atomic/package.scala:32:13
[error] 32 |      go(ref.getOpaque())
[error]    |         ^^^^^^^^^^^^^
[error]    |value getOpaque is not a member of java.util.concurrent.atomic.AtomicReference[A]
[error]    |
[error]    |where:    A is a type in method modifyOpaqueWith with bounds <: AnyRef
[error] -- [E008] Not Found Error: /home/smarter/opt/libretto/core/src/main/scala/libretto/util/atomic/package.scala:44:12
[error] 44 |    if (ref.weakCompareAndSetPlain(expected, next)) {
[error]    |        ^^^^^^^^^^^^^^^^^^^^^^^^^^
[error]    |value weakCompareAndSetPlain is not a member of java.util.concurrent.atomic.AtomicReference[A]
[error]    |
[error]    |where:    A is a type in method compareAndSetOpaque with bounds <: AnyRef
[error] -- [E008] Not Found Error: /home/smarter/opt/libretto/core/src/main/scala/libretto/util/atomic/package.scala:47:24
[error] 47 |      val current = ref.getOpaque()
[error]    |                    ^^^^^^^^^^^^^
[error]    |value getOpaque is not a member of java.util.concurrent.atomic.AtomicReference[A]
[error]    |
[error]    |where:    A is a type in method compareAndSetOpaque with bounds <: AnyRef
[error] four errors found
[error] (core / Compile / compileIncremental) Compilation failed
[error] Total time: 20 s, completed 29 janv. 2023 21:17:32

It's possible the hang requires incremental compilation to only recompile a subset of the files in the project.

@smarter
Copy link
Member

smarter commented Jan 29, 2023

(if you can reproduce it on your machine, using jstack to get a stack trace might give a clue to the root cause)

@TomasMikula
Copy link
Contributor Author

@smarter Those errors seem unrelated altogether. What Java version are you using? the getOpaque method was added in Java 9.

@TomasMikula
Copy link
Contributor Author

Here's the stack trace from jstack (click to expand)
"pool-17-thread-2" #120 prio=5 os_prio=31 cpu=698337.19ms elapsed=730.77s allocated=116G defined_classes=7096 tid=0x00007fd845aa9000 nid=0xb503 runnable  [0x000070000bc8d000]
   java.lang.Thread.State: RUNNABLE
	at dotty.tools.dotc.core.Types$Type.loop$1(Types.scala:268)
	at dotty.tools.dotc.core.Types$Type.derivesFrom(Types.scala:292)
	at dotty.tools.dotc.core.TypeComparer.isSubPrefix$1(TypeComparer.scala:1015)
	at dotty.tools.dotc.core.TypeComparer.loop$1(TypeComparer.scala:1195)
	at dotty.tools.dotc.core.TypeComparer.isMatchingApply$1(TypeComparer.scala:1232)
	at dotty.tools.dotc.core.TypeComparer.compareAppliedType2$1(TypeComparer.scala:1302)
	at dotty.tools.dotc.core.TypeComparer.thirdTry$1(TypeComparer.scala:609)
	at dotty.tools.dotc.core.TypeComparer.secondTry$1(TypeComparer.scala:539)
	at dotty.tools.dotc.core.TypeComparer.firstTry$1(TypeComparer.scala:401)
	at dotty.tools.dotc.core.TypeComparer.monitoredIsSubType$1(TypeComparer.scala:275)
	at dotty.tools.dotc.core.TypeComparer.recur(TypeComparer.scala:1430)
	at dotty.tools.dotc.core.TypeComparer.isSubType(TypeComparer.scala:210)
	at dotty.tools.dotc.core.TypeComparer.isSubType(TypeComparer.scala:220)
	at dotty.tools.dotc.core.TypeComparer.isSub(TypeComparer.scala:222)
	at dotty.tools.dotc.core.ConstraintHandling.op$proxy3$1(ConstraintHandling.scala:455)
	at dotty.tools.dotc.core.ConstraintHandling.isSubTypeWhenFrozen(ConstraintHandling.scala:455)
	at dotty.tools.dotc.core.ConstraintHandling.isSubTypeWhenFrozen$(ConstraintHandling.scala:29)
	at dotty.tools.dotc.core.TypeComparer.isSubTypeWhenFrozen(TypeComparer.scala:30)
	at dotty.tools.dotc.core.TypeComparer.dropIfSuper(TypeComparer.scala:2338)
	at dotty.tools.dotc.core.TypeComparer.glb(TypeComparer.scala:2202)
	at dotty.tools.dotc.core.TypeComparer$.glb(TypeComparer.scala:2946)
	at dotty.tools.dotc.core.Types$Type.$amp(Types.scala:1141)
	at dotty.tools.dotc.core.SymDenotations$ClassDenotation.computeAndOrType$1(SymDenotations.scala:2209)
	at dotty.tools.dotc.core.SymDenotations$ClassDenotation.recur$4(SymDenotations.scala:2218)
	at dotty.tools.dotc.core.SymDenotations$ClassDenotation.recur$4(SymDenotations.scala:2178)
	at dotty.tools.dotc.core.SymDenotations$ClassDenotation.computeTypeProxy$1(SymDenotations.scala:2186)
	at dotty.tools.dotc.core.SymDenotations$ClassDenotation.recur$4(SymDenotations.scala:2194)
	at dotty.tools.dotc.core.SymDenotations$ClassDenotation.baseTypeOf(SymDenotations.scala:2238)
	at dotty.tools.dotc.core.Types$Type.baseType(Types.scala:1134)
	at dotty.tools.dotc.core.Types$NamedType.argDenot(Types.scala:2393)
	at dotty.tools.dotc.core.Types$NamedType.fromDesignator$1(Types.scala:2338)
	at dotty.tools.dotc.core.Types$NamedType.computeDenot(Types.scala:2354)
	at dotty.tools.dotc.core.Types$NamedType.denot(Types.scala:2311)
	at dotty.tools.dotc.core.Types$NamedType.info(Types.scala:2299)
	at dotty.tools.dotc.core.TypeComparer.thirdTryNamed$1(TypeComparer.scala:542)
	at dotty.tools.dotc.core.TypeComparer.thirdTry$1(TypeComparer.scala:611)
	at dotty.tools.dotc.core.TypeComparer.secondTry$1(TypeComparer.scala:539)
	at dotty.tools.dotc.core.TypeComparer.compareNamed$1(TypeComparer.scala:322)
	at dotty.tools.dotc.core.TypeComparer.firstTry$1(TypeComparer.scala:328)
	at dotty.tools.dotc.core.TypeComparer.monitoredIsSubType$1(TypeComparer.scala:275)
	at dotty.tools.dotc.core.TypeComparer.recur(TypeComparer.scala:1430)
	at dotty.tools.dotc.core.TypeComparer.isSubType(TypeComparer.scala:210)
	at dotty.tools.dotc.core.TypeComparer.isSubType(TypeComparer.scala:220)
	at dotty.tools.dotc.core.TypeComparer.isSub(TypeComparer.scala:222)
	at dotty.tools.dotc.core.ConstraintHandling.op$proxy3$1(ConstraintHandling.scala:455)
	at dotty.tools.dotc.core.ConstraintHandling.isSubTypeWhenFrozen(ConstraintHandling.scala:455)
	at dotty.tools.dotc.core.ConstraintHandling.isSubTypeWhenFrozen$(ConstraintHandling.scala:29)
	at dotty.tools.dotc.core.TypeComparer.isSubTypeWhenFrozen(TypeComparer.scala:30)
	at dotty.tools.dotc.core.TypeComparer.compareGADT$1(TypeComparer.scala:546)
	at dotty.tools.dotc.core.TypeComparer.thirdTryNamed$1(TypeComparer.scala:560)
	at dotty.tools.dotc.core.TypeComparer.thirdTry$1(TypeComparer.scala:611)
	at dotty.tools.dotc.core.TypeComparer.secondTry$1(TypeComparer.scala:539)
	at dotty.tools.dotc.core.TypeComparer.compareNamed$1(TypeComparer.scala:322)
	at dotty.tools.dotc.core.TypeComparer.firstTry$1(TypeComparer.scala:328)
	at dotty.tools.dotc.core.TypeComparer.monitoredIsSubType$1(TypeComparer.scala:275)
	at dotty.tools.dotc.core.TypeComparer.recur(TypeComparer.scala:1430)
	at dotty.tools.dotc.core.TypeComparer.isSubType(TypeComparer.scala:210)
	at dotty.tools.dotc.core.TypeComparer.isSubType(TypeComparer.scala:220)
	at dotty.tools.dotc.core.TypeComparer.isSameType(TypeComparer.scala:2140)
	at dotty.tools.dotc.core.TypeComparer.isSame(TypeComparer.scala:2147)
	at dotty.tools.dotc.core.ConstraintHandling.op$proxy4$1(ConstraintHandling.scala:456)
	at dotty.tools.dotc.core.ConstraintHandling.isSameTypeWhenFrozen(ConstraintHandling.scala:456)
	at dotty.tools.dotc.core.ConstraintHandling.isSameTypeWhenFrozen$(ConstraintHandling.scala:29)
	at dotty.tools.dotc.core.TypeComparer.isSameTypeWhenFrozen(TypeComparer.scala:30)
	at dotty.tools.dotc.core.TypeComparer.singletonInterval(TypeComparer.scala:2181)
	at dotty.tools.dotc.core.TypeComparer.glbArgs(TypeComparer.scala:2314)
	at dotty.tools.dotc.core.TypeComparer.glbArgs(TypeComparer.scala:2325)
	at dotty.tools.dotc.core.TypeComparer.glbArgs(TypeComparer.scala:2325)
	at dotty.tools.dotc.core.TypeComparer.distributeAnd(TypeComparer.scala:2480)
	at dotty.tools.dotc.core.TypeComparer.andTypeGen(TypeComparer.scala:2387)
	at dotty.tools.dotc.core.TypeComparer.andType(TypeComparer.scala:2415)
	at dotty.tools.dotc.core.TypeComparer.glb(TypeComparer.scala:2227)
	at dotty.tools.dotc.core.TypeComparer$.glb(TypeComparer.scala:2946)
	at dotty.tools.dotc.core.Types$Type.$amp(Types.scala:1141)
	at dotty.tools.dotc.core.SymDenotations$ClassDenotation.computeAndOrType$1(SymDenotations.scala:2209)
	at dotty.tools.dotc.core.SymDenotations$ClassDenotation.recur$4(SymDenotations.scala:2218)
	at dotty.tools.dotc.core.SymDenotations$ClassDenotation.recur$4(SymDenotations.scala:2178)
	at dotty.tools.dotc.core.SymDenotations$ClassDenotation.computeTypeProxy$1(SymDenotations.scala:2186)
	at dotty.tools.dotc.core.SymDenotations$ClassDenotation.recur$4(SymDenotations.scala:2194)
	at dotty.tools.dotc.core.SymDenotations$ClassDenotation.baseTypeOf(SymDenotations.scala:2238)
	at dotty.tools.dotc.core.Types$Type.baseType(Types.scala:1134)
	at dotty.tools.dotc.core.Types$NamedType.argDenot(Types.scala:2393)
	at dotty.tools.dotc.core.Types$NamedType.fromDesignator$1(Types.scala:2338)
	at dotty.tools.dotc.core.Types$NamedType.computeDenot(Types.scala:2354)
	at dotty.tools.dotc.core.Types$NamedType.denot(Types.scala:2311)
	at dotty.tools.dotc.core.Types$NamedType.info(Types.scala:2299)
	at dotty.tools.dotc.core.Types$Type.isRef(Types.scala:194)
	at dotty.tools.dotc.core.Types$Type.isFromJavaObject(Types.scala:296)
	at dotty.tools.dotc.core.TypeComparer.firstTry$1(TypeComparer.scala:325)
	at dotty.tools.dotc.core.TypeComparer.recur(TypeComparer.scala:1430)
	at dotty.tools.dotc.core.TypeComparer.isSubType(TypeComparer.scala:210)
	at dotty.tools.dotc.core.TypeComparer.isSubType(TypeComparer.scala:220)
	at dotty.tools.dotc.core.TypeComparer.isSub(TypeComparer.scala:222)
	at dotty.tools.dotc.core.ConstraintHandling.op$proxy3$1(ConstraintHandling.scala:455)
	at dotty.tools.dotc.core.ConstraintHandling.isSubTypeWhenFrozen(ConstraintHandling.scala:455)
	at dotty.tools.dotc.core.ConstraintHandling.isSubTypeWhenFrozen$(ConstraintHandling.scala:29)
	at dotty.tools.dotc.core.TypeComparer.isSubTypeWhenFrozen(TypeComparer.scala:30)
	at dotty.tools.dotc.core.TypeComparer.compareGADT$1(TypeComparer.scala:546)
	at dotty.tools.dotc.core.TypeComparer.thirdTryNamed$1(TypeComparer.scala:560)
	at dotty.tools.dotc.core.TypeComparer.thirdTry$1(TypeComparer.scala:611)
	at dotty.tools.dotc.core.TypeComparer.secondTry$1(TypeComparer.scala:539)
	at dotty.tools.dotc.core.TypeComparer.compareNamed$1(TypeComparer.scala:322)
	at dotty.tools.dotc.core.TypeComparer.firstTry$1(TypeComparer.scala:328)
	at dotty.tools.dotc.core.TypeComparer.recur(TypeComparer.scala:1430)
	at dotty.tools.dotc.core.TypeComparer.isSubType(TypeComparer.scala:210)
	at dotty.tools.dotc.core.TypeComparer.isSubType(TypeComparer.scala:220)
	at dotty.tools.dotc.core.TypeComparer.isSameType(TypeComparer.scala:2140)
	at dotty.tools.dotc.core.TypeComparer.isSame(TypeComparer.scala:2147)
	at dotty.tools.dotc.core.ConstraintHandling.op$proxy4$1(ConstraintHandling.scala:456)
	at dotty.tools.dotc.core.ConstraintHandling.isSameTypeWhenFrozen(ConstraintHandling.scala:456)
	at dotty.tools.dotc.core.ConstraintHandling.isSameTypeWhenFrozen$(ConstraintHandling.scala:29)
	at dotty.tools.dotc.core.TypeComparer.isSameTypeWhenFrozen(TypeComparer.scala:30)
	at dotty.tools.dotc.core.TypeComparer.singletonInterval(TypeComparer.scala:2181)
	at dotty.tools.dotc.core.TypeComparer.glbArgs(TypeComparer.scala:2314)
	at dotty.tools.dotc.core.TypeComparer.glbArgs(TypeComparer.scala:2325)
	at dotty.tools.dotc.core.TypeComparer.glbArgs(TypeComparer.scala:2325)
	at dotty.tools.dotc.core.TypeComparer.distributeAnd(TypeComparer.scala:2480)
	at dotty.tools.dotc.core.TypeComparer.andTypeGen(TypeComparer.scala:2387)
	at dotty.tools.dotc.core.TypeComparer.andType(TypeComparer.scala:2415)
	at dotty.tools.dotc.core.TypeComparer.glb(TypeComparer.scala:2227)
	at dotty.tools.dotc.core.TypeComparer$.glb(TypeComparer.scala:2946)
	at dotty.tools.dotc.core.Types$Type.$amp(Types.scala:1141)
	at dotty.tools.dotc.core.SymDenotations$ClassDenotation.computeAndOrType$1(SymDenotations.scala:2209)
	at dotty.tools.dotc.core.SymDenotations$ClassDenotation.recur$4(SymDenotations.scala:2218)
	at dotty.tools.dotc.core.SymDenotations$ClassDenotation.recur$4(SymDenotations.scala:2178)
	at dotty.tools.dotc.core.SymDenotations$ClassDenotation.computeTypeProxy$1(SymDenotations.scala:2186)
	at dotty.tools.dotc.core.SymDenotations$ClassDenotation.recur$4(SymDenotations.scala:2194)
	at dotty.tools.dotc.core.SymDenotations$ClassDenotation.baseTypeOf(SymDenotations.scala:2238)
	at dotty.tools.dotc.core.Types$Type.baseType(Types.scala:1134)
	at dotty.tools.dotc.core.Types$NamedType.argDenot(Types.scala:2393)
	at dotty.tools.dotc.core.Types$NamedType.fromDesignator$1(Types.scala:2338)
	at dotty.tools.dotc.core.Types$NamedType.computeDenot(Types.scala:2354)
	at dotty.tools.dotc.core.Types$NamedType.denot(Types.scala:2311)
	at dotty.tools.dotc.core.Types$NamedType.info(Types.scala:2299)
	at dotty.tools.dotc.core.TypeComparer.compareNamed$1(TypeComparer.scala:287)
	at dotty.tools.dotc.core.TypeComparer.firstTry$1(TypeComparer.scala:328)
	at dotty.tools.dotc.core.TypeComparer.recur(TypeComparer.scala:1430)
	at dotty.tools.dotc.core.TypeComparer.isSubType(TypeComparer.scala:210)
	at dotty.tools.dotc.core.TypeComparer.isSubType(TypeComparer.scala:220)
	at dotty.tools.dotc.core.TypeComparer.isSub(TypeComparer.scala:222)
	at dotty.tools.dotc.core.ConstraintHandling.op$proxy3$1(ConstraintHandling.scala:455)
	at dotty.tools.dotc.core.ConstraintHandling.isSubTypeWhenFrozen(ConstraintHandling.scala:455)
	at dotty.tools.dotc.core.ConstraintHandling.isSubTypeWhenFrozen$(ConstraintHandling.scala:29)
	at dotty.tools.dotc.core.TypeComparer.isSubTypeWhenFrozen(TypeComparer.scala:30)
	at dotty.tools.dotc.core.TypeComparer.compareGADT$1(TypeComparer.scala:546)
	at dotty.tools.dotc.core.TypeComparer.thirdTryNamed$1(TypeComparer.scala:560)
	at dotty.tools.dotc.core.TypeComparer.thirdTry$1(TypeComparer.scala:611)
	at dotty.tools.dotc.core.TypeComparer.secondTry$1(TypeComparer.scala:539)
	at dotty.tools.dotc.core.TypeComparer.compareNamed$1(TypeComparer.scala:322)
	at dotty.tools.dotc.core.TypeComparer.firstTry$1(TypeComparer.scala:328)
	at dotty.tools.dotc.core.TypeComparer.recur(TypeComparer.scala:1430)
	at dotty.tools.dotc.core.TypeComparer.isSubType(TypeComparer.scala:210)
	at dotty.tools.dotc.core.TypeComparer.isSubType(TypeComparer.scala:220)
	at dotty.tools.dotc.core.TypeComparer.isSameType(TypeComparer.scala:2140)
	at dotty.tools.dotc.core.TypeComparer.isSame(TypeComparer.scala:2147)
	at dotty.tools.dotc.core.ConstraintHandling.op$proxy4$1(ConstraintHandling.scala:456)
	at dotty.tools.dotc.core.ConstraintHandling.isSameTypeWhenFrozen(ConstraintHandling.scala:456)
	at dotty.tools.dotc.core.ConstraintHandling.isSameTypeWhenFrozen$(ConstraintHandling.scala:29)
	at dotty.tools.dotc.core.TypeComparer.isSameTypeWhenFrozen(TypeComparer.scala:30)
	at dotty.tools.dotc.core.TypeComparer.singletonInterval(TypeComparer.scala:2181)
	at dotty.tools.dotc.core.TypeComparer.glbArgs(TypeComparer.scala:2314)
	at dotty.tools.dotc.core.TypeComparer.glbArgs(TypeComparer.scala:2325)
	at dotty.tools.dotc.core.TypeComparer.glbArgs(TypeComparer.scala:2325)
	at dotty.tools.dotc.core.TypeComparer.distributeAnd(TypeComparer.scala:2480)
	at dotty.tools.dotc.core.TypeComparer.andTypeGen(TypeComparer.scala:2387)
	at dotty.tools.dotc.core.TypeComparer.andType(TypeComparer.scala:2415)
	at dotty.tools.dotc.core.TypeComparer.glb(TypeComparer.scala:2227)
	at dotty.tools.dotc.core.TypeComparer$.glb(TypeComparer.scala:2946)
	at dotty.tools.dotc.core.Types$Type.$amp(Types.scala:1141)
	at dotty.tools.dotc.core.SymDenotations$ClassDenotation.computeAndOrType$1(SymDenotations.scala:2209)
	at dotty.tools.dotc.core.SymDenotations$ClassDenotation.recur$4(SymDenotations.scala:2218)
	at dotty.tools.dotc.core.SymDenotations$ClassDenotation.recur$4(SymDenotations.scala:2178)
	at dotty.tools.dotc.core.SymDenotations$ClassDenotation.computeTypeProxy$1(SymDenotations.scala:2186)
	at dotty.tools.dotc.core.SymDenotations$ClassDenotation.recur$4(SymDenotations.scala:2194)
	at dotty.tools.dotc.core.SymDenotations$ClassDenotation.baseTypeOf(SymDenotations.scala:2238)
	at dotty.tools.dotc.core.Types$Type.baseType(Types.scala:1134)
	at dotty.tools.dotc.core.Types$NamedType.argDenot(Types.scala:2393)
	at dotty.tools.dotc.core.Types$NamedType.fromDesignator$1(Types.scala:2338)
	at dotty.tools.dotc.core.Types$NamedType.computeDenot(Types.scala:2354)
	at dotty.tools.dotc.core.Types$NamedType.denot(Types.scala:2311)
	at dotty.tools.dotc.core.Types$NamedType.info(Types.scala:2299)
	at dotty.tools.dotc.core.TypeComparer.thirdTryNamed$1(TypeComparer.scala:542)
	at dotty.tools.dotc.core.TypeComparer.thirdTry$1(TypeComparer.scala:611)
	at dotty.tools.dotc.core.TypeComparer.secondTry$1(TypeComparer.scala:539)
	at dotty.tools.dotc.core.TypeComparer.compareNamed$1(TypeComparer.scala:322)
	at dotty.tools.dotc.core.TypeComparer.firstTry$1(TypeComparer.scala:328)
	at dotty.tools.dotc.core.TypeComparer.recur(TypeComparer.scala:1430)
	at dotty.tools.dotc.core.TypeComparer.isSubType(TypeComparer.scala:210)
	at dotty.tools.dotc.core.TypeComparer.isSubType(TypeComparer.scala:220)
	at dotty.tools.dotc.core.TypeComparer.isSub(TypeComparer.scala:222)
	at dotty.tools.dotc.core.ConstraintHandling.op$proxy3$1(ConstraintHandling.scala:455)
	at dotty.tools.dotc.core.ConstraintHandling.isSubTypeWhenFrozen(ConstraintHandling.scala:455)
	at dotty.tools.dotc.core.ConstraintHandling.isSubTypeWhenFrozen$(ConstraintHandling.scala:29)
	at dotty.tools.dotc.core.TypeComparer.isSubTypeWhenFrozen(TypeComparer.scala:30)
	at dotty.tools.dotc.core.TypeComparer.compareGADT$1(TypeComparer.scala:546)
	at dotty.tools.dotc.core.TypeComparer.thirdTryNamed$1(TypeComparer.scala:560)
	at dotty.tools.dotc.core.TypeComparer.thirdTry$1(TypeComparer.scala:611)
	at dotty.tools.dotc.core.TypeComparer.secondTry$1(TypeComparer.scala:539)
	at dotty.tools.dotc.core.TypeComparer.compareNamed$1(TypeComparer.scala:322)
	at dotty.tools.dotc.core.TypeComparer.firstTry$1(TypeComparer.scala:328)
	at dotty.tools.dotc.core.TypeComparer.recur(TypeComparer.scala:1430)
	at dotty.tools.dotc.core.TypeComparer.isSubType(TypeComparer.scala:210)
	at dotty.tools.dotc.core.TypeComparer.isSubType(TypeComparer.scala:220)
	at dotty.tools.dotc.core.TypeComparer.isSameType(TypeComparer.scala:2140)
	at dotty.tools.dotc.core.TypeComparer.isSame(TypeComparer.scala:2147)
	at dotty.tools.dotc.core.ConstraintHandling.op$proxy4$1(ConstraintHandling.scala:456)
	at dotty.tools.dotc.core.ConstraintHandling.isSameTypeWhenFrozen(ConstraintHandling.scala:456)
	at dotty.tools.dotc.core.ConstraintHandling.isSameTypeWhenFrozen$(ConstraintHandling.scala:29)
	at dotty.tools.dotc.core.TypeComparer.isSameTypeWhenFrozen(TypeComparer.scala:30)
	at dotty.tools.dotc.core.TypeComparer.singletonInterval(TypeComparer.scala:2181)
	at dotty.tools.dotc.core.TypeComparer.glbArgs(TypeComparer.scala:2314)
	at dotty.tools.dotc.core.TypeComparer.glbArgs(TypeComparer.scala:2325)
	at dotty.tools.dotc.core.TypeComparer.glbArgs(TypeComparer.scala:2325)
	at dotty.tools.dotc.core.TypeComparer.distributeAnd(TypeComparer.scala:2480)
	at dotty.tools.dotc.core.TypeComparer.andTypeGen(TypeComparer.scala:2387)
	at dotty.tools.dotc.core.TypeComparer.andType(TypeComparer.scala:2415)
	at dotty.tools.dotc.core.TypeComparer.glb(TypeComparer.scala:2227)
	at dotty.tools.dotc.core.TypeComparer$.glb(TypeComparer.scala:2946)
	at dotty.tools.dotc.core.Types$Type.$amp(Types.scala:1141)
	at dotty.tools.dotc.core.SymDenotations$ClassDenotation.computeAndOrType$1(SymDenotations.scala:2209)
	at dotty.tools.dotc.core.SymDenotations$ClassDenotation.recur$4(SymDenotations.scala:2218)
	at dotty.tools.dotc.core.SymDenotations$ClassDenotation.recur$4(SymDenotations.scala:2178)
	at dotty.tools.dotc.core.SymDenotations$ClassDenotation.computeTypeProxy$1(SymDenotations.scala:2186)
	at dotty.tools.dotc.core.SymDenotations$ClassDenotation.recur$4(SymDenotations.scala:2194)
	at dotty.tools.dotc.core.SymDenotations$ClassDenotation.baseTypeOf(SymDenotations.scala:2238)
	at dotty.tools.dotc.core.Types$Type.baseType(Types.scala:1134)
	at dotty.tools.dotc.core.Types$NamedType.argDenot(Types.scala:2393)
	at dotty.tools.dotc.core.Types$NamedType.fromDesignator$1(Types.scala:2338)
	at dotty.tools.dotc.core.Types$NamedType.computeDenot(Types.scala:2354)
	at dotty.tools.dotc.core.Types$NamedType.denot(Types.scala:2311)
	at dotty.tools.dotc.core.Types$NamedType.info(Types.scala:2299)
	at dotty.tools.dotc.core.Types$Type.isRef(Types.scala:194)
	at dotty.tools.dotc.core.Types$Type.isFromJavaObject(Types.scala:296)
	at dotty.tools.dotc.core.TypeComparer.firstTry$1(TypeComparer.scala:325)
	at dotty.tools.dotc.core.TypeComparer.recur(TypeComparer.scala:1430)
	at dotty.tools.dotc.core.TypeComparer.isSubType(TypeComparer.scala:210)
	at dotty.tools.dotc.core.TypeComparer.isSubType(TypeComparer.scala:220)
	at dotty.tools.dotc.core.TypeComparer.isSub(TypeComparer.scala:222)
	at dotty.tools.dotc.core.ConstraintHandling.op$proxy3$1(ConstraintHandling.scala:455)
	at dotty.tools.dotc.core.ConstraintHandling.isSubTypeWhenFrozen(ConstraintHandling.scala:455)
	at dotty.tools.dotc.core.ConstraintHandling.isSubTypeWhenFrozen$(ConstraintHandling.scala:29)
	at dotty.tools.dotc.core.TypeComparer.isSubTypeWhenFrozen(TypeComparer.scala:30)
	at dotty.tools.dotc.core.TypeComparer.compareGADT$1(TypeComparer.scala:546)
	at dotty.tools.dotc.core.TypeComparer.thirdTryNamed$1(TypeComparer.scala:560)
	at dotty.tools.dotc.core.TypeComparer.thirdTry$1(TypeComparer.scala:611)
	at dotty.tools.dotc.core.TypeComparer.secondTry$1(TypeComparer.scala:539)
	at dotty.tools.dotc.core.TypeComparer.compareNamed$1(TypeComparer.scala:322)
	at dotty.tools.dotc.core.TypeComparer.firstTry$1(TypeComparer.scala:328)
	at dotty.tools.dotc.core.TypeComparer.recur(TypeComparer.scala:1430)
	at dotty.tools.dotc.core.TypeComparer.isSubType(TypeComparer.scala:210)
	at dotty.tools.dotc.core.TypeComparer.isSubType(TypeComparer.scala:220)
	at dotty.tools.dotc.core.TypeComparer.isSameType(TypeComparer.scala:2140)
	at dotty.tools.dotc.core.TypeComparer.isSame(TypeComparer.scala:2147)
	at dotty.tools.dotc.core.ConstraintHandling.op$proxy4$1(ConstraintHandling.scala:456)
	at dotty.tools.dotc.core.ConstraintHandling.isSameTypeWhenFrozen(ConstraintHandling.scala:456)
	at dotty.tools.dotc.core.ConstraintHandling.isSameTypeWhenFrozen$(ConstraintHandling.scala:29)
	at dotty.tools.dotc.core.TypeComparer.isSameTypeWhenFrozen(TypeComparer.scala:30)
	at dotty.tools.dotc.core.TypeComparer.singletonInterval(TypeComparer.scala:2181)
	at dotty.tools.dotc.core.TypeComparer.glbArgs(TypeComparer.scala:2314)
	at dotty.tools.dotc.core.TypeComparer.glbArgs(TypeComparer.scala:2325)
	at dotty.tools.dotc.core.TypeComparer.glbArgs(TypeComparer.scala:2325)
	at dotty.tools.dotc.core.TypeComparer.distributeAnd(TypeComparer.scala:2480)
	at dotty.tools.dotc.core.TypeComparer.andTypeGen(TypeComparer.scala:2387)
	at dotty.tools.dotc.core.TypeComparer.andType(TypeComparer.scala:2415)
	at dotty.tools.dotc.core.TypeComparer.glb(TypeComparer.scala:2227)
	at dotty.tools.dotc.core.TypeComparer$.glb(TypeComparer.scala:2946)
	at dotty.tools.dotc.core.Types$Type.$amp(Types.scala:1141)
	at dotty.tools.dotc.core.SymDenotations$ClassDenotation.computeAndOrType$1(SymDenotations.scala:2209)
	at dotty.tools.dotc.core.SymDenotations$ClassDenotation.recur$4(SymDenotations.scala:2218)
	at dotty.tools.dotc.core.SymDenotations$ClassDenotation.recur$4(SymDenotations.scala:2178)
	at dotty.tools.dotc.core.SymDenotations$ClassDenotation.computeTypeProxy$1(SymDenotations.scala:2186)
	at dotty.tools.dotc.core.SymDenotations$ClassDenotation.recur$4(SymDenotations.scala:2194)
	at dotty.tools.dotc.core.SymDenotations$ClassDenotation.baseTypeOf(SymDenotations.scala:2238)
	at dotty.tools.dotc.core.Types$Type.baseType(Types.scala:1134)
	at dotty.tools.dotc.core.Types$NamedType.argDenot(Types.scala:2393)
	at dotty.tools.dotc.core.Types$NamedType.fromDesignator$1(Types.scala:2338)
	at dotty.tools.dotc.core.Types$NamedType.computeDenot(Types.scala:2354)
	at dotty.tools.dotc.core.Types$NamedType.denot(Types.scala:2311)
	at dotty.tools.dotc.core.Types$NamedType.info(Types.scala:2299)
	at dotty.tools.dotc.core.TypeComparer.thirdTryNamed$1(TypeComparer.scala:542)
	at dotty.tools.dotc.core.TypeComparer.thirdTry$1(TypeComparer.scala:611)
	at dotty.tools.dotc.core.TypeComparer.secondTry$1(TypeComparer.scala:539)
	at dotty.tools.dotc.core.TypeComparer.compareNamed$1(TypeComparer.scala:322)
	at dotty.tools.dotc.core.TypeComparer.firstTry$1(TypeComparer.scala:328)
	at dotty.tools.dotc.core.TypeComparer.recur(TypeComparer.scala:1430)
	at dotty.tools.dotc.core.TypeComparer.isSubType(TypeComparer.scala:210)
	at dotty.tools.dotc.core.TypeComparer.isSubType(TypeComparer.scala:220)
	at dotty.tools.dotc.core.TypeComparer.isSub(TypeComparer.scala:222)
	at dotty.tools.dotc.core.ConstraintHandling.op$proxy3$1(ConstraintHandling.scala:455)
	at dotty.tools.dotc.core.ConstraintHandling.isSubTypeWhenFrozen(ConstraintHandling.scala:455)
	at dotty.tools.dotc.core.ConstraintHandling.isSubTypeWhenFrozen$(ConstraintHandling.scala:29)
	at dotty.tools.dotc.core.TypeComparer.isSubTypeWhenFrozen(TypeComparer.scala:30)
	at dotty.tools.dotc.core.TypeComparer.compareGADT$1(TypeComparer.scala:546)
	at dotty.tools.dotc.core.TypeComparer.thirdTryNamed$1(TypeComparer.scala:560)
	at dotty.tools.dotc.core.TypeComparer.thirdTry$1(TypeComparer.scala:611)
	at dotty.tools.dotc.core.TypeComparer.secondTry$1(TypeComparer.scala:539)
	at dotty.tools.dotc.core.TypeComparer.compareNamed$1(TypeComparer.scala:322)
	at dotty.tools.dotc.core.TypeComparer.firstTry$1(TypeComparer.scala:328)
	at dotty.tools.dotc.core.TypeComparer.recur(TypeComparer.scala:1430)
	at dotty.tools.dotc.core.TypeComparer.isSubType(TypeComparer.scala:210)
	at dotty.tools.dotc.core.TypeComparer.isSubType(TypeComparer.scala:220)
	at dotty.tools.dotc.core.TypeComparer.isSameType(TypeComparer.scala:2140)
	at dotty.tools.dotc.core.TypeComparer.isSame(TypeComparer.scala:2147)
	at dotty.tools.dotc.core.ConstraintHandling.op$proxy4$1(ConstraintHandling.scala:456)
	at dotty.tools.dotc.core.ConstraintHandling.isSameTypeWhenFrozen(ConstraintHandling.scala:456)
	at dotty.tools.dotc.core.ConstraintHandling.isSameTypeWhenFrozen$(ConstraintHandling.scala:29)
	at dotty.tools.dotc.core.TypeComparer.isSameTypeWhenFrozen(TypeComparer.scala:30)
	at dotty.tools.dotc.core.TypeComparer.singletonInterval(TypeComparer.scala:2181)
	at dotty.tools.dotc.core.TypeComparer.glbArgs(TypeComparer.scala:2314)
	at dotty.tools.dotc.core.TypeComparer.glbArgs(TypeComparer.scala:2325)
	at dotty.tools.dotc.core.TypeComparer.glbArgs(TypeComparer.scala:2325)
	at dotty.tools.dotc.core.TypeComparer.distributeAnd(TypeComparer.scala:2480)
	at dotty.tools.dotc.core.TypeComparer.andTypeGen(TypeComparer.scala:2387)
	at dotty.tools.dotc.core.TypeComparer.andType(TypeComparer.scala:2415)
	at dotty.tools.dotc.core.TypeComparer.glb(TypeComparer.scala:2227)
	at dotty.tools.dotc.core.TypeComparer$.glb(TypeComparer.scala:2946)
	at dotty.tools.dotc.core.Types$Type.$amp(Types.scala:1141)
	at dotty.tools.dotc.core.SymDenotations$ClassDenotation.computeAndOrType$1(SymDenotations.scala:2209)
	at dotty.tools.dotc.core.SymDenotations$ClassDenotation.recur$4(SymDenotations.scala:2218)
	at dotty.tools.dotc.core.SymDenotations$ClassDenotation.recur$4(SymDenotations.scala:2178)
	at dotty.tools.dotc.core.SymDenotations$ClassDenotation.computeTypeProxy$1(SymDenotations.scala:2186)
	at dotty.tools.dotc.core.SymDenotations$ClassDenotation.recur$4(SymDenotations.scala:2194)
	at dotty.tools.dotc.core.SymDenotations$ClassDenotation.baseTypeOf(SymDenotations.scala:2238)
	at dotty.tools.dotc.core.Types$Type.baseType(Types.scala:1134)
	at dotty.tools.dotc.core.Types$NamedType.argDenot(Types.scala:2393)
	at dotty.tools.dotc.core.Types$NamedType.fromDesignator$1(Types.scala:2338)
	at dotty.tools.dotc.core.Types$NamedType.computeDenot(Types.scala:2354)
	at dotty.tools.dotc.core.Types$NamedType.denot(Types.scala:2311)
	at dotty.tools.dotc.core.Types$NamedType.info(Types.scala:2299)
	at dotty.tools.dotc.core.TypeComparer.thirdTryNamed$1(TypeComparer.scala:542)
	at dotty.tools.dotc.core.TypeComparer.thirdTry$1(TypeComparer.scala:611)
	at dotty.tools.dotc.core.TypeComparer.secondTry$1(TypeComparer.scala:539)
	at dotty.tools.dotc.core.TypeComparer.compareNamed$1(TypeComparer.scala:322)
	at dotty.tools.dotc.core.TypeComparer.firstTry$1(TypeComparer.scala:328)
	at dotty.tools.dotc.core.TypeComparer.recur(TypeComparer.scala:1430)
	at dotty.tools.dotc.core.TypeComparer.isSubType(TypeComparer.scala:210)
	at dotty.tools.dotc.core.TypeComparer.isSubType(TypeComparer.scala:220)
	at dotty.tools.dotc.core.TypeComparer.isSub(TypeComparer.scala:222)
	at dotty.tools.dotc.core.ConstraintHandling.op$proxy3$1(ConstraintHandling.scala:455)
	at dotty.tools.dotc.core.ConstraintHandling.isSubTypeWhenFrozen(ConstraintHandling.scala:455)
	at dotty.tools.dotc.core.ConstraintHandling.isSubTypeWhenFrozen$(ConstraintHandling.scala:29)
	at dotty.tools.dotc.core.TypeComparer.isSubTypeWhenFrozen(TypeComparer.scala:30)
	at dotty.tools.dotc.core.TypeComparer.compareGADT$1(TypeComparer.scala:546)
	at dotty.tools.dotc.core.TypeComparer.thirdTryNamed$1(TypeComparer.scala:560)
	at dotty.tools.dotc.core.TypeComparer.thirdTry$1(TypeComparer.scala:611)
	at dotty.tools.dotc.core.TypeComparer.secondTry$1(TypeComparer.scala:539)
	at dotty.tools.dotc.core.TypeComparer.compareNamed$1(TypeComparer.scala:322)
	at dotty.tools.dotc.core.TypeComparer.firstTry$1(TypeComparer.scala:328)
	at dotty.tools.dotc.core.TypeComparer.recur(TypeComparer.scala:1430)
	at dotty.tools.dotc.core.TypeComparer.isSubType(TypeComparer.scala:210)
	at dotty.tools.dotc.core.TypeComparer.isSubType(TypeComparer.scala:220)
	at dotty.tools.dotc.core.TypeComparer.isSameType(TypeComparer.scala:2140)
	at dotty.tools.dotc.core.TypeComparer.isSame(TypeComparer.scala:2147)
	at dotty.tools.dotc.core.ConstraintHandling.op$proxy4$1(ConstraintHandling.scala:456)
	at dotty.tools.dotc.core.ConstraintHandling.isSameTypeWhenFrozen(ConstraintHandling.scala:456)
	at dotty.tools.dotc.core.ConstraintHandling.isSameTypeWhenFrozen$(ConstraintHandling.scala:29)
	at dotty.tools.dotc.core.TypeComparer.isSameTypeWhenFrozen(TypeComparer.scala:30)
	at dotty.tools.dotc.core.TypeComparer.singletonInterval(TypeComparer.scala:2181)
	at dotty.tools.dotc.core.TypeComparer.glbArgs(TypeComparer.scala:2314)
	at dotty.tools.dotc.core.TypeComparer.glbArgs(TypeComparer.scala:2325)
	at dotty.tools.dotc.core.TypeComparer.glbArgs(TypeComparer.scala:2325)
	at dotty.tools.dotc.core.TypeComparer.distributeAnd(TypeComparer.scala:2480)
	at dotty.tools.dotc.core.TypeComparer.andTypeGen(TypeComparer.scala:2387)
	at dotty.tools.dotc.core.TypeComparer.andType(TypeComparer.scala:2415)
	at dotty.tools.dotc.core.TypeComparer.glb(TypeComparer.scala:2227)
	at dotty.tools.dotc.core.TypeComparer$.glb(TypeComparer.scala:2946)
	at dotty.tools.dotc.core.Types$Type.$amp(Types.scala:1141)
	at dotty.tools.dotc.core.SymDenotations$ClassDenotation.computeAndOrType$1(SymDenotations.scala:2209)
	at dotty.tools.dotc.core.SymDenotations$ClassDenotation.recur$4(SymDenotations.scala:2218)
	at dotty.tools.dotc.core.SymDenotations$ClassDenotation.recur$4(SymDenotations.scala:2178)
	at dotty.tools.dotc.core.SymDenotations$ClassDenotation.computeTypeProxy$1(SymDenotations.scala:2186)
	at dotty.tools.dotc.core.SymDenotations$ClassDenotation.recur$4(SymDenotations.scala:2194)
	at dotty.tools.dotc.core.SymDenotations$ClassDenotation.baseTypeOf(SymDenotations.scala:2238)
	at dotty.tools.dotc.core.Types$Type.baseType(Types.scala:1134)
	at dotty.tools.dotc.core.Types$NamedType.argDenot(Types.scala:2393)
	at dotty.tools.dotc.core.Types$NamedType.fromDesignator$1(Types.scala:2338)
	at dotty.tools.dotc.core.Types$NamedType.computeDenot(Types.scala:2354)
	at dotty.tools.dotc.core.Types$NamedType.denot(Types.scala:2311)
	at dotty.tools.dotc.core.Types$NamedType.info(Types.scala:2299)
	at dotty.tools.dotc.core.TypeComparer.compareNamed$1(TypeComparer.scala:287)
	at dotty.tools.dotc.core.TypeComparer.firstTry$1(TypeComparer.scala:328)
	at dotty.tools.dotc.core.TypeComparer.recur(TypeComparer.scala:1430)
	at dotty.tools.dotc.core.TypeComparer.isSubType(TypeComparer.scala:210)
	at dotty.tools.dotc.core.TypeComparer.isSubType(TypeComparer.scala:220)
	at dotty.tools.dotc.core.TypeComparer.isSub(TypeComparer.scala:222)
	at dotty.tools.dotc.core.ConstraintHandling.op$proxy3$1(ConstraintHandling.scala:455)
	at dotty.tools.dotc.core.ConstraintHandling.isSubTypeWhenFrozen(ConstraintHandling.scala:455)
	at dotty.tools.dotc.core.ConstraintHandling.isSubTypeWhenFrozen$(ConstraintHandling.scala:29)
	at dotty.tools.dotc.core.TypeComparer.isSubTypeWhenFrozen(TypeComparer.scala:30)
	at dotty.tools.dotc.core.TypeComparer.compareGADT$1(TypeComparer.scala:546)
	at dotty.tools.dotc.core.TypeComparer.thirdTryNamed$1(TypeComparer.scala:560)
	at dotty.tools.dotc.core.TypeComparer.thirdTry$1(TypeComparer.scala:611)
	at dotty.tools.dotc.core.TypeComparer.secondTry$1(TypeComparer.scala:539)
	at dotty.tools.dotc.core.TypeComparer.compareNamed$1(TypeComparer.scala:322)
	at dotty.tools.dotc.core.TypeComparer.firstTry$1(TypeComparer.scala:328)
	at dotty.tools.dotc.core.TypeComparer.recur(TypeComparer.scala:1430)
	at dotty.tools.dotc.core.TypeComparer.isSubType(TypeComparer.scala:210)
	at dotty.tools.dotc.core.TypeComparer.isSubType(TypeComparer.scala:220)
	at dotty.tools.dotc.core.TypeComparer.isSameType(TypeComparer.scala:2140)
	at dotty.tools.dotc.core.TypeComparer.isSame(TypeComparer.scala:2147)
	at dotty.tools.dotc.core.ConstraintHandling.op$proxy4$1(ConstraintHandling.scala:456)
	at dotty.tools.dotc.core.ConstraintHandling.isSameTypeWhenFrozen(ConstraintHandling.scala:456)
	at dotty.tools.dotc.core.ConstraintHandling.isSameTypeWhenFrozen$(ConstraintHandling.scala:29)
	at dotty.tools.dotc.core.TypeComparer.isSameTypeWhenFrozen(TypeComparer.scala:30)
	at dotty.tools.dotc.core.TypeComparer.singletonInterval(TypeComparer.scala:2181)
	at dotty.tools.dotc.core.TypeComparer.glbArgs(TypeComparer.scala:2314)
	at dotty.tools.dotc.core.TypeComparer.glbArgs(TypeComparer.scala:2325)
	at dotty.tools.dotc.core.TypeComparer.glbArgs(TypeComparer.scala:2325)
	at dotty.tools.dotc.core.TypeComparer.distributeAnd(TypeComparer.scala:2480)
	at dotty.tools.dotc.core.TypeComparer.andTypeGen(TypeComparer.scala:2387)
	at dotty.tools.dotc.core.TypeComparer.andType(TypeComparer.scala:2415)
	at dotty.tools.dotc.core.TypeComparer.glb(TypeComparer.scala:2227)
	at dotty.tools.dotc.core.TypeComparer$.glb(TypeComparer.scala:2946)
	at dotty.tools.dotc.core.Types$Type.$amp(Types.scala:1141)
	at dotty.tools.dotc.core.SymDenotations$ClassDenotation.computeAndOrType$1(SymDenotations.scala:2209)
	at dotty.tools.dotc.core.SymDenotations$ClassDenotation.recur$4(SymDenotations.scala:2218)
	at dotty.tools.dotc.core.SymDenotations$ClassDenotation.recur$4(SymDenotations.scala:2178)
	at dotty.tools.dotc.core.SymDenotations$ClassDenotation.computeTypeProxy$1(SymDenotations.scala:2186)
	at dotty.tools.dotc.core.SymDenotations$ClassDenotation.recur$4(SymDenotations.scala:2194)
	at dotty.tools.dotc.core.SymDenotations$ClassDenotation.baseTypeOf(SymDenotations.scala:2238)
	at dotty.tools.dotc.core.Types$Type.baseType(Types.scala:1134)
	at dotty.tools.dotc.core.Types$NamedType.argDenot(Types.scala:2393)
	at dotty.tools.dotc.core.Types$NamedType.fromDesignator$1(Types.scala:2338)
	at dotty.tools.dotc.core.Types$NamedType.computeDenot(Types.scala:2354)
	at dotty.tools.dotc.core.Types$NamedType.denot(Types.scala:2311)
	at dotty.tools.dotc.core.Types$NamedType.info(Types.scala:2299)
	at dotty.tools.dotc.core.Types$Type.isRef(Types.scala:194)
	at dotty.tools.dotc.core.Types$Type.isFromJavaObject(Types.scala:296)
	at dotty.tools.dotc.core.TypeComparer.firstTry$1(TypeComparer.scala:325)
	at dotty.tools.dotc.core.TypeComparer.recur(TypeComparer.scala:1430)
	at dotty.tools.dotc.core.TypeComparer.isSubType(TypeComparer.scala:210)
	at dotty.tools.dotc.core.TypeComparer.isSubType(TypeComparer.scala:220)
	at dotty.tools.dotc.core.TypeComparer.isSub(TypeComparer.scala:222)
	at dotty.tools.dotc.core.ConstraintHandling.op$proxy3$1(ConstraintHandling.scala:455)
	at dotty.tools.dotc.core.ConstraintHandling.isSubTypeWhenFrozen(ConstraintHandling.scala:455)
	at dotty.tools.dotc.core.ConstraintHandling.isSubTypeWhenFrozen$(ConstraintHandling.scala:29)
	at dotty.tools.dotc.core.TypeComparer.isSubTypeWhenFrozen(TypeComparer.scala:30)
	at dotty.tools.dotc.core.TypeComparer.compareGADT$1(TypeComparer.scala:546)
	at dotty.tools.dotc.core.TypeComparer.thirdTryNamed$1(TypeComparer.scala:560)
	at dotty.tools.dotc.core.TypeComparer.thirdTry$1(TypeComparer.scala:611)
	at dotty.tools.dotc.core.TypeComparer.secondTry$1(TypeComparer.scala:539)
	at dotty.tools.dotc.core.TypeComparer.compareNamed$1(TypeComparer.scala:322)
	at dotty.tools.dotc.core.TypeComparer.firstTry$1(TypeComparer.scala:328)
	at dotty.tools.dotc.core.TypeComparer.recur(TypeComparer.scala:1430)
	at dotty.tools.dotc.core.TypeComparer.isSubType(TypeComparer.scala:210)
	at dotty.tools.dotc.core.TypeComparer.isSubType(TypeComparer.scala:220)
	at dotty.tools.dotc.core.TypeComparer.isSameType(TypeComparer.scala:2140)
	at dotty.tools.dotc.core.TypeComparer.isSame(TypeComparer.scala:2147)
	at dotty.tools.dotc.core.ConstraintHandling.op$proxy4$1(ConstraintHandling.scala:456)
	at dotty.tools.dotc.core.ConstraintHandling.isSameTypeWhenFrozen(ConstraintHandling.scala:456)
	at dotty.tools.dotc.core.ConstraintHandling.isSameTypeWhenFrozen$(ConstraintHandling.scala:29)
	at dotty.tools.dotc.core.TypeComparer.isSameTypeWhenFrozen(TypeComparer.scala:30)
	at dotty.tools.dotc.core.TypeComparer.singletonInterval(TypeComparer.scala:2181)
	at dotty.tools.dotc.core.TypeComparer.glbArgs(TypeComparer.scala:2314)
	at dotty.tools.dotc.core.TypeComparer.glbArgs(TypeComparer.scala:2325)
	at dotty.tools.dotc.core.TypeComparer.glbArgs(TypeComparer.scala:2325)
	at dotty.tools.dotc.core.TypeComparer.distributeAnd(TypeComparer.scala:2480)
	at dotty.tools.dotc.core.TypeComparer.andTypeGen(TypeComparer.scala:2387)
	at dotty.tools.dotc.core.TypeComparer.andType(TypeComparer.scala:2415)
	at dotty.tools.dotc.core.TypeComparer.glb(TypeComparer.scala:2227)
	at dotty.tools.dotc.core.TypeComparer$.glb(TypeComparer.scala:2946)
	at dotty.tools.dotc.core.Types$Type.$amp(Types.scala:1141)
	at dotty.tools.dotc.core.SymDenotations$ClassDenotation.computeAndOrType$1(SymDenotations.scala:2209)
	at dotty.tools.dotc.core.SymDenotations$ClassDenotation.recur$4(SymDenotations.scala:2218)
	at dotty.tools.dotc.core.SymDenotations$ClassDenotation.recur$4(SymDenotations.scala:2178)
	at dotty.tools.dotc.core.SymDenotations$ClassDenotation.computeTypeProxy$1(SymDenotations.scala:2186)
	at dotty.tools.dotc.core.SymDenotations$ClassDenotation.recur$4(SymDenotations.scala:2194)
	at dotty.tools.dotc.core.SymDenotations$ClassDenotation.baseTypeOf(SymDenotations.scala:2238)
	at dotty.tools.dotc.core.Types$Type.baseType(Types.scala:1134)
	at dotty.tools.dotc.core.Types$NamedType.argDenot(Types.scala:2393)
	at dotty.tools.dotc.core.Types$NamedType.fromDesignator$1(Types.scala:2338)
	at dotty.tools.dotc.core.Types$NamedType.computeDenot(Types.scala:2354)
	at dotty.tools.dotc.core.Types$NamedType.denot(Types.scala:2311)
	at dotty.tools.dotc.core.Types$NamedType.info(Types.scala:2299)
	at dotty.tools.dotc.core.Types$Type.isRef(Types.scala:194)
	at dotty.tools.dotc.core.Types$Type.isFromJavaObject(Types.scala:296)
	at dotty.tools.dotc.core.TypeComparer.firstTry$1(TypeComparer.scala:325)
	at dotty.tools.dotc.core.TypeComparer.recur(TypeComparer.scala:1430)
	at dotty.tools.dotc.core.TypeComparer.isSubType(TypeComparer.scala:210)
	at dotty.tools.dotc.core.TypeComparer.isSubType(TypeComparer.scala:220)
	at dotty.tools.dotc.core.TypeComparer.isSub(TypeComparer.scala:222)
	at dotty.tools.dotc.core.ConstraintHandling.op$proxy3$1(ConstraintHandling.scala:455)
	at dotty.tools.dotc.core.ConstraintHandling.isSubTypeWhenFrozen(ConstraintHandling.scala:455)
	at dotty.tools.dotc.core.ConstraintHandling.isSubTypeWhenFrozen$(ConstraintHandling.scala:29)
	at dotty.tools.dotc.core.TypeComparer.isSubTypeWhenFrozen(TypeComparer.scala:30)
	at dotty.tools.dotc.core.TypeComparer.compareGADT$1(TypeComparer.scala:546)
	at dotty.tools.dotc.core.TypeComparer.thirdTryNamed$1(TypeComparer.scala:560)
	at dotty.tools.dotc.core.TypeComparer.thirdTry$1(TypeComparer.scala:611)
	at dotty.tools.dotc.core.TypeComparer.secondTry$1(TypeComparer.scala:539)
	at dotty.tools.dotc.core.TypeComparer.compareNamed$1(TypeComparer.scala:322)
	at dotty.tools.dotc.core.TypeComparer.firstTry$1(TypeComparer.scala:328)
	at dotty.tools.dotc.core.TypeComparer.recur(TypeComparer.scala:1430)
	at dotty.tools.dotc.core.TypeComparer.isSubType(TypeComparer.scala:210)
	at dotty.tools.dotc.core.TypeComparer.isSubType(TypeComparer.scala:220)
	at dotty.tools.dotc.core.TypeComparer.isSameType(TypeComparer.scala:2140)
	at dotty.tools.dotc.core.TypeComparer.isSame(TypeComparer.scala:2147)
	at dotty.tools.dotc.core.ConstraintHandling.op$proxy4$1(ConstraintHandling.scala:456)
	at dotty.tools.dotc.core.ConstraintHandling.isSameTypeWhenFrozen(ConstraintHandling.scala:456)
	at dotty.tools.dotc.core.ConstraintHandling.isSameTypeWhenFrozen$(ConstraintHandling.scala:29)
	at dotty.tools.dotc.core.TypeComparer.isSameTypeWhenFrozen(TypeComparer.scala:30)
	at dotty.tools.dotc.core.TypeComparer.singletonInterval(TypeComparer.scala:2181)
	at dotty.tools.dotc.core.TypeComparer.glbArgs(TypeComparer.scala:2314)
	at dotty.tools.dotc.core.TypeComparer.glbArgs(TypeComparer.scala:2325)
	at dotty.tools.dotc.core.TypeComparer.glbArgs(TypeComparer.scala:2325)
	at dotty.tools.dotc.core.TypeComparer.distributeAnd(TypeComparer.scala:2480)
	at dotty.tools.dotc.core.TypeComparer.andTypeGen(TypeComparer.scala:2387)
	at dotty.tools.dotc.core.TypeComparer.andType(TypeComparer.scala:2415)
	at dotty.tools.dotc.core.TypeComparer.glb(TypeComparer.scala:2227)
	at dotty.tools.dotc.core.TypeComparer$.glb(TypeComparer.scala:2946)
	at dotty.tools.dotc.core.Types$Type.$amp(Types.scala:1141)
	at dotty.tools.dotc.core.SymDenotations$ClassDenotation.computeAndOrType$1(SymDenotations.scala:2209)
	at dotty.tools.dotc.core.SymDenotations$ClassDenotation.recur$4(SymDenotations.scala:2218)
	at dotty.tools.dotc.core.SymDenotations$ClassDenotation.recur$4(SymDenotations.scala:2178)
	at dotty.tools.dotc.core.SymDenotations$ClassDenotation.computeTypeProxy$1(SymDenotations.scala:2186)
	at dotty.tools.dotc.core.SymDenotations$ClassDenotation.recur$4(SymDenotations.scala:2194)
	at dotty.tools.dotc.core.SymDenotations$ClassDenotation.baseTypeOf(SymDenotations.scala:2238)
	at dotty.tools.dotc.core.Types$Type.baseType(Types.scala:1134)
	at dotty.tools.dotc.core.Types$NamedType.argDenot(Types.scala:2393)
	at dotty.tools.dotc.core.Types$NamedType.fromDesignator$1(Types.scala:2338)
	at dotty.tools.dotc.core.Types$NamedType.computeDenot(Types.scala:2354)
	at dotty.tools.dotc.core.Types$NamedType.denot(Types.scala:2311)
	at dotty.tools.dotc.core.Types$NamedType.info(Types.scala:2299)
	at dotty.tools.dotc.core.TypeComparer.compareNamed$1(TypeComparer.scala:287)
	at dotty.tools.dotc.core.TypeComparer.firstTry$1(TypeComparer.scala:328)
	at dotty.tools.dotc.core.TypeComparer.recur(TypeComparer.scala:1430)
	at dotty.tools.dotc.core.TypeComparer.isSubType(TypeComparer.scala:210)
	at dotty.tools.dotc.core.TypeComparer.isSubType(TypeComparer.scala:220)
	at dotty.tools.dotc.core.TypeComparer.isSub(TypeComparer.scala:222)
	at dotty.tools.dotc.core.ConstraintHandling.op$proxy3$1(ConstraintHandling.scala:455)
	at dotty.tools.dotc.core.ConstraintHandling.isSubTypeWhenFrozen(ConstraintHandling.scala:455)
	at dotty.tools.dotc.core.ConstraintHandling.isSubTypeWhenFrozen$(ConstraintHandling.scala:29)
	at dotty.tools.dotc.core.TypeComparer.isSubTypeWhenFrozen(TypeComparer.scala:30)
	at dotty.tools.dotc.core.TypeComparer.compareGADT$1(TypeComparer.scala:546)
	at dotty.tools.dotc.core.TypeComparer.thirdTryNamed$1(TypeComparer.scala:560)
	at dotty.tools.dotc.core.TypeComparer.thirdTry$1(TypeComparer.scala:611)
	at dotty.tools.dotc.core.TypeComparer.secondTry$1(TypeComparer.scala:539)
	at dotty.tools.dotc.core.TypeComparer.compareNamed$1(TypeComparer.scala:322)
	at dotty.tools.dotc.core.TypeComparer.firstTry$1(TypeComparer.scala:328)
	at dotty.tools.dotc.core.TypeComparer.recur(TypeComparer.scala:1430)
	at dotty.tools.dotc.core.TypeComparer.isSubType(TypeComparer.scala:210)
	at dotty.tools.dotc.core.TypeComparer.isSubType(TypeComparer.scala:220)
	at dotty.tools.dotc.core.TypeComparer.isSameType(TypeComparer.scala:2140)
	at dotty.tools.dotc.core.TypeComparer.isSame(TypeComparer.scala:2147)
	at dotty.tools.dotc.core.ConstraintHandling.op$proxy4$1(ConstraintHandling.scala:456)
	at dotty.tools.dotc.core.ConstraintHandling.isSameTypeWhenFrozen(ConstraintHandling.scala:456)
	at dotty.tools.dotc.core.ConstraintHandling.isSameTypeWhenFrozen$(ConstraintHandling.scala:29)
	at dotty.tools.dotc.core.TypeComparer.isSameTypeWhenFrozen(TypeComparer.scala:30)
	at dotty.tools.dotc.core.TypeComparer.singletonInterval(TypeComparer.scala:2181)
	at dotty.tools.dotc.core.TypeComparer.glbArgs(TypeComparer.scala:2314)
	at dotty.tools.dotc.core.TypeComparer.glbArgs(TypeComparer.scala:2325)
	at dotty.tools.dotc.core.TypeComparer.glbArgs(TypeComparer.scala:2325)
	at dotty.tools.dotc.core.TypeComparer.distributeAnd(TypeComparer.scala:2480)
	at dotty.tools.dotc.core.TypeComparer.andTypeGen(TypeComparer.scala:2387)
	at dotty.tools.dotc.core.TypeComparer.andType(TypeComparer.scala:2415)
	at dotty.tools.dotc.core.TypeComparer.glb(TypeComparer.scala:2227)
	at dotty.tools.dotc.core.TypeComparer$.glb(TypeComparer.scala:2946)
	at dotty.tools.dotc.core.Types$Type.$amp(Types.scala:1141)
	at dotty.tools.dotc.core.SymDenotations$ClassDenotation.computeAndOrType$1(SymDenotations.scala:2209)
	at dotty.tools.dotc.core.SymDenotations$ClassDenotation.recur$4(SymDenotations.scala:2218)
	at dotty.tools.dotc.core.SymDenotations$ClassDenotation.recur$4(SymDenotations.scala:2178)
	at dotty.tools.dotc.core.SymDenotations$ClassDenotation.computeTypeProxy$1(SymDenotations.scala:2186)
	at dotty.tools.dotc.core.SymDenotations$ClassDenotation.recur$4(SymDenotations.scala:2194)
	at dotty.tools.dotc.core.SymDenotations$ClassDenotation.baseTypeOf(SymDenotations.scala:2238)
	at dotty.tools.dotc.core.Types$Type.baseType(Types.scala:1134)
	at dotty.tools.dotc.core.Types$NamedType.argDenot(Types.scala:2393)
	at dotty.tools.dotc.core.Types$NamedType.fromDesignator$1(Types.scala:2338)
	at dotty.tools.dotc.core.Types$NamedType.computeDenot(Types.scala:2354)
	at dotty.tools.dotc.core.Types$NamedType.denot(Types.scala:2311)
	at dotty.tools.dotc.core.Types$NamedType.info(Types.scala:2299)
	at dotty.tools.dotc.core.TypeComparer.compareNamed$1(TypeComparer.scala:287)
	at dotty.tools.dotc.core.TypeComparer.firstTry$1(TypeComparer.scala:328)
	at dotty.tools.dotc.core.TypeComparer.recur(TypeComparer.scala:1430)
	at dotty.tools.dotc.core.TypeComparer.isSubType(TypeComparer.scala:210)
	at dotty.tools.dotc.core.TypeComparer.isSubType(TypeComparer.scala:220)
	at dotty.tools.dotc.core.TypeComparer.isSub(TypeComparer.scala:222)
	at dotty.tools.dotc.core.ConstraintHandling.op$proxy3$1(ConstraintHandling.scala:455)
	at dotty.tools.dotc.core.ConstraintHandling.isSubTypeWhenFrozen(ConstraintHandling.scala:455)
	at dotty.tools.dotc.core.ConstraintHandling.isSubTypeWhenFrozen$(ConstraintHandling.scala:29)
	at dotty.tools.dotc.core.TypeComparer.isSubTypeWhenFrozen(TypeComparer.scala:30)
	at dotty.tools.dotc.core.TypeComparer.compareGADT$1(TypeComparer.scala:546)
	at dotty.tools.dotc.core.TypeComparer.thirdTryNamed$1(TypeComparer.scala:560)
	at dotty.tools.dotc.core.TypeComparer.thirdTry$1(TypeComparer.scala:611)
	at dotty.tools.dotc.core.TypeComparer.secondTry$1(TypeComparer.scala:539)
	at dotty.tools.dotc.core.TypeComparer.compareNamed$1(TypeComparer.scala:322)
	at dotty.tools.dotc.core.TypeComparer.firstTry$1(TypeComparer.scala:328)
	at dotty.tools.dotc.core.TypeComparer.recur(TypeComparer.scala:1430)
	at dotty.tools.dotc.core.TypeComparer.isSubType(TypeComparer.scala:210)
	at dotty.tools.dotc.core.TypeComparer.isSubType(TypeComparer.scala:220)
	at dotty.tools.dotc.core.TypeComparer.isSameType(TypeComparer.scala:2140)
	at dotty.tools.dotc.core.TypeComparer.isSame(TypeComparer.scala:2147)
	at dotty.tools.dotc.core.ConstraintHandling.op$proxy4$1(ConstraintHandling.scala:456)
	at dotty.tools.dotc.core.ConstraintHandling.isSameTypeWhenFrozen(ConstraintHandling.scala:456)
	at dotty.tools.dotc.core.ConstraintHandling.isSameTypeWhenFrozen$(ConstraintHandling.scala:29)
	at dotty.tools.dotc.core.TypeComparer.isSameTypeWhenFrozen(TypeComparer.scala:30)
	at dotty.tools.dotc.core.TypeComparer.singletonInterval(TypeComparer.scala:2181)
	at dotty.tools.dotc.core.TypeComparer.glbArgs(TypeComparer.scala:2314)
	at dotty.tools.dotc.core.TypeComparer.glbArgs(TypeComparer.scala:2325)
	at dotty.tools.dotc.core.TypeComparer.glbArgs(TypeComparer.scala:2325)
	at dotty.tools.dotc.core.TypeComparer.distributeAnd(TypeComparer.scala:2480)
	at dotty.tools.dotc.core.TypeComparer.andTypeGen(TypeComparer.scala:2387)
	at dotty.tools.dotc.core.TypeComparer.andType(TypeComparer.scala:2415)
	at dotty.tools.dotc.core.TypeComparer.glb(TypeComparer.scala:2227)
	at dotty.tools.dotc.core.TypeComparer$.glb(TypeComparer.scala:2946)
	at dotty.tools.dotc.core.Types$Type.$amp(Types.scala:1141)
	at dotty.tools.dotc.core.SymDenotations$ClassDenotation.computeAndOrType$1(SymDenotations.scala:2209)
	at dotty.tools.dotc.core.SymDenotations$ClassDenotation.recur$4(SymDenotations.scala:2218)
	at dotty.tools.dotc.core.SymDenotations$ClassDenotation.recur$4(SymDenotations.scala:2178)
	at dotty.tools.dotc.core.SymDenotations$ClassDenotation.computeTypeProxy$1(SymDenotations.scala:2186)
	at dotty.tools.dotc.core.SymDenotations$ClassDenotation.recur$4(SymDenotations.scala:2194)
	at dotty.tools.dotc.core.SymDenotations$ClassDenotation.baseTypeOf(SymDenotations.scala:2238)
	at dotty.tools.dotc.core.Types$Type.baseType(Types.scala:1134)
	at dotty.tools.dotc.core.Types$NamedType.argDenot(Types.scala:2393)
	at dotty.tools.dotc.core.Types$NamedType.fromDesignator$1(Types.scala:2338)
	at dotty.tools.dotc.core.Types$NamedType.computeDenot(Types.scala:2354)
	at dotty.tools.dotc.core.Types$NamedType.denot(Types.scala:2311)
	at dotty.tools.dotc.core.Types$NamedType.info(Types.scala:2299)
	at dotty.tools.dotc.core.TypeComparer.compareNamed$1(TypeComparer.scala:287)
	at dotty.tools.dotc.core.TypeComparer.firstTry$1(TypeComparer.scala:328)
	at dotty.tools.dotc.core.TypeComparer.recur(TypeComparer.scala:1430)
	at dotty.tools.dotc.core.TypeComparer.isSubType(TypeComparer.scala:210)
	at dotty.tools.dotc.core.TypeComparer.isSubType(TypeComparer.scala:220)
	at dotty.tools.dotc.core.TypeComparer.isSub(TypeComparer.scala:222)
	at dotty.tools.dotc.core.ConstraintHandling.op$proxy3$1(ConstraintHandling.scala:455)
	at dotty.tools.dotc.core.ConstraintHandling.isSubTypeWhenFrozen(ConstraintHandling.scala:455)
	at dotty.tools.dotc.core.ConstraintHandling.isSubTypeWhenFrozen$(ConstraintHandling.scala:29)
	at dotty.tools.dotc.core.TypeComparer.isSubTypeWhenFrozen(TypeComparer.scala:30)
	at dotty.tools.dotc.core.TypeComparer.compareGADT$1(TypeComparer.scala:546)
	at dotty.tools.dotc.core.TypeComparer.thirdTryNamed$1(TypeComparer.scala:560)
	at dotty.tools.dotc.core.TypeComparer.thirdTry$1(TypeComparer.scala:611)
	at dotty.tools.dotc.core.TypeComparer.secondTry$1(TypeComparer.scala:539)
	at dotty.tools.dotc.core.TypeComparer.compareNamed$1(TypeComparer.scala:322)
	at dotty.tools.dotc.core.TypeComparer.firstTry$1(TypeComparer.scala:328)
	at dotty.tools.dotc.core.TypeComparer.recur(TypeComparer.scala:1430)
	at dotty.tools.dotc.core.TypeComparer.isSubType(TypeComparer.scala:210)
	at dotty.tools.dotc.core.TypeComparer.isSubType(TypeComparer.scala:220)
	at dotty.tools.dotc.core.TypeComparer.isSameType(TypeComparer.scala:2140)
	at dotty.tools.dotc.core.TypeComparer.isSame(TypeComparer.scala:2147)
	at dotty.tools.dotc.core.ConstraintHandling.op$proxy4$1(ConstraintHandling.scala:456)
	at dotty.tools.dotc.core.ConstraintHandling.isSameTypeWhenFrozen(ConstraintHandling.scala:456)
	at dotty.tools.dotc.core.ConstraintHandling.isSameTypeWhenFrozen$(ConstraintHandling.scala:29)
	at dotty.tools.dotc.core.TypeComparer.isSameTypeWhenFrozen(TypeComparer.scala:30)
	at dotty.tools.dotc.core.TypeComparer.singletonInterval(TypeComparer.scala:2181)
	at dotty.tools.dotc.core.TypeComparer.glbArgs(TypeComparer.scala:2314)
	at dotty.tools.dotc.core.TypeComparer.glbArgs(TypeComparer.scala:2325)
	at dotty.tools.dotc.core.TypeComparer.glbArgs(TypeComparer.scala:2325)
	at dotty.tools.dotc.core.TypeComparer.distributeAnd(TypeComparer.scala:2480)
	at dotty.tools.dotc.core.TypeComparer.andTypeGen(TypeComparer.scala:2387)
	at dotty.tools.dotc.core.TypeComparer.andType(TypeComparer.scala:2415)
	at dotty.tools.dotc.core.TypeComparer.glb(TypeComparer.scala:2227)
	at dotty.tools.dotc.core.TypeComparer$.glb(TypeComparer.scala:2946)
	at dotty.tools.dotc.core.Types$Type.$amp(Types.scala:1141)
	at dotty.tools.dotc.core.SymDenotations$ClassDenotation.computeAndOrType$1(SymDenotations.scala:2209)
	at dotty.tools.dotc.core.SymDenotations$ClassDenotation.recur$4(SymDenotations.scala:2218)
	at dotty.tools.dotc.core.SymDenotations$ClassDenotation.recur$4(SymDenotations.scala:2178)
	at dotty.tools.dotc.core.SymDenotations$ClassDenotation.computeTypeProxy$1(SymDenotations.scala:2186)
	at dotty.tools.dotc.core.SymDenotations$ClassDenotation.recur$4(SymDenotations.scala:2194)
	at dotty.tools.dotc.core.SymDenotations$ClassDenotation.baseTypeOf(SymDenotations.scala:2238)
	at dotty.tools.dotc.core.Types$Type.baseType(Types.scala:1134)
	at dotty.tools.dotc.core.Types$NamedType.argDenot(Types.scala:2393)
	at dotty.tools.dotc.core.Types$NamedType.fromDesignator$1(Types.scala:2338)
	at dotty.tools.dotc.core.Types$NamedType.computeDenot(Types.scala:2354)
	at dotty.tools.dotc.core.Types$NamedType.denot(Types.scala:2311)
	at dotty.tools.dotc.core.Types$NamedType.info(Types.scala:2299)
	at dotty.tools.dotc.core.TypeComparer.thirdTryNamed$1(TypeComparer.scala:542)
	at dotty.tools.dotc.core.TypeComparer.thirdTry$1(TypeComparer.scala:611)
	at dotty.tools.dotc.core.TypeComparer.secondTry$1(TypeComparer.scala:539)
	at dotty.tools.dotc.core.TypeComparer.compareNamed$1(TypeComparer.scala:322)
	at dotty.tools.dotc.core.TypeComparer.firstTry$1(TypeComparer.scala:328)
	at dotty.tools.dotc.core.TypeComparer.recur(TypeComparer.scala:1430)
	at dotty.tools.dotc.core.TypeComparer.isSubType(TypeComparer.scala:210)
	at dotty.tools.dotc.core.TypeComparer.isSubType(TypeComparer.scala:220)
	at dotty.tools.dotc.core.TypeComparer.isSub(TypeComparer.scala:222)
	at dotty.tools.dotc.core.ConstraintHandling.op$proxy3$1(ConstraintHandling.scala:455)
	at dotty.tools.dotc.core.ConstraintHandling.isSubTypeWhenFrozen(ConstraintHandling.scala:455)
	at dotty.tools.dotc.core.ConstraintHandling.isSubTypeWhenFrozen$(ConstraintHandling.scala:29)
	at dotty.tools.dotc.core.TypeComparer.isSubTypeWhenFrozen(TypeComparer.scala:30)
	at dotty.tools.dotc.core.TypeComparer.compareGADT$1(TypeComparer.scala:546)
	at dotty.tools.dotc.core.TypeComparer.thirdTryNamed$1(TypeComparer.scala:560)
	at dotty.tools.dotc.core.TypeComparer.thirdTry$1(TypeComparer.scala:611)
	at dotty.tools.dotc.core.TypeComparer.secondTry$1(TypeComparer.scala:539)
	at dotty.tools.dotc.core.TypeComparer.compareNamed$1(TypeComparer.scala:322)
	at dotty.tools.dotc.core.TypeComparer.firstTry$1(TypeComparer.scala:328)
	at dotty.tools.dotc.core.TypeComparer.recur(TypeComparer.scala:1430)
	at dotty.tools.dotc.core.TypeComparer.isSubType(TypeComparer.scala:210)
	at dotty.tools.dotc.core.TypeComparer.isSubType(TypeComparer.scala:220)
	at dotty.tools.dotc.core.TypeComparer.isSameType(TypeComparer.scala:2140)
	at dotty.tools.dotc.core.TypeComparer.isSame(TypeComparer.scala:2147)
	at dotty.tools.dotc.core.ConstraintHandling.op$proxy4$1(ConstraintHandling.scala:456)
	at dotty.tools.dotc.core.ConstraintHandling.isSameTypeWhenFrozen(ConstraintHandling.scala:456)
	at dotty.tools.dotc.core.ConstraintHandling.isSameTypeWhenFrozen$(ConstraintHandling.scala:29)
	at dotty.tools.dotc.core.TypeComparer.isSameTypeWhenFrozen(TypeComparer.scala:30)
	at dotty.tools.dotc.core.TypeComparer.singletonInterval(TypeComparer.scala:2181)
	at dotty.tools.dotc.core.TypeComparer.glbArgs(TypeComparer.scala:2314)
	at dotty.tools.dotc.core.TypeComparer.glbArgs(TypeComparer.scala:2325)
	at dotty.tools.dotc.core.TypeComparer.glbArgs(TypeComparer.scala:2325)
	at dotty.tools.dotc.core.TypeComparer.distributeAnd(TypeComparer.scala:2480)
	at dotty.tools.dotc.core.TypeComparer.andTypeGen(TypeComparer.scala:2387)
	at dotty.tools.dotc.core.TypeComparer.andType(TypeComparer.scala:2415)
	at dotty.tools.dotc.core.TypeComparer.glb(TypeComparer.scala:2227)
	at dotty.tools.dotc.core.TypeComparer$.glb(TypeComparer.scala:2946)
	at dotty.tools.dotc.core.Types$Type.$amp(Types.scala:1141)
	at dotty.tools.dotc.core.SymDenotations$ClassDenotation.computeAndOrType$1(SymDenotations.scala:2209)
	at dotty.tools.dotc.core.SymDenotations$ClassDenotation.recur$4(SymDenotations.scala:2218)
	at dotty.tools.dotc.core.SymDenotations$ClassDenotation.recur$4(SymDenotations.scala:2178)
	at dotty.tools.dotc.core.SymDenotations$ClassDenotation.computeTypeProxy$1(SymDenotations.scala:2186)
	at dotty.tools.dotc.core.SymDenotations$ClassDenotation.recur$4(SymDenotations.scala:2194)
	at dotty.tools.dotc.core.SymDenotations$ClassDenotation.baseTypeOf(SymDenotations.scala:2238)
	at dotty.tools.dotc.core.Types$Type.baseType(Types.scala:1134)
	at dotty.tools.dotc.core.Types$NamedType.argDenot(Types.scala:2393)
	at dotty.tools.dotc.core.Types$NamedType.fromDesignator$1(Types.scala:2338)
	at dotty.tools.dotc.core.Types$NamedType.computeDenot(Types.scala:2354)
	at dotty.tools.dotc.core.Types$NamedType.denot(Types.scala:2311)
	at dotty.tools.dotc.core.Types$NamedType.info(Types.scala:2299)
	at dotty.tools.dotc.core.TypeComparer.compareNamed$1(TypeComparer.scala:287)
	at dotty.tools.dotc.core.TypeComparer.firstTry$1(TypeComparer.scala:328)
	at dotty.tools.dotc.core.TypeComparer.recur(TypeComparer.scala:1430)
	at dotty.tools.dotc.core.TypeComparer.isSubType(TypeComparer.scala:210)
	at dotty.tools.dotc.core.TypeComparer.isSubType(TypeComparer.scala:220)
	at dotty.tools.dotc.core.TypeComparer.isSub(TypeComparer.scala:222)
	at dotty.tools.dotc.core.ConstraintHandling.op$proxy3$1(ConstraintHandling.scala:455)
	at dotty.tools.dotc.core.ConstraintHandling.isSubTypeWhenFrozen(ConstraintHandling.scala:455)
	at dotty.tools.dotc.core.ConstraintHandling.isSubTypeWhenFrozen$(ConstraintHandling.scala:29)
	at dotty.tools.dotc.core.TypeComparer.isSubTypeWhenFrozen(TypeComparer.scala:30)
	at dotty.tools.dotc.core.TypeComparer.compareGADT$1(TypeComparer.scala:546)
	at dotty.tools.dotc.core.TypeComparer.thirdTryNamed$1(TypeComparer.scala:560)
	at dotty.tools.dotc.core.TypeComparer.thirdTry$1(TypeComparer.scala:611)
	at dotty.tools.dotc.core.TypeComparer.secondTry$1(TypeComparer.scala:539)
	at dotty.tools.dotc.core.TypeComparer.compareNamed$1(TypeComparer.scala:322)
	at dotty.tools.dotc.core.TypeComparer.firstTry$1(TypeComparer.scala:328)
	at dotty.tools.dotc.core.TypeComparer.recur(TypeComparer.scala:1430)
	at dotty.tools.dotc.core.TypeComparer.isSubType(TypeComparer.scala:210)
	at dotty.tools.dotc.core.TypeComparer.isSubType(TypeComparer.scala:220)
	at dotty.tools.dotc.core.TypeComparer.isSameType(TypeComparer.scala:2140)
	at dotty.tools.dotc.core.TypeComparer.isSame(TypeComparer.scala:2147)
	at dotty.tools.dotc.core.ConstraintHandling.op$proxy4$1(ConstraintHandling.scala:456)
	at dotty.tools.dotc.core.ConstraintHandling.isSameTypeWhenFrozen(ConstraintHandling.scala:456)
	at dotty.tools.dotc.core.ConstraintHandling.isSameTypeWhenFrozen$(ConstraintHandling.scala:29)
	at dotty.tools.dotc.core.TypeComparer.isSameTypeWhenFrozen(TypeComparer.scala:30)
	at dotty.tools.dotc.core.TypeComparer.singletonInterval(TypeComparer.scala:2181)
	at dotty.tools.dotc.core.TypeComparer.glbArgs(TypeComparer.scala:2314)
	at dotty.tools.dotc.core.TypeComparer.glbArgs(TypeComparer.scala:2325)
	at dotty.tools.dotc.core.TypeComparer.glbArgs(TypeComparer.scala:2325)
	at dotty.tools.dotc.core.TypeComparer.distributeAnd(TypeComparer.scala:2480)
	at dotty.tools.dotc.core.TypeComparer.andTypeGen(TypeComparer.scala:2387)
	at dotty.tools.dotc.core.TypeComparer.andType(TypeComparer.scala:2415)
	at dotty.tools.dotc.core.TypeComparer.glb(TypeComparer.scala:2227)
	at dotty.tools.dotc.core.TypeComparer$.glb(TypeComparer.scala:2946)
	at dotty.tools.dotc.core.Types$Type.$amp(Types.scala:1141)
	at dotty.tools.dotc.core.SymDenotations$ClassDenotation.computeAndOrType$1(SymDenotations.scala:2209)
	at dotty.tools.dotc.core.SymDenotations$ClassDenotation.recur$4(SymDenotations.scala:2218)
	at dotty.tools.dotc.core.SymDenotations$ClassDenotation.recur$4(SymDenotations.scala:2178)
	at dotty.tools.dotc.core.SymDenotations$ClassDenotation.computeTypeProxy$1(SymDenotations.scala:2186)
	at dotty.tools.dotc.core.SymDenotations$ClassDenotation.recur$4(SymDenotations.scala:2194)
	at dotty.tools.dotc.core.SymDenotations$ClassDenotation.baseTypeOf(SymDenotations.scala:2238)
	at dotty.tools.dotc.core.Types$Type.baseType(Types.scala:1134)
	at dotty.tools.dotc.core.Types$NamedType.argDenot(Types.scala:2393)
	at dotty.tools.dotc.core.Types$NamedType.fromDesignator$1(Types.scala:2338)
	at dotty.tools.dotc.core.Types$NamedType.computeDenot(Types.scala:2354)
	at dotty.tools.dotc.core.Types$NamedType.denot(Types.scala:2311)
	at dotty.tools.dotc.core.Types$NamedType.info(Types.scala:2299)
	at dotty.tools.dotc.core.Types$Type.isRef(Types.scala:194)
	at dotty.tools.dotc.core.Types$Type.isFromJavaObject(Types.scala:296)
	at dotty.tools.dotc.core.TypeComparer.firstTry$1(TypeComparer.scala:325)
	at dotty.tools.dotc.core.TypeComparer.recur(TypeComparer.scala:1430)
	at dotty.tools.dotc.core.TypeComparer.isSubType(TypeComparer.scala:210)
	at dotty.tools.dotc.core.TypeComparer.isSubType(TypeComparer.scala:220)
	at dotty.tools.dotc.core.TypeComparer.isSub(TypeComparer.scala:222)
	at dotty.tools.dotc.core.ConstraintHandling.op$proxy3$1(ConstraintHandling.scala:455)
	at dotty.tools.dotc.core.ConstraintHandling.isSubTypeWhenFrozen(ConstraintHandling.scala:455)
	at dotty.tools.dotc.core.ConstraintHandling.isSubTypeWhenFrozen$(ConstraintHandling.scala:29)
	at dotty.tools.dotc.core.TypeComparer.isSubTypeWhenFrozen(TypeComparer.scala:30)
	at dotty.tools.dotc.core.TypeComparer.compareGADT$1(TypeComparer.scala:546)
	at dotty.tools.dotc.core.TypeComparer.thirdTryNamed$1(TypeComparer.scala:560)
	at dotty.tools.dotc.core.TypeComparer.thirdTry$1(TypeComparer.scala:611)
	at dotty.tools.dotc.core.TypeComparer.secondTry$1(TypeComparer.scala:539)
	at dotty.tools.dotc.core.TypeComparer.compareNamed$1(TypeComparer.scala:322)
	at dotty.tools.dotc.core.TypeComparer.firstTry$1(TypeComparer.scala:328)
	at dotty.tools.dotc.core.TypeComparer.recur(TypeComparer.scala:1430)
	at dotty.tools.dotc.core.TypeComparer.isSubType(TypeComparer.scala:210)
	at dotty.tools.dotc.core.TypeComparer.isSubType(TypeComparer.scala:220)
	at dotty.tools.dotc.core.TypeComparer.isSameType(TypeComparer.scala:2140)
	at dotty.tools.dotc.core.TypeComparer.isSame(TypeComparer.scala:2147)
	at dotty.tools.dotc.core.ConstraintHandling.op$proxy4$1(ConstraintHandling.scala:456)
	at dotty.tools.dotc.core.ConstraintHandling.isSameTypeWhenFrozen(ConstraintHandling.scala:456)
	at dotty.tools.dotc.core.ConstraintHandling.isSameTypeWhenFrozen$(ConstraintHandling.scala:29)
	at dotty.tools.dotc.core.TypeComparer.isSameTypeWhenFrozen(TypeComparer.scala:30)
	at dotty.tools.dotc.core.TypeComparer.singletonInterval(TypeComparer.scala:2181)
	at dotty.tools.dotc.core.TypeComparer.glbArgs(TypeComparer.scala:2314)
	at dotty.tools.dotc.core.TypeComparer.glbArgs(TypeComparer.scala:2325)
	at dotty.tools.dotc.core.TypeComparer.glbArgs(TypeComparer.scala:2325)
	at dotty.tools.dotc.core.TypeComparer.distributeAnd(TypeComparer.scala:2480)
	at dotty.tools.dotc.core.TypeComparer.andTypeGen(TypeComparer.scala:2387)
	at dotty.tools.dotc.core.TypeComparer.andType(TypeComparer.scala:2415)
	at dotty.tools.dotc.core.TypeComparer.glb(TypeComparer.scala:2227)
	at dotty.tools.dotc.core.TypeComparer$.glb(TypeComparer.scala:2946)
	at dotty.tools.dotc.core.Types$Type.$amp(Types.scala:1141)
	at dotty.tools.dotc.core.SymDenotations$ClassDenotation.computeAndOrType$1(SymDenotations.scala:2209)
	at dotty.tools.dotc.core.SymDenotations$ClassDenotation.recur$4(SymDenotations.scala:2218)
	at dotty.tools.dotc.core.SymDenotations$ClassDenotation.recur$4(SymDenotations.scala:2178)
	at dotty.tools.dotc.core.SymDenotations$ClassDenotation.computeTypeProxy$1(SymDenotations.scala:2186)
	at dotty.tools.dotc.core.SymDenotations$ClassDenotation.recur$4(SymDenotations.scala:2194)
	at dotty.tools.dotc.core.SymDenotations$ClassDenotation.baseTypeOf(SymDenotations.scala:2238)
	at dotty.tools.dotc.core.Types$Type.baseType(Types.scala:1134)
	at dotty.tools.dotc.core.Types$NamedType.argDenot(Types.scala:2393)
	at dotty.tools.dotc.core.Types$NamedType.fromDesignator$1(Types.scala:2338)
	at dotty.tools.dotc.core.Types$NamedType.computeDenot(Types.scala:2354)
	at dotty.tools.dotc.core.Types$NamedType.denot(Types.scala:2311)
	at dotty.tools.dotc.core.Types$NamedType.info(Types.scala:2299)
	at dotty.tools.dotc.core.Types$Type.isRef(Types.scala:194)
	at dotty.tools.dotc.core.Types$Type.isFromJavaObject(Types.scala:296)
	at dotty.tools.dotc.core.TypeComparer.firstTry$1(TypeComparer.scala:325)
	at dotty.tools.dotc.core.TypeComparer.recur(TypeComparer.scala:1430)
	at dotty.tools.dotc.core.TypeComparer.isSubType(TypeComparer.scala:210)
	at dotty.tools.dotc.core.TypeComparer.isSubType(TypeComparer.scala:220)
	at dotty.tools.dotc.core.TypeComparer.isSub(TypeComparer.scala:222)
	at dotty.tools.dotc.core.ConstraintHandling.op$proxy3$1(ConstraintHandling.scala:455)
	at dotty.tools.dotc.core.ConstraintHandling.isSubTypeWhenFrozen(ConstraintHandling.scala:455)
	at dotty.tools.dotc.core.ConstraintHandling.isSubTypeWhenFrozen$(ConstraintHandling.scala:29)
	at dotty.tools.dotc.core.TypeComparer.isSubTypeWhenFrozen(TypeComparer.scala:30)
	at dotty.tools.dotc.core.TypeComparer.compareGADT$1(TypeComparer.scala:546)
	at dotty.tools.dotc.core.TypeComparer.thirdTryNamed$1(TypeComparer.scala:560)
	at dotty.tools.dotc.core.TypeComparer.thirdTry$1(TypeComparer.scala:611)
	at dotty.tools.dotc.core.TypeComparer.secondTry$1(TypeComparer.scala:539)
	at dotty.tools.dotc.core.TypeComparer.compareNamed$1(TypeComparer.scala:322)
	at dotty.tools.dotc.core.TypeComparer.firstTry$1(TypeComparer.scala:328)
	at dotty.tools.dotc.core.TypeComparer.recur(TypeComparer.scala:1430)
	at dotty.tools.dotc.core.TypeComparer.isSubType(TypeComparer.scala:210)
	at dotty.tools.dotc.core.TypeComparer.isSubType(TypeComparer.scala:220)
	at dotty.tools.dotc.core.TypeComparer.isSameType(TypeComparer.scala:2140)
	at dotty.tools.dotc.core.TypeComparer.isSame(TypeComparer.scala:2147)
	at dotty.tools.dotc.core.ConstraintHandling.op$proxy4$1(ConstraintHandling.scala:456)
	at dotty.tools.dotc.core.ConstraintHandling.isSameTypeWhenFrozen(ConstraintHandling.scala:456)
	at dotty.tools.dotc.core.ConstraintHandling.isSameTypeWhenFrozen$(ConstraintHandling.scala:29)
	at dotty.tools.dotc.core.TypeComparer.isSameTypeWhenFrozen(TypeComparer.scala:30)
	at dotty.tools.dotc.core.TypeComparer.singletonInterval(TypeComparer.scala:2181)
	at dotty.tools.dotc.core.TypeComparer.glbArgs(TypeComparer.scala:2314)
	at dotty.tools.dotc.core.TypeComparer.glbArgs(TypeComparer.scala:2325)
	at dotty.tools.dotc.core.TypeComparer.glbArgs(TypeComparer.scala:2325)
	at dotty.tools.dotc.core.TypeComparer.distributeAnd(TypeComparer.scala:2480)
	at dotty.tools.dotc.core.TypeComparer.andTypeGen(TypeComparer.scala:2387)
	at dotty.tools.dotc.core.TypeComparer.andType(TypeComparer.scala:2415)
	at dotty.tools.dotc.core.TypeComparer.glb(TypeComparer.scala:2227)
	at dotty.tools.dotc.core.TypeComparer$.glb(TypeComparer.scala:2946)
	at dotty.tools.dotc.core.Types$Type.$amp(Types.scala:1141)
	at dotty.tools.dotc.core.SymDenotations$ClassDenotation.computeAndOrType$1(SymDenotations.scala:2209)
	at dotty.tools.dotc.core.SymDenotations$ClassDenotation.recur$4(SymDenotations.scala:2218)
	at dotty.tools.dotc.core.SymDenotations$ClassDenotation.recur$4(SymDenotations.scala:2178)
	at dotty.tools.dotc.core.SymDenotations$ClassDenotation.computeTypeProxy$1(SymDenotations.scala:2186)
	at dotty.tools.dotc.core.SymDenotations$ClassDenotation.recur$4(SymDenotations.scala:2194)
	at dotty.tools.dotc.core.SymDenotations$ClassDenotation.baseTypeOf(SymDenotations.scala:2238)
	at dotty.tools.dotc.core.Types$Type.baseType(Types.scala:1134)
	at dotty.tools.dotc.core.Types$NamedType.argDenot(Types.scala:2393)
	at dotty.tools.dotc.core.Types$NamedType.fromDesignator$1(Types.scala:2338)
	at dotty.tools.dotc.core.Types$NamedType.computeDenot(Types.scala:2354)
	at dotty.tools.dotc.core.Types$NamedType.denot(Types.scala:2311)
	at dotty.tools.dotc.core.Types$NamedType.info(Types.scala:2299)
	at dotty.tools.dotc.core.Types$Type.isRef(Types.scala:194)
	at dotty.tools.dotc.core.Types$Type.isFromJavaObject(Types.scala:296)
	at dotty.tools.dotc.core.TypeComparer.firstTry$1(TypeComparer.scala:325)
	at dotty.tools.dotc.core.TypeComparer.recur(TypeComparer.scala:1430)
	at dotty.tools.dotc.core.TypeComparer.isSubType(TypeComparer.scala:210)
	at dotty.tools.dotc.core.TypeComparer.isSubType(TypeComparer.scala:220)
	at dotty.tools.dotc.core.TypeComparer.isSub(TypeComparer.scala:222)
	at dotty.tools.dotc.core.ConstraintHandling.op$proxy3$1(ConstraintHandling.scala:455)
	at dotty.tools.dotc.core.ConstraintHandling.isSubTypeWhenFrozen(ConstraintHandling.scala:455)
	at dotty.tools.dotc.core.ConstraintHandling.isSubTypeWhenFrozen$(ConstraintHandling.scala:29)
	at dotty.tools.dotc.core.TypeComparer.isSubTypeWhenFrozen(TypeComparer.scala:30)
	at dotty.tools.dotc.core.TypeComparer.compareGADT$1(TypeComparer.scala:546)
	at dotty.tools.dotc.core.TypeComparer.thirdTryNamed$1(TypeComparer.scala:560)
	at dotty.tools.dotc.core.TypeComparer.thirdTry$1(TypeComparer.scala:611)
	at dotty.tools.dotc.core.TypeComparer.secondTry$1(TypeComparer.scala:539)
	at dotty.tools.dotc.core.TypeComparer.compareNamed$1(TypeComparer.scala:322)
	at dotty.tools.dotc.core.TypeComparer.firstTry$1(TypeComparer.scala:328)
	at dotty.tools.dotc.core.TypeComparer.recur(TypeComparer.scala:1430)
	at dotty.tools.dotc.core.TypeComparer.isSubType(TypeComparer.scala:210)
	at dotty.tools.dotc.core.TypeComparer.isSubType(TypeComparer.scala:220)
	at dotty.tools.dotc.core.TypeComparer.isSameType(TypeComparer.scala:2140)
	at dotty.tools.dotc.core.TypeComparer.isSame(TypeComparer.scala:2147)
	at dotty.tools.dotc.core.ConstraintHandling.op$proxy4$1(ConstraintHandling.scala:456)
	at dotty.tools.dotc.core.ConstraintHandling.isSameTypeWhenFrozen(ConstraintHandling.scala:456)
	at dotty.tools.dotc.core.ConstraintHandling.isSameTypeWhenFrozen$(ConstraintHandling.scala:29)
	at dotty.tools.dotc.core.TypeComparer.isSameTypeWhenFrozen(TypeComparer.scala:30)
	at dotty.tools.dotc.core.TypeComparer.singletonInterval(TypeComparer.scala:2181)
	at dotty.tools.dotc.core.TypeComparer.glbArgs(TypeComparer.scala:2314)
	at dotty.tools.dotc.core.TypeComparer.glbArgs(TypeComparer.scala:2325)
	at dotty.tools.dotc.core.TypeComparer.glbArgs(TypeComparer.scala:2325)
	at dotty.tools.dotc.core.TypeComparer.distributeAnd(TypeComparer.scala:2480)
	at dotty.tools.dotc.core.TypeComparer.andTypeGen(TypeComparer.scala:2387)
	at dotty.tools.dotc.core.TypeComparer.andType(TypeComparer.scala:2415)
	at dotty.tools.dotc.core.TypeComparer.glb(TypeComparer.scala:2227)
	at dotty.tools.dotc.core.TypeComparer$.glb(TypeComparer.scala:2946)
	at dotty.tools.dotc.core.Types$Type.$amp(Types.scala:1141)
	at dotty.tools.dotc.core.SymDenotations$ClassDenotation.computeAndOrType$1(SymDenotations.scala:2209)
	at dotty.tools.dotc.core.SymDenotations$ClassDenotation.recur$4(SymDenotations.scala:2218)
	at dotty.tools.dotc.core.SymDenotations$ClassDenotation.recur$4(SymDenotations.scala:2178)
	at dotty.tools.dotc.core.SymDenotations$ClassDenotation.computeTypeProxy$1(SymDenotations.scala:2186)
	at dotty.tools.dotc.core.SymDenotations$ClassDenotation.recur$4(SymDenotations.scala:2194)
	at dotty.tools.dotc.core.SymDenotations$ClassDenotation.baseTypeOf(SymDenotations.scala:2238)
	at dotty.tools.dotc.core.Types$Type.baseType(Types.scala:1134)
	at dotty.tools.dotc.core.Types$NamedType.argDenot(Types.scala:2393)
	at dotty.tools.dotc.core.Types$NamedType.fromDesignator$1(Types.scala:2338)
	at dotty.tools.dotc.core.Types$NamedType.computeDenot(Types.scala:2354)
	at dotty.tools.dotc.core.Types$NamedType.denot(Types.scala:2311)
	at dotty.tools.dotc.core.Types$NamedType.info(Types.scala:2299)
	at dotty.tools.dotc.core.Types$Type.isRef(Types.scala:194)
	at dotty.tools.dotc.core.Types$Type.isFromJavaObject(Types.scala:296)
	at dotty.tools.dotc.core.TypeComparer.firstTry$1(TypeComparer.scala:325)
	at dotty.tools.dotc.core.TypeComparer.recur(TypeComparer.scala:1430)
	at dotty.tools.dotc.core.TypeComparer.isSubType(TypeComparer.scala:210)
	at dotty.tools.dotc.core.TypeComparer.isSubType(TypeComparer.scala:220)
	at dotty.tools.dotc.core.TypeComparer.isSub(TypeComparer.scala:222)
	at dotty.tools.dotc.core.ConstraintHandling.op$proxy3$1(ConstraintHandling.scala:455)
	at dotty.tools.dotc.core.ConstraintHandling.isSubTypeWhenFrozen(ConstraintHandling.scala:455)
	at dotty.tools.dotc.core.ConstraintHandling.isSubTypeWhenFrozen$(ConstraintHandling.scala:29)
	at dotty.tools.dotc.core.TypeComparer.isSubTypeWhenFrozen(TypeComparer.scala:30)
	at dotty.tools.dotc.core.TypeComparer.compareGADT$1(TypeComparer.scala:546)
	at dotty.tools.dotc.core.TypeComparer.thirdTryNamed$1(TypeComparer.scala:560)
	at dotty.tools.dotc.core.TypeComparer.thirdTry$1(TypeComparer.scala:611)
	at dotty.tools.dotc.core.TypeComparer.secondTry$1(TypeComparer.scala:539)
	at dotty.tools.dotc.core.TypeComparer.compareNamed$1(TypeComparer.scala:322)
	at dotty.tools.dotc.core.TypeComparer.firstTry$1(TypeComparer.scala:328)
	at dotty.tools.dotc.core.TypeComparer.recur(TypeComparer.scala:1430)
	at dotty.tools.dotc.core.TypeComparer.isSubType(TypeComparer.scala:210)
	at dotty.tools.dotc.core.TypeComparer.isSubType(TypeComparer.scala:220)
	at dotty.tools.dotc.core.TypeComparer.isSameType(TypeComparer.scala:2140)
	at dotty.tools.dotc.core.TypeComparer.isSame(TypeComparer.scala:2147)
	at dotty.tools.dotc.core.ConstraintHandling.op$proxy4$1(ConstraintHandling.scala:456)
	at dotty.tools.dotc.core.ConstraintHandling.isSameTypeWhenFrozen(ConstraintHandling.scala:456)
	at dotty.tools.dotc.core.ConstraintHandling.isSameTypeWhenFrozen$(ConstraintHandling.scala:29)
	at dotty.tools.dotc.core.TypeComparer.isSameTypeWhenFrozen(TypeComparer.scala:30)
	at dotty.tools.dotc.core.TypeComparer.singletonInterval(TypeComparer.scala:2181)
	at dotty.tools.dotc.core.TypeComparer.glbArgs(TypeComparer.scala:2314)
	at dotty.tools.dotc.core.TypeComparer.glbArgs(TypeComparer.scala:2325)
	at dotty.tools.dotc.core.TypeComparer.glbArgs(TypeComparer.scala:2325)
	at dotty.tools.dotc.core.TypeComparer.distributeAnd(TypeComparer.scala:2480)
	at dotty.tools.dotc.core.TypeComparer.andTypeGen(TypeComparer.scala:2387)
	at dotty.tools.dotc.core.TypeComparer.andType(TypeComparer.scala:2415)
	at dotty.tools.dotc.core.TypeComparer.glb(TypeComparer.scala:2227)
	at dotty.tools.dotc.core.TypeComparer$.glb(TypeComparer.scala:2946)
	at dotty.tools.dotc.core.Types$Type.$amp(Types.scala:1141)
	at dotty.tools.dotc.core.SymDenotations$ClassDenotation.computeAndOrType$1(SymDenotations.scala:2209)
	at dotty.tools.dotc.core.SymDenotations$ClassDenotation.recur$4(SymDenotations.scala:2218)
	at dotty.tools.dotc.core.SymDenotations$ClassDenotation.recur$4(SymDenotations.scala:2178)
	at dotty.tools.dotc.core.SymDenotations$ClassDenotation.computeTypeProxy$1(SymDenotations.scala:2186)
	at dotty.tools.dotc.core.SymDenotations$ClassDenotation.recur$4(SymDenotations.scala:2194)
	at dotty.tools.dotc.core.SymDenotations$ClassDenotation.baseTypeOf(SymDenotations.scala:2238)
	at dotty.tools.dotc.core.Types$Type.baseType(Types.scala:1134)
	at dotty.tools.dotc.core.Types$NamedType.argDenot(Types.scala:2393)
	at dotty.tools.dotc.core.Types$NamedType.fromDesignator$1(Types.scala:2338)
	at dotty.tools.dotc.core.Types$NamedType.computeDenot(Types.scala:2354)
	at dotty.tools.dotc.core.Types$NamedType.denot(Types.scala:2311)
	at dotty.tools.dotc.core.Types$NamedType.info(Types.scala:2299)
	at dotty.tools.dotc.core.Types$Type.isRef(Types.scala:194)
	at dotty.tools.dotc.core.Types$Type.isFromJavaObject(Types.scala:296)
	at dotty.tools.dotc.core.TypeComparer.firstTry$1(TypeComparer.scala:325)
	at dotty.tools.dotc.core.TypeComparer.recur(TypeComparer.scala:1430)
	at dotty.tools.dotc.core.TypeComparer.isSubType(TypeComparer.scala:210)
	at dotty.tools.dotc.core.TypeComparer.isSubType(TypeComparer.scala:220)
	at dotty.tools.dotc.core.TypeComparer.isSub(TypeComparer.scala:222)
	at dotty.tools.dotc.core.ConstraintHandling.op$proxy3$1(ConstraintHandling.scala:455)
	at dotty.tools.dotc.core.ConstraintHandling.isSubTypeWhenFrozen(ConstraintHandling.scala:455)
	at dotty.tools.dotc.core.ConstraintHandling.isSubTypeWhenFrozen$(ConstraintHandling.scala:29)
	at dotty.tools.dotc.core.TypeComparer.isSubTypeWhenFrozen(TypeComparer.scala:30)
	at dotty.tools.dotc.core.TypeComparer.compareGADT$1(TypeComparer.scala:546)
	at dotty.tools.dotc.core.TypeComparer.thirdTryNamed$1(TypeComparer.scala:560)
	at dotty.tools.dotc.core.TypeComparer.thirdTry$1(TypeComparer.scala:611)
	at dotty.tools.dotc.core.TypeComparer.secondTry$1(TypeComparer.scala:539)
	at dotty.tools.dotc.core.TypeComparer.compareNamed$1(TypeComparer.scala:322)
	at dotty.tools.dotc.core.TypeComparer.firstTry$1(TypeComparer.scala:328)
	at dotty.tools.dotc.core.TypeComparer.recur(TypeComparer.scala:1430)
	at dotty.tools.dotc.core.TypeComparer.isSubType(TypeComparer.scala:210)
	at dotty.tools.dotc.core.TypeComparer.isSubType(TypeComparer.scala:220)
	at dotty.tools.dotc.core.TypeComparer.isSameType(TypeComparer.scala:2140)
	at dotty.tools.dotc.core.TypeComparer.isSame(TypeComparer.scala:2147)
	at dotty.tools.dotc.core.ConstraintHandling.op$proxy4$1(ConstraintHandling.scala:456)
	at dotty.tools.dotc.core.ConstraintHandling.isSameTypeWhenFrozen(ConstraintHandling.scala:456)
	at dotty.tools.dotc.core.ConstraintHandling.isSameTypeWhenFrozen$(ConstraintHandling.scala:29)
	at dotty.tools.dotc.core.TypeComparer.isSameTypeWhenFrozen(TypeComparer.scala:30)
	at dotty.tools.dotc.core.TypeComparer.singletonInterval(TypeComparer.scala:2181)
	at dotty.tools.dotc.core.TypeComparer.glbArgs(TypeComparer.scala:2314)
	at dotty.tools.dotc.core.TypeComparer.glbArgs(TypeComparer.scala:2325)
	at dotty.tools.dotc.core.TypeComparer.glbArgs(TypeComparer.scala:2325)
	at dotty.tools.dotc.core.TypeComparer.distributeAnd(TypeComparer.scala:2480)
	at dotty.tools.dotc.core.TypeComparer.andTypeGen(TypeComparer.scala:2387)
	at dotty.tools.dotc.core.TypeComparer.andType(TypeComparer.scala:2415)
	at dotty.tools.dotc.core.TypeComparer.glb(TypeComparer.scala:2227)
	at dotty.tools.dotc.core.TypeComparer$.glb(TypeComparer.scala:2946)
	at dotty.tools.dotc.core.Types$Type.$amp(Types.scala:1141)
	at dotty.tools.dotc.core.SymDenotations$ClassDenotation.computeAndOrType$1(SymDenotations.scala:2209)
	at dotty.tools.dotc.core.SymDenotations$ClassDenotation.recur$4(SymDenotations.scala:2218)
	at dotty.tools.dotc.core.SymDenotations$ClassDenotation.recur$4(SymDenotations.scala:2178)
	at dotty.tools.dotc.core.SymDenotations$ClassDenotation.computeTypeProxy$1(SymDenotations.scala:2186)
	at dotty.tools.dotc.core.SymDenotations$ClassDenotation.recur$4(SymDenotations.scala:2194)
	at dotty.tools.dotc.core.SymDenotations$ClassDenotation.baseTypeOf(SymDenotations.scala:2238)
	at dotty.tools.dotc.core.Types$Type.baseType(Types.scala:1134)
	at dotty.tools.dotc.core.Types$NamedType.argDenot(Types.scala:2393)
	at dotty.tools.dotc.core.Types$NamedType.fromDesignator$1(Types.scala:2338)
	at dotty.tools.dotc.core.Types$NamedType.computeDenot(Types.scala:2354)
	at dotty.tools.dotc.core.Types$NamedType.denot(Types.scala:2311)
	at dotty.tools.dotc.core.Types$NamedType.info(Types.scala:2299)
	at dotty.tools.dotc.core.Types$Type.isRef(Types.scala:194)
	at dotty.tools.dotc.core.Types$Type.isFromJavaObject(Types.scala:296)
	at dotty.tools.dotc.core.TypeComparer.firstTry$1(TypeComparer.scala:325)
	at dotty.tools.dotc.core.TypeComparer.recur(TypeComparer.scala:1430)
	at dotty.tools.dotc.core.TypeComparer.isSubType(TypeComparer.scala:210)
	at dotty.tools.dotc.core.TypeComparer.isSubType(TypeComparer.scala:220)
	at dotty.tools.dotc.core.TypeComparer.isSub(TypeComparer.scala:222)
	at dotty.tools.dotc.core.ConstraintHandling.op$proxy3$1(ConstraintHandling.scala:455)
	at dotty.tools.dotc.core.ConstraintHandling.isSubTypeWhenFrozen(ConstraintHandling.scala:455)
	at dotty.tools.dotc.core.ConstraintHandling.isSubTypeWhenFrozen$(ConstraintHandling.scala:29)
	at dotty.tools.dotc.core.TypeComparer.isSubTypeWhenFrozen(TypeComparer.scala:30)
	at dotty.tools.dotc.core.TypeComparer.compareGADT$1(TypeComparer.scala:546)
	at dotty.tools.dotc.core.TypeComparer.thirdTryNamed$1(TypeComparer.scala:560)
	at dotty.tools.dotc.core.TypeComparer.thirdTry$1(TypeComparer.scala:611)
	at dotty.tools.dotc.core.TypeComparer.secondTry$1(TypeComparer.scala:539)
	at dotty.tools.dotc.core.TypeComparer.compareNamed$1(TypeComparer.scala:322)
	at dotty.tools.dotc.core.TypeComparer.firstTry$1(TypeComparer.scala:328)
	at dotty.tools.dotc.core.TypeComparer.recur(TypeComparer.scala:1430)
	at dotty.tools.dotc.core.TypeComparer.isSubType(TypeComparer.scala:210)
	at dotty.tools.dotc.core.TypeComparer.isSubType(TypeComparer.scala:220)
	at dotty.tools.dotc.core.TypeComparer.isSameType(TypeComparer.scala:2140)
	at dotty.tools.dotc.core.TypeComparer.isSame(TypeComparer.scala:2147)
	at dotty.tools.dotc.core.ConstraintHandling.op$proxy4$1(ConstraintHandling.scala:456)
	at dotty.tools.dotc.core.ConstraintHandling.isSameTypeWhenFrozen(ConstraintHandling.scala:456)

@smarter
Copy link
Member

smarter commented Jan 29, 2023

Ah right, I was using java 8.

@TomasMikula
Copy link
Contributor Author

This was a hell of a task, but here's a minimization:

class VarImpl[P, A]()

class ContextImpl[Var[_]]()

trait Lambdas[F[_], P] {

  type Var[A] = VarImpl[P, A]

}

class LambdasImpl[F[_], P] extends Lambdas[F, P] {

  opaque type Context = ContextImpl[Var]

  sealed trait Foo[A]
  case class Bar[T]() extends Foo[Var[T]]

  def go[X](that: Foo[Var[X]]): Unit =
    that match
      case _ => ()
}

@dwijnand
Copy link
Member

How do you get the minimisation to hang? I tried both just running the batch compiler and running it through scala-cli and it just compiles.

@TomasMikula
Copy link
Contributor Author

I was playing within a larger sbt project, but tested also with scastie, which hangs as well:
https://scastie.scala-lang.org/j3RueVZXRdCAdVrLYZgEdQ

@dwijnand
Copy link
Member

Hmm, not able to make it fail in an sbt build either. And I don't know how to reproduce Scastie locally. Is there anything of interest in your sbt build?

@dwijnand
Copy link
Member

Ah. I can reproduce with 3.2.2 (which Scastie uses), not with 3.3.0-R2 which you had mentioned above.

@TomasMikula
Copy link
Contributor Author

I just tried with scalac directly and it is hanging for me as well

~/scala3-3.2.2/bin/scalac test.scala

where test.scala is exactly the code from my minimization snippet and scala3-3.2.2 is unpacked .tar.gz downloaded from https://github.com/lampepfl/dotty/releases/download/3.2.2/scala3-3.2.2.tar.gz

@dwijnand dwijnand added stat:fix available backport:nominated If we agree to backport this PR, replace this tag with "backport:accepted", otherwise delete it. and removed stat:needs triage Every issue needs to have an "area" and "itype" label labels Jan 30, 2023
@TomasMikula
Copy link
Contributor Author

Ah. I can reproduce with 3.2.2 (which Scastie uses), not with 3.3.0-R2 which you had mentioned above.

I was testing the whole project with 3.3.0-RC2 as well, and it was hanging. I didn't check the minimization with 3.3.0-RC2, though

@TomasMikula
Copy link
Contributor Author

@dwijnand Are you able to check that the original instructions, after changing Scala version in build.sbt to 3.3.0-RC2, hang for you as well?

git clone https://github.com/TomasMikula/libretto.git
cd libretto
git checkout 075f9f1911652ccaaa77dbf16e0b35ebd4a9dfc3

# Edit build.sbt, set
# ThisBuild / scalaVersion := "3.3.0-RC2"

sbt core/compile

@dwijnand
Copy link
Member

Yes.

@TomasMikula
Copy link
Contributor Author

Here's a version that gets 3.3.0-RC2 hanging:

class VarImpl[P, A]()

class ContextImpl[Var[_]]()

trait Lambdas[F[_, _], P] {

  type Var[A] = VarImpl[P, A]

}

class LambdasImpl[F[_, _], P] extends Lambdas[F, P] {

  opaque type Context = ContextImpl[Var]

  sealed trait Foo[A]
  case class Bar[T, U]() extends Foo[F[Var[T], Var[U]]]

  def go[X](that: Foo[Var[X]]): Unit =
    that match
      case _ => ()
}

@dwijnand Do you want me to open a separate ticket for that?

@dwijnand
Copy link
Member

No, this will do. Thank you.

@dwijnand dwijnand removed stat:fix available backport:nominated If we agree to backport this PR, replace this tag with "backport:accepted", otherwise delete it. labels Jan 31, 2023
@odersky
Copy link
Contributor

odersky commented Jan 31, 2023

It seems to be happening in the pattern matcher or exhaustivity checker.

@dwijnand
Copy link
Member

Yes. It's happening in instantiateToSubType, while refining a child class to the scrutinee type. It also happens multiple times, which gives me reason to finish and propose caching the decomposition of types (in Space instances). But first it shouldn't take 1m18s to do (param)3#Bar <:< Outer.this.Foo[Var[P, T3]]...

@dwijnand
Copy link
Member

My minimisation:

class Var[P, I]

class T1
class T2
class T3

class Outer[F[_, _], P]:
  type VarP[V] = Var[P, V]

  sealed trait Foo[A]
  case class Bar() extends Foo[F[VarP[T1], T2]]

  def go(scr: Foo[Var[P, T3]]): Unit = scr match
    case _ => ()

@SethTisue
Copy link
Member

The code is a bit esoteric, but Dale points out that fixing the pathologically bad performance on this somewhat esoteric code might, if we are lucky, improve performance even on less esoteric code.

@SethTisue SethTisue changed the title Compiler hangs at 100% CPU usage Unreasonably slow compilation of pattern match involving GADT reasoning on nested types Feb 1, 2023
@SethTisue
Copy link
Member

SethTisue commented Feb 1, 2023

Dale grasps this better than I do, but I'll try to write down his current hypothesis: the compiler is going down a rabbit hole trying to do GADT reasoning on P, even though there isn't any possibility of P actually ending up constrained in this case. So perhaps we can figure out a way to never add P to the GADT constraints in the first place, thereby preventing the compiler from ever starting down the rabbit hole. But it's not clear to us yet how to characterize the conditions under which P is or isn't in play.

@TomasMikula
Copy link
Contributor Author

The code is a bit esoteric, but Dale points out that fixing the pathologically bad performance on this somewhat esoteric code might, if we are lucky, improve performance even on less esoteric code.

@SethTisue Has the compilation actually finished on your machine? Not on mine after 20 minutes. So I don't think "Unreasonably slow compilation" quite captures the problem.

Anyway, how do you tell that some code is "esoteric"? And is that a useful qualifier w.r.t. the issue? NB, most minimized examples are contrived and necessarily look artificial.

@dwijnand
Copy link
Member

dwijnand commented Feb 2, 2023

@SethTisue Has the compilation actually finished on your machine? Not on mine after 20 minutes. So I don't think "Unreasonably slow compilation" quite captures the problem.

My T1/T2/T3 minimisation above did complete, after doing the same operation that takes 1m20s 2-3 times. But working on it more yesterday I realised that that version makes the scrutinee uninhabited, which isn't the case in your previous minimisation, so I've actually backtracked to that. I did compile some variant on the minimisation in the background while looking at something and then gave up, so yeah, could be that it never terminates. I think we can agree hanging is unreasonable. 😄 - Oh, and that was with a local patch to cache the operation so it only runs once...

Anyway, how do you tell that some code is "esoteric"? And is that a useful qualifier w.r.t. the issue? NB, most minimized examples are contrived and necessarily look artificial.

Apropos to that: it was very handy to have the diff of the commit that failed, because from there I was able to disprove a thought I'd had: I started to wonder whether it was a mistake that Bar extended Foo[F[Var[T], Var[U]]] wondering if perhaps it was a typo of either Foo[F[T, U]] or Foo[Var[T]] given both VarImpl and F are two param hkts. But I can see in libretto that Bar is probably:

case class Zip[A1, A2](resultVar: Var[A1 |*| A2]) extends Op.Linear[Var[A1] |*| Var[A2], Var[A1 |*| A2]]

But about your main point, it's necessary to balance out how much time to spend or not spend on tickets, and so some thought goes into how common a problem might appear, how hard it might be to fix and how hard it might be to workaround. Creating nested sealed hierarchies that depend on an outer type parameter isn't something I'd seen before, much less considered. I don't consider it unreasonable, but I would also say it's uncommon, which lowers its priority over other issues.

But I'm hooked 😄, and I'm hoping I can find a way to distinguish the times where the outer type parameter should be considered vs where it should be ignored (such as this case) so that it doesn't take forever to compile. I'm not sure I'll be able to make progress understanding the underlying cause of why those parameters are leading to this behaviour.

@SethTisue SethTisue changed the title Unreasonably slow compilation of pattern match involving GADT reasoning on nested types Unreasonably slow (or even non-terminating) compilation of pattern match involving GADT reasoning on nested types Feb 2, 2023
@TomasMikula
Copy link
Contributor Author

TomasMikula commented Feb 2, 2023

By no means do I expect anyone to leave everything they are doing and start working on my bug report (but I'm glad @dwijnand is hooked 😄). I just couldn't help but hear that non-termination is OK if the code looks strange.

I started to wonder whether it was a mistake that Bar extended Foo[F[Var[T], Var[U]]]

It wasn't but it could have well been. In the middle of refactoring, there will inevitably be wrong code. That's why I like static type checking—to guide me through it 😉.

Creating nested sealed hierarchies that depend on an outer type parameter isn't something I'd seen before, [...] I would [...] say it's uncommon, [...]

I would say that the combination of higher kinds and nested types is Scala's unique feature (among industry languages, at least).

We can have

trait OuterContext[F[_], G[_, _], H]

  enum ->[A, B] {
    case Id[A]() extends ->[A, A]
    case ...

// elsewhere
val ctx: OuterContext[Foo, Bar, Baz]
import ctx.->

def go[A, B, C](f: A -> B, g: B -> C): A -> C =
  ???

instead of

enum Fun[F[_], G[_, _], H, A, B]
  case Id[F[_], G[_, _], H, A]() extends Fun[F, G, H, A, A]
  case ...

// elsewhere
def go[F[_], G[_, _], H, A, B, C](f: Fun[F, G, H, A, B], g: Fun[F, G, H, B, C]): Fun[F, G, H, A, C] =
  ???

Which enum definition is clearer, -> or Fun? Which go signature is clearer?

Also, I have found this style workable only since Scala 3 (thanks to improved type checking of path-dependent types). That means you won't find it in projects that (cross-)compile to Scala 2.x. And that could be a big part of why it's not very common (yet).

@dwijnand
Copy link
Member

dwijnand commented Feb 3, 2023

Which enum definition is clearer, -> or Fun? Which go signature is clearer?

Also, I have found this style workable only since Scala 3 (thanks to improved type checking of path-dependent types). That means you won't find it in projects that (cross-)compile to Scala 2.x. And that could be a big part of why it's not very common (yet).

Agreed - I try to always consider the survival bias.

@TomasMikula
Copy link
Contributor Author

TomasMikula commented Feb 22, 2023

Thanks for the fix, @dwijnand ! Is there an easy way for me to try the fixed version in an sbt project?
I'm now facing a compiler hang when trying to update Scala version from 3.2.2 to 3.3.0-RC3 (i.e. a regression) and would like to check if by chance this fix also fixes that problem.

@smarter
Copy link
Member

smarter commented Feb 22, 2023

You can find the version number of the latest nightly by scrolling to the bottom of https://repo1.maven.org/maven2/org/scala-lang/scala3-compiler_3/ and it can directly be used as a version number in sbt, e.g. scalaVersion := "3.3.1-RC1-bin-20230221-847eccc-NIGHTLY").

@TomasMikula
Copy link
Contributor Author

Thanks, @smarter.

Today is not my lucky day:

  1. Got a compiler crash with 3.2.2.
  2. Went to see if it was fixed in 3.3.0-RC3.
    Got a compiler hang, before it even got to the point where 3.2.2 crashed.
  3. Went to see if it was fixed in 3.3.1-RC1-bin-20230221-847eccc-NIGHTLY.
    Got a type mismatch, before it even got to the point where 3.3.0-RC3 hanged.

@smarter
Copy link
Member

smarter commented Feb 22, 2023

Sorry about that. We do have libretto in our community-build but it hasn't been updated in a while: https://github.com/lampepfl/dotty/tree/main/community-build/community-projects

@TomasMikula
Copy link
Contributor Author

Ha, I've been occasionally syncing the dotty-staging/libretto fork, but obviously that's not enough 🤦

@smarter
Copy link
Member

smarter commented Feb 22, 2023

Yeah, technically submodules point to commits, not branches. Good for reproducibility but annoying to deal with sometimes :).

@TomasMikula
Copy link
Contributor Author

So here I isolated the typechecking regression: #16997.

@TomasMikula
Copy link
Contributor Author

Thanks for fixing that one, too, @smarter, @dwijnand.

Libretto now compiles with the current nightly build 3.3.1-RC1-bin-20230301-0df5ae2-NIGHTLY. Can you please update the submodule in the community build?

@smarter
Copy link
Member

smarter commented Mar 2, 2023

Great! I can put it on my todo list, but if you want it to get done faster, you can also open a PR that updates it. It sounds like you have access to the dotty-staging repo already, so you should be able to do something like:

git submodule update --init community-build/community-projects/libretto
cd community-build/community-projects/libretto
git fetch # I don't think specifying the remote will be necessary?
git checkout FETCH_HEAD # or manually checkout the correct commit
cd ..
git add libretto
git commit -am "..."

@TomasMikula
Copy link
Contributor Author

Here's the pull request to update Libretto: #17044

@Kordyjan Kordyjan added this to the 3.3.1 milestone Aug 1, 2023
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

Successfully merging a pull request may close this issue.

6 participants