Skip to content

Compiler crashes with ClassCastException when polymorphic kinds are used #8927

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

Closed
mehakun opened this issue May 9, 2020 · 1 comment · Fixed by #10052
Closed

Compiler crashes with ClassCastException when polymorphic kinds are used #8927

mehakun opened this issue May 9, 2020 · 1 comment · Fixed by #10052

Comments

@mehakun
Copy link

mehakun commented May 9, 2020

Minimized code

trait Eq[k <: AnyKind, K[_ <: k]] :
  def [A <: k, B <: k](k: K[A]) isEq (k2: K[B]): Eq.GEQ[k, K, A, B]

object Eq:
  enum GEQ[k <: AnyKind, K[_ <: k], A <: k, B <: k]:
    case Y[k <: AnyKind, K[_ <: k], A <: k](res: K[A]) extends GEQ[k, K, A, A]
    case N()


sealed trait DPair[k <: AnyKind, K[_ <: k], +V[_ <: k]]:
  type A <: k
  val key: K[A]
  val value: V[A]
  final def extract[B <: k](k: K[B])(using Eq[k, K]): Option[V[B]] = key isEq k match 
    case y: Eq.GEQ.Y[k, K, A] => Some(value)
    case _    => None

object DPair:
  given pair [k, K[_ <: k], V[_ <: k], C <: k] as Conversion[(K[C], V[C]), DPair[k, K, V]] = tup => 
    case class dpair(key: K[C], value: V[C]) extends DPair[k, K, V]:
      type A = C
    dpair(tup._1, tup._2)  

Output (click arrow to expand)

exception while typing x9.$isInstanceOf$[[35mEq.GEQ.Y[k, K, DPair.this.A] @k[0m] of class class dotty.tools.dotc.ast.Trees$TypeApply # 123468
exception while typing [33mif [0mx9.$isInstanceOf$[[35mEq.GEQ.Y[k, K, DPair.this.A] @k[0m][33m then[0m
{
[33mcase[0m [33mval[0m [36my[0m: [35mEq.GEQ.Y[k, K, DPair.this.A][0m =
x9.$asInstanceOf$[[35mEq.GEQ.Y[k, K, DPair.this.A] @k[0m]
[33mreturn[[0mmatchResult7[33m][0m
{
Some.apply[[35mV[DPair.this.A]0m.
$asInstanceOf$
[[35mOption[V[B]][0m]
}
}
[33m else [0m[31m()[0m of class class dotty.tools.dotc.ast.Trees$If # 123836
exception while typing {
[33mcase[0m [33mval[0m [36mx9[0m: [35mEq.GEQ[k, K, DPair.this.A, B][0m =
x$2.isEq[[35mDPair.this.A[0m, [35mB0m(k)
[33mif [0mx9.$isInstanceOf$[[35mEq.GEQ.Y[k, K, DPair.this.A] @k[0m][33m then[0m
{
[33mcase[0m [33mval[0m [36my[0m: [35mEq.GEQ.Y[k, K, DPair.this.A][0m =
x9.$asInstanceOf$[[35mEq.GEQ.Y[k, K, DPair.this.A] @k[0m]
[33mreturn[[0mmatchResult7[33m][0m
{
Some.apply[[35mV[DPair.this.A]0m
.$asInstanceOf$[[35mOption[V[B]][0m]
}
}
[33m else [0m[31m()[0m
[33mreturn[[0mmatchResult7[33m][0m
{
None
}
} of class class dotty.tools.dotc.ast.Trees$Block # 123837
exception while typing matchResult7[33m[[0mOption[33m]: [0m
{
[33mcase[0m [33mval[0m [36mx9[0m: [35mEq.GEQ[k, K, DPair.this.A, B][0m =
x$2.isEq[[35mDPair.this.A[0m, [35mB0m(k)
[33mif [0mx9.$isInstanceOf$[[35mEq.GEQ.Y[k, K, DPair.this.A] @k[0m][33m then[0m
{
[33mcase[0m [33mval[0m [36my[0m: [35mEq.GEQ.Y[k, K, DPair.this.A][0m =
x9.$asInstanceOf$[[35mEq.GEQ.Y[k, K, DPair.this.A] @k[0m]
[33mreturn[[0mmatchResult7[33m][0m
{
Some.apply[[35mV[DPair.this.A]0m.$asInstanceOf$[[35mOption[V[B]][0m]
}
}
[33m else [0m[31m()[0m
[33mreturn[[0mmatchResult7[33m][0m
{
None
}
} of class class dotty.tools.dotc.ast.Trees$Labeled # 123838
exception while typing [33mfinal[0m [33mdef[0m [36mextract[0m[[35mB[0m[35m <: k[0m]([36mk[0m: [35mK[B][0m)([33musing [0m[36mx$2[0m: [35mEq[k, K][0m): [35mOption[V[B]][0m =
matchResult7[33m[[0mOption[33m]: [0m
{
[33mcase[0m [33mval[0m [36mx9[0m: [35mEq.GEQ[k, K, DPair.this.A, B][0m =
x$2.isEq[[35mDPair.this.A[0m, [35mB0m(k)
[33mif [0mx9.$isInstanceOf$[[35mEq.GEQ.Y[k, K, DPair.this.A] @k[0m][33m then[0m
{
[33mcase[0m [33mval[0m [36my[0m: [35mEq.GEQ.Y[k, K, DPair.this.A][0m =
x9.$asInstanceOf$[[35mEq.GEQ.Y[k, K, DPair.this.A] @k[0m]
[33mreturn[[0mmatchResult7[33m][0m
{
Some.apply[[35mV[DPair.this.A]0m.$asInstanceOf$[[35mOption[V[B]][0m]
}
}
[33m else [0m[31m()[0m
[33mreturn[[0mmatchResult7[33m][0m
{
None
}
} of class class dotty.tools.dotc.ast.Trees$DefDef # 123839
exception while typing @[35mscala.annotation.internal.SourceFile[0m(
[32m"/tmp/scastie5782560974754810597/src/main/scala/main.scala"[0m
) @[35mscala.annotation.internal.Child[0m[[35mDPair0m [33msealed[0m [33mtrait[0m [35mDPair[0m[[35mk[0m[35m <: AnyKind[0m,
[35mK[0m[35m[$4][0m
, [35mV[0m[35m[
$5]0m[33m extends[0m [35mObject[0m {
[33mprivate[0m [33mtype[0m [35mk[0m[35m <: AnyKind[0m
[33mprivate[0m [33mtype[0m [35mK[0m[35m[$4][0m
[33mprivate[0m [33mtype[0m +[35mV[0m[35m[
$5][0m
[33mtype[0m [35mA[0m[35m <: k[0m
[33mdef[0m [36mkey[0m: [35mK[DPair.this.A][0m
[33mdef[0m [36mvalue[0m: [35mV[DPair.this.A][0m
[33mfinal[0m [33mdef[0m [36mextract[0m[[35mB[0m[35m <: k[0m]([36mk[0m: [35mK[B][0m)([33musing [0m[36mx$2[0m: [35mEq[k, K][0m): [35mOption[V[B]][0m =
matchResult7[33m[[0mOption[33m]: [0m
{
[33mcase[0m [33mval[0m [36mx9[0m: [35mEq.GEQ[k, K, DPair.this.A, B][0m =
x$2.isEq[[35mDPair.this.A[0m, [35mB0m(k)
[33mif [0mx9.$isInstanceOf$[[35mEq.GEQ.Y[k, K, DPair.this.A] @k[0m][33m then[0m
{
[33mcase[0m [33mval[0m [36my[0m: [35mEq.GEQ.Y[k, K, DPair.this.A][0m =
x9.$asInstanceOf$[[35mEq.GEQ.Y[k, K, DPair.this.A] @k[0m]
[33mreturn[[0mmatchResult7[33m][0m
{
Some.apply[[35mV[DPair.this.A]0m.$asInstanceOf$[[35mOption[V[B]][0m]
}
}
[33m else [0m[31m()[0m
[33mreturn[[0mmatchResult7[33m][0m
{
None
}
}
} of class class dotty.tools.dotc.ast.Trees$TypeDef # 123841
exception while typing [33mpackage [0m {
@[35mscala.annotation.internal.SourceFile[0m(
[32m"/tmp/scastie5782560974754810597/src/main/scala/main.scala"[0m
) [33mtrait[0m [35mEq[0m[[35mk[0m[35m <: AnyKind[0m, [35mK[0m[35m[$1]0m[33m extends[0m [35mObject[0m {
[33mprivate[0m [33mtype[0m [35mk[0m[35m <: AnyKind[0m
[33mprivate[0m [33mtype[0m [35mK[0m[35m[
$1][0m
@root.scala.annotation.infix() [33mdef[0m ([36mk[0m: [35mK[A][0m) [36misEq[0m[[35mA[0m[35m <: k[0m, [35mB[0m[35m <: k[0m]([36mk2[0m: [35mK[B][0m
)
: [35mEq.GEQ[k, K, A, B][0m
}
[33mfinal[0m [33mlazy[0m [33mmodule[0m [33mval[0m [36mEq[0m: [35mEq$[0m = [33mnew [0m[35mEq$[0m()
@[35mscala.annotation.internal.SourceFile[0m(
[32m"/tmp/scastie5782560974754810597/src/main/scala/main.scala"[0m
) [33mfinal[0m [33mmodule[0m [33mclass[0m [35mEq$[0m()[33m extends[0m [35mObject[0m(), [35mSerializable[0m {
[33mprivate[0m [33mdef[0m [36mwriteReplace[0m(): [35mAnyRef[0m =
[33mnew [0m[35mscala.runtime.ModuleSerializationProxy[0m(classOf[Eq.type])
@[35mscala.annotation.internal.Child[0m[[35mEq.GEQ.N0m @
[35mscala.annotation.internal.Child[0m
[[35mEq.GEQ.Y0m [33msealed[0m [33mabstract[0m [33mclass[0m [35mGEQ[0m[[35mk[0m[35m <: AnyKind[0m, [35mK[0m[35m[$2][0m, [35mA[0m[35m <: k[0m, [35mB[0m[35m <: k[0m]
(
)[33m extends[0m [35mObject[0m(), [35mEnum[0m {
[33moverride[0m [33mdef[0m [36mordinal[0m: [35mInt[0m = [33mthis[0m.$ordinal
[33mprivate[0m [33mtype[0m [35mk[0m[35m <: AnyKind[0m
[33mprivate[0m [33mtype[0m [35mK[0m[35m[
$2][0m
[33mprivate[0m [33mtype[0m [35mA[0m[35m <: k[0m
[33mprivate[0m [33mtype[0m [35mB[0m[35m <: k[0m
}
[33mfinal[0m [33mlazy[0m [33mmodule[0m [33mval[0m [36mGEQ[0m: [35mEq.GEQ$[0m = [33mnew [0m[35mEq.GEQ$[0m()
[33mfinal[0m [33mmodule[0m [33mclass[0m [35mGEQ$[0m()[33m extends[0m [35mAnyRef[0m(), [35mSerializable[0m, [35m
scala.deriving.Mirror.Sum
[0m {
[33mprivate[0m [33mdef[0m [36mwriteReplace[0m(): [35mAnyRef[0m =
[33mnew [0m[35mscala.runtime.ModuleSerializationProxy[0m(classOf[Eq.GEQ.type])
[33mfinal[0m [33mcase[0m [33mclass[0m [35mY[0m[[35mk[0m[35m <: AnyKind[0m, [35mK[0m[35m[$3][0m, [35mA[0m[35m <: k[0m]([36mres[0m: [35mK[A][0m)[33m extends[0m
[35mEq.GEQ[k, K, A, A][0m
(), [35mProduct[0m, [35mSerializable[0m {
[33moverride[0m [33mdef[0m [36mhashCode[0m(): [35mInt[0m =
scala.runtime.ScalaRunTime.hashCode([33mthis[0m)
[33moverride[0m [33mdef[0m [36mequals[0m([36mx$0[0m: [35mAny[0m): [35mBoolean[0m =
[33mthis[0m.eq(x$0.$asInstanceOf$[[35mObject[0m]).||(
matchResult1[33m[[0mBoolean[33m]: [0m
{
[33mcase[0m [33mval[0m [36mx1[0m: [35m(x$0 : Object)[0m = x$0
[33mif [0mx1.$isInstanceOf$[[35mEq.GEQ.Y[k, K, A] @unchecked[0m][33m then[0m
{
[33mcase[0m [33mval[0m [36mx$0[0m: [35mEq.GEQ.Y[k, K, A][0m =
x1.$asInstanceOf$[[35mEq.GEQ.Y[k, K, A] @unchecked[0m]
[33mreturn[[0mmatchResult1[33m][0m [33mthis[0m.res.==(x$0.res)
}
[33m else [0m[31m()[0m
[33mreturn[[0mmatchResult1[33m][0m [31mfalse[0m
}
)
[33moverride[0m [33mdef[0m [36mtoString[0m(): [35mString[0m =
scala.runtime.ScalaRunTime.toString([33mthis[0m)
[33moverride[0m [33mdef[0m [36mcanEqual[0m([36mthat[0m: [35mAny[0m): [35mBoolean[0m =
that.isInstanceOf[[35mEq.GEQ.Y[k, K, A] @unchecked[0m]
[33moverride[0m [33mdef[0m [36mproductArity[0m: [35mInt[0m = [31m1[0m
[33moverride[0m [33mdef[0m [36mproductPrefix[0m: [35mString[0m = [32m"Y"[0m
[33moverride[0m [33mdef[0m [36mproductElement[0m([36mn[0m: [35mInt[0m): [35mAny[0m =
matchResult2[33m[[0mObject[33m]: [0m
{
[33mcase[0m [33mval[0m [36mx3[0m: [35m(n : Int)[0m = n
[33mif [0m[31m0[0m.==(x3)[33m then[0m [33mreturn[[0mmatchResult2[33m][0m [33mthis[0m.1[33m else [0m[31m()[0m
[33mthrow [0m[33mnew [0m[35mIndexOutOfBoundsException[0m(n.toString())
}
[33moverride[0m [33mdef[0m [36mproductElementName[0m([36mn[0m: [35mInt[0m): [35mString[0m =
matchResult3[33m[[0mString[33m]: [0m
{
[33mcase[0m [33mval[0m [36mx4[0m: [35m(n : Int)[0m = n
[33mif [0m[31m0[0m.==(x4)[33m then[0m [33mreturn[[0mmatchResult3[33m][0m [32m"res"[0m[33m else [0m[31m()[0m
[33mthrow [0m[33mnew [0m[35mIndexOutOfBoundsException[0m(n.toString())
}
[33mprivate[0m [33mtype[0m [35mk[0m[35m <: AnyKind[0m
[33mprivate[0m [33mtype[0m [35mK[0m[35m[
$3][0m
[33mprivate[0m [33mtype[0m [35mA[0m[35m <: k[0m
[33mdef[0m [36mres[0m: [35mK[A][0m
[33mdef[0m [36mcopy[0m[[35mk[0m[35m <: AnyKind[0m, [35mK[0m[35m[
$3][0m, [35mA[0m[35m <: k[0m]([36mres[0m: [35mK[A][0m): [35mEq.GEQ.Y[k, K, A][0m =
[33mnew [0m[35mEq.GEQ.Y[0m[[35mk[0m, [35mK[0m, [35mA0m
[33mdef[0m [36mcopy$default$1[0m[[35mk[0m[35m <: AnyKind[0m, [35mK[0m[35m[
$3][0m, [35mA[0m[35m <: k[0m]: [35mK[A][0m =
Y.this.res:[35m(Y.this.res : (): Object) @uncheckedVariance[0m
[33mdef[0m [36m$ordinal[0m: [35mInt[0m = [31m0[0m
[33mdef[0m [36m_1[0m: [35mK[A][0m = [33mthis[0m.res
}
[33mfinal[0m [33mlazy[0m [33mmodule[0m [33mval[0m [36mY[0m: [35mEq.GEQ.Y$[0m = [33mnew [0m[35mEq.GEQ.Y$[0m()
[33mfinal[0m [33mmodule[0m [33mclass[0m [35mY$[0m()[33m extends[0m [35mAnyRef[0m(), [35mSerializable[0m, [35m
scala.deriving.Mirror.Product
[0m {
[33mprivate[0m [33mdef[0m [36mwriteReplace[0m(): [35mAnyRef[0m =
[33mnew [0m[35mscala.runtime.ModuleSerializationProxy[0m(classOf[Eq.GEQ.Y.type])
[33mdef[0m [36mapply[0m[[35mk[0m[35m <: AnyKind[0m, [35mK[0m[35m[
$3][0m, [35mA[0m[35m <: k[0m]([36mres[0m: [35mK[A][0m): [35mEq.GEQ[k, K, A, A][0m
=
[33mnew [0m[35mEq.GEQ.Y[0m[[35mk[0m, [35mK[0m, [35mA0m
[33mdef[0m [36munapply[0m[[35mk[0m[35m <: AnyKind[0m, [35mK[0m[35m[$3][0m, [35mA[0m[35m <: k[0m]([36mx$1[0m: [35mEq.GEQ.Y[k, K, A][0m):
[35mEq.GEQ.Y[k, K, A][0m
= x$1
[33mtype[0m [35mMirroredMonoType[0m[35m = Eq.GEQ.Y[?, ?, ?][0m
[33mdef[0m [36mfromProduct[0m([36mx$0[0m: [35mProduct[0m): [35mEq.GEQ.Y.MirroredMonoType[0m =
[33mnew [0m[35mEq.GEQ.Y[0m[[35mAnyKind[0m, [35m[
$3 <: AnyKind] =>> Any[0m, [35mAny0m.$asInstanceOf$[[35mEq.GEQ.Y.MirroredMonoType[0m]
}
[33mfinal[0m [33mcase[0m [33mclass[0m [35mN[0m[[35mk[0m[35m <: AnyKind[0m, [35mK[0m[35m[$2][0m, [35mA[0m[35m <: k[0m, [35mB[0m[35m <: k0m[33m extends[0m
[35mEq.GEQ[k, K, A, B][0m
(), [35mProduct[0m, [35mSerializable[0m {
[33moverride[0m [33mdef[0m [36mhashCode[0m(): [35mInt[0m =
scala.runtime.ScalaRunTime.hashCode([33mthis[0m)
[33moverride[0m [33mdef[0m [36mequals[0m([36mx$0[0m: [35mAny[0m): [35mBoolean[0m =
[33mthis[0m.eq(x$0.$asInstanceOf$[[35mObject[0m]).||(
matchResult4[33m[[0mBoolean[33m]: [0m
{
[33mcase[0m [33mval[0m [36mx5[0m: [35m(x$0 : Object)[0m = x$0
[33mif [0mx5.$isInstanceOf$[[35mEq.GEQ.N[k, K, A, B] @unchecked[0m][33m then[0m
{
[33mcase[0m [33mval[0m [36mx$0[0m: [35mEq.GEQ.N[k, K, A, B][0m =
x5.$asInstanceOf$[[35mEq.GEQ.N[k, K, A, B] @unchecked[0m]
[33mreturn[[0mmatchResult4[33m][0m [31mtrue[0m
}
[33m else [0m[31m()[0m
[33mreturn[[0mmatchResult4[33m][0m [31mfalse[0m
}
)
[33moverride[0m [33mdef[0m [36mtoString[0m(): [35mString[0m =
scala.runtime.ScalaRunTime.toString([33mthis[0m)
[33moverride[0m [33mdef[0m [36mcanEqual[0m([36mthat[0m: [35mAny[0m): [35mBoolean[0m =
that.isInstanceOf[[35mEq.GEQ.N[k, K, A, B] @unchecked[0m]
[33moverride[0m [33mdef[0m [36mproductArity[0m: [35mInt[0m = [31m0[0m
[33moverride[0m [33mdef[0m [36mproductPrefix[0m: [35mString[0m = [32m"N"[0m
[33moverride[0m [33mdef[0m [36mproductElement[0m([36mn[0m: [35mInt[0m): [35mAny[0m =
matchResult5[33m[[0mNothing[33m]: [0m
{
[33mcase[0m [33mval[0m [36mx7[0m: [35m(n : Int)[0m = n
[33mthrow [0m[33mnew [0m[35mIndexOutOfBoundsException[0m(n.toString())
}
[33moverride[0m [33mdef[0m [36mproductElementName[0m([36mn[0m: [35mInt[0m): [35mString[0m =
matchResult6[33m[[0mNothing[33m]: [0m
{
[33mcase[0m [33mval[0m [36mx8[0m: [35m(n : Int)[0m = n
[33mthrow [0m[33mnew [0m[35mIndexOutOfBoundsException[0m(n.toString())
}
[33mprivate[0m [33mtype[0m [35mk[0m[35m <: AnyKind[0m
[33mprivate[0m [33mtype[0m [35mK[0m[35m[
$2][0m
[33mprivate[0m [33mtype[0m [35mA[0m[35m <: k[0m
[33mprivate[0m [33mtype[0m [35mB[0m[35m <: k[0m
[33mdef[0m [36mcopy[0m[[35mk[0m[35m <: AnyKind[0m, [35mK[0m[35m[
$2][0m, [35mA[0m[35m <: k[0m, [35mB[0m[35m <: k0m: [35mEq.GEQ.N[k, K, A, B][0m
=
[33mnew [0m[35mEq.GEQ.N[0m[[35mk[0m, [35mK[0m, [35mA[0m, [35mB0m
[33mdef[0m [36m$ordinal[0m: [35mInt[0m = [31m1[0m
}
[33mfinal[0m [33mlazy[0m [33mmodule[0m [33mval[0m [36mN[0m: [35mEq.GEQ.N$[0m = [33mnew [0m[35mEq.GEQ.N$[0m()
[33mfinal[0m [33mmodule[0m [33mclass[0m [35mN$[0m()[33m extends[0m [35mAnyRef[0m(), [35mSerializable[0m, [35m
scala.deriving.Mirror.Product
[0m {
[33mprivate[0m [33mdef[0m [36mwriteReplace[0m(): [35mAnyRef[0m =
[33mnew [0m[35mscala.runtime.ModuleSerializationProxy[0m(classOf[Eq.GEQ.N.type])
[33mdef[0m [36mapply[0m[[35mk[0m[35m <: AnyKind[0m, [35mK[0m[35m[
$2][0m, [35mA[0m[35m <: k[0m, [35mB[0m[35m <: k0m: [35mEq.GEQ[k, K, A, B][0m =
[33mnew [0m[35mEq.GEQ.N[0m[[35mk[0m, [35mK[0m, [35mA[0m, [35mB0m
[33mdef[0m [36munapply[0m[[35mk[0m[35m <: AnyKind[0m, [35mK[0m[35m[$2][0m, [35mA[0m[35m <: k[0m, [35mB[0m[35m <: k[0m](
[36mx$1[0m: [35mEq.GEQ.N[k, K, A, B][0m
): [35m([31mtrue[0m : Boolean)[0m = [31mtrue[0m
[33mtype[0m [35mMirroredMonoType[0m[35m = Eq.GEQ.N[?, ?, ?, ?][0m
[33mdef[0m [36mfromProduct[0m([36mx$0[0m: [35mProduct[0m): [35mEq.GEQ.N.MirroredMonoType[0m =
[33mnew [0m[35mEq.GEQ.N[0m[[35mAnyKind[0m, [35m[
$2 <: AnyKind] =>> Any[0m, [35mAny[0m, [35mAny0m.
$asInstanceOf$
[[35mEq.GEQ.N.MirroredMonoType[0m]
}
[33mtype[0m [35mMirroredMonoType[0m[35m = Eq.GEQ[?, ?, ?, ?][0m
[33mdef[0m [36mordinal[0m([36mx$0[0m: [35mEq.GEQ.MirroredMonoType[0m): [35mInt[0m = x$0.ordinal
}
}
@[35mscala.annotation.internal.SourceFile[0m(
[32m"/tmp/scastie5782560974754810597/src/main/scala/main.scala"[0m
) @[35mscala.annotation.internal.Child[0m[[35mDPair0m [33msealed[0m [33mtrait[0m [35mDPair[0m[[35mk[0m[35m <: AnyKind[0m,
[35mK[0m[35m[$4][0m
, [35mV[0m[35m[
$5]0m[33m extends[0m [35mObject[0m {
[33mprivate[0m [33mtype[0m [35mk[0m[35m <: AnyKind[0m
[33mprivate[0m [33mtype[0m [35mK[0m[35m[$4][0m
[33mprivate[0m [33mtype[0m +[35mV[0m[35m[
$5][0m
[33mtype[0m [35mA[0m[35m <: k[0m
[33mdef[0m [36mkey[0m: [35mK[DPair.this.A][0m
[33mdef[0m [36mvalue[0m: [35mV[DPair.this.A][0m
[33mfinal[0m [33mdef[0m [36mextract[0m[[35mB[0m[35m <: k[0m]([36mk[0m: [35mK[B][0m)([33musing [0m[36mx$2[0m: [35mEq[k, K][0m): [35mOption[V[B]][0m =
matchResult7[33m[[0mOption[33m]: [0m
{
[33mcase[0m [33mval[0m [36mx9[0m: [35mEq.GEQ[k, K, DPair.this.A, B][0m =
x$2.isEq[[35mDPair.this.A[0m, [35mB0m(k)
[33mif [0mx9.$isInstanceOf$[[35mEq.GEQ.Y[k, K, DPair.this.A] @k[0m][33m then[0m
{
[33mcase[0m [33mval[0m [36my[0m: [35mEq.GEQ.Y[k, K, DPair.this.A][0m =
x9.$asInstanceOf$[[35mEq.GEQ.Y[k, K, DPair.this.A] @k[0m]
[33mreturn[[0mmatchResult7[33m][0m
{
Some.apply[[35mV[DPair.this.A]0m.$asInstanceOf$[[35mOption[V[B]][0m]
}
}
[33m else [0m[31m()[0m
[33mreturn[[0mmatchResult7[33m][0m
{
None
}
}
}
[33mfinal[0m [33mlazy[0m [33mmodule[0m [33mval[0m [36mDPair[0m: [35mDPair$[0m = [33mnew [0m[35mDPair$[0m()
@[35mscala.annotation.internal.SourceFile[0m(
[32m"/tmp/scastie5782560974754810597/src/main/scala/main.scala"[0m
) [33mfinal[0m [33mmodule[0m [33mclass[0m [35mDPair$[0m()[33m extends[0m [35mObject[0m(), [35mSerializable[0m {
[33mprivate[0m [33mdef[0m [36mwriteReplace[0m(): [35mAnyRef[0m =
[33mnew [0m[35mscala.runtime.ModuleSerializationProxy[0m(classOf[DPair.type])
[33mfinal[0m [33mgiven[0m [33mdef[0m [36mpair[0m[[35mk[0m[35m[0m, [35mK[0m[35m[$6][0m, [35mV[0m[35m[$7][0m, [35mC[0m[35m <: k[0m]:
[35mConversion[(K[C], V[C]), DPair[k, K, V]][0m
=
{
[33mdef[0m [36m$anonfun[0m([36mtup[0m: [35m(K[C], V[C])[0m): [35mDPair[k, K, V][0m =
{
[33mcase[0m [33mclass[0m [35mdpair[0m([36mkey[0m: [35mK[C][0m, [36mvalue[0m: [35mV[C][0m)[33m extends[0m [35mObject[0m(), [35m
DPair[k, K, V]
[0m, [35mProduct[0m, [35mSerializable[0m {
[33moverride[0m [33mdef[0m [36mhashCode[0m(): [35mInt[0m =
scala.runtime.ScalaRunTime._hashCode([33mthis[0m)
[33moverride[0m [33mdef[0m [36mequals[0m([36mx$0[0m: [35mAny[0m): [35mBoolean[0m =
[33mthis[0m.eq(x$0.$asInstanceOf$[[35mObject[0m]).||(
matchResult8[33m[[0mBoolean[33m]: [0m
{
[33mcase[0m [33mval[0m [36mx11[0m: [35m(x$0 : Object)[0m = x$0
[33mif [0mx11.$isInstanceOf$[[35mdpair @unchecked[0m][33m then[0m
{
[33mcase[0m [33mval[0m [36mx$0[0m: [35mdpair[0m =
x11.$asInstanceOf$[[35mdpair @unchecked[0m]
[33mreturn[[0mmatchResult8[33m][0m
[33mthis[0m.key.==(x$0.key).&&([33mthis[0m.value.==(x$0.value))
}
[33m else [0m[31m()[0m
[33mreturn[[0mmatchResult8[33m][0m [31mfalse[0m
}
)
[33moverride[0m [33mdef[0m [36mtoString[0m(): [35mString[0m =
scala.runtime.ScalaRunTime._toString([33mthis[0m)
[33moverride[0m [33mdef[0m [36mcanEqual[0m([36mthat[0m: [35mAny[0m): [35mBoolean[0m =
that.isInstanceOf[[35mdpair @unchecked[0m]
[33moverride[0m [33mdef[0m [36mproductArity[0m: [35mInt[0m = [31m2[0m
[33moverride[0m [33mdef[0m [36mproductPrefix[0m: [35mString[0m = [32m"dpair"[0m
[33moverride[0m [33mdef[0m [36mproductElement[0m([36mn[0m: [35mInt[0m): [35mAny[0m =
matchResult9[33m[[0mObject[33m]: [0m
{
[33mcase[0m [33mval[0m [36mx13[0m: [35m(n : Int)[0m = n
[33mif [0m[31m0[0m.==(x13)[33m then[0m [33mreturn[[0mmatchResult9[33m][0m [33mthis[0m._1[33m else [0m[31m()[0m
[33mif [0m[31m1[0m.==(x13)[33m then[0m [33mreturn[[0mmatchResult9[33m][0m [33mthis[0m._2[33m else [0m[31m()[0m
[33mthrow [0m[33mnew [0m[35mIndexOutOfBoundsException[0m(n.toString())
}
[33moverride[0m [33mdef[0m [36mproductElementName[0m([36mn[0m: [35mInt[0m): [35mString[0m =
matchResult10[33m[[0mString[33m]: [0m
{
[33mcase[0m [33mval[0m [36mx14[0m: [35m(n : Int)[0m = n
[33mif [0m[31m0[0m.==(x14)[33m then[0m [33mreturn[[0mmatchResult10[33m][0m [32m"key"[0m[33m else [0m[31m()[0m
[33mif [0m[31m1[0m.==(x14)[33m then[0m [33mreturn[[0mmatchResult10[33m][0m [32m"value"[0m[33m else [0m[31m()[0m
[33mthrow [0m[33mnew [0m[35mIndexOutOfBoundsException[0m(n.toString())
}
[33mdef[0m [36mkey[0m: [35mK[C][0m
[33mdef[0m [36mvalue[0m: [35mV[C][0m
[33mtype[0m [35mA[0m = [35mC[0m
[33mdef[0m [36mcopy[0m([36mkey[0m: [35mK[C][0m, [36mvalue[0m: [35mV[C][0m): [35mdpair[0m = [33mnew [0m[35mdpair[0m(key, value)
[33mdef[0m [36mcopy$default$1[0m: [35mK[C][0m =
dpair.this.key:[35m(dpair.this.key : (): Object) @uncheckedVariance[0m
[33mdef[0m [36mcopy$default$2[0m: [35mV[C][0m =
dpair.this.value:
[35m(dpair.this.value : (): Object) @uncheckedVariance[0m
[33mdef[0m [36m_1[0m: [35mK[C][0m = [33mthis[0m.key
[33mdef[0m [36m_2[0m: [35mV[C][0m = [33mthis[0m.value
}
[33mfinal[0m [33mlazy[0m [33mmodule[0m [33mdef[0m [36mdpair[0m: [35mdpair$[0m = [33mnew [0m[35mdpair$[0m()
[33mfinal[0m [33mmodule[0m [33mclass[0m [35mdpair$[0m()[33m extends[0m [35mObject[0m(), [35m((K[C], V[C]) => dpair
)
[0m, [35mSerializable[0m, [35mscala.deriving.Mirror.Product[0m {
[33mdef[0m [36mapply[0m([36mkey[0m: [35mK[C][0m, [36mvalue[0m: [35mV[C][0m): [35mdpair[0m = [33mnew [0m[35mdpair[0m(key, value)
[33mdef[0m [36munapply[0m([36mx$1[0m: [35mdpair[0m): [35mdpair[0m = x$1
[33mtype[0m [35mMirroredMonoType[0m[35m = dpair[0m
[33mdef[0m [36mfromProduct[0m([36mx$0[0m: [35mProduct[0m): [35mDPair.dpair.MirroredMonoType[0m =
[33mnew [0m[35mdpair[0m(x$0.productElement([31m0[0m).$asInstanceOf$[[35mK[C][0m],
x$0.productElement([31m1[0m).$asInstanceOf$[[35mV[C][0m]
)
}
dpair.apply(tup._1, tup._2):
[35m(DPair[k, K, V] & Product & java.io.Serializable){A = C}[0m
}
{
[33mfinal[0m [33mclass[0m [35m$anon[0m()[33m extends[0m [35mConversion[0m[[35m(K[C], V[C])[0m, [35mDPair[k, K, V]0m
{
[33mfinal[0m [33mdef[0m [36mapply[0m([36mtup[0m: [35m(K[C], V[C])[0m): [35mDPair[k, K, V][0m = $anonfun(tup)
}
[33mnew [0m[35m[35mConversion[0m {...}[0m()
}
}
}
} of class class dotty.tools.dotc.ast.Trees$PackageDef # 123861
java.lang.ClassCastException: dotty.tools.dotc.core.Types$Range cannot be cast to dotty.tools.dotc.core.Types$TypeBounds while compiling /tmp/scastie5782560974754810597/src/main/scala/main.scala

@Odomontois
Copy link

Odomontois commented May 10, 2020

Note: this code was checked in dotty 0.24-RC1
https://scastie.scala-lang.org/Odomontois/QkWJdWFATkiMm1i6g8ApaQ/1
Problem somehow resolves if you move imports lower here, but not in the original code.

griggt added a commit to griggt/dotty that referenced this issue Oct 21, 2020
liufengyun added a commit that referenced this issue Oct 21, 2020
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.

2 participants