Skip to content

ClassCastException: Types$LambdaParam cannot be cast to Symbol #4452

Closed
@Blaisorblade

Description

@Blaisorblade

Fuzzer input from #4389:

// ==> 09d8cdb2f7be2b81c318d338626268b7ec28ab12.scala <==
trait x0[x0[]] { // error
  (x1:x0[_):x0[ // error // error // error

uses wildcards but isn't covered by #4422. It gives

Exception in thread "main" java.lang.ClassCastException: dotty.tools.dotc.core.Types$LambdaParam cannot be cast to dotty.tools.dotc.core.Symbols$Symbol
	at dotty.tools.dotc.core.TypeComparer.compareCaptured$1(TypeComparer.scala:891)
	at dotty.tools.dotc.core.TypeComparer.isSubArg$1(TypeComparer.scala:903)
	at dotty.tools.dotc.core.TypeComparer.isSubArgs(TypeComparer.scala:912)
	at dotty.tools.dotc.core.TypeComparer.isMatchingApply$1(TypeComparer.scala:692)
	at dotty.tools.dotc.core.TypeComparer.compareAppliedType2$1(TypeComparer.scala:796)
	at dotty.tools.dotc.core.TypeComparer.thirdTry$1(TypeComparer.scala:405)
	at dotty.tools.dotc.core.TypeComparer.secondTry$1(TypeComparer.scala:363)
	at dotty.tools.dotc.core.TypeComparer.firstTry$1(TypeComparer.scala:285)
	at dotty.tools.dotc.core.TypeComparer.$anonfun$recur$2(TypeComparer.scala:860)
	at scala.runtime.java8.JFunction0$mcZ$sp.apply(JFunction0$mcZ$sp.java:12)
	at dotty.tools.dotc.reporting.trace$.op1$3(trace.scala:32)
	at dotty.tools.dotc.reporting.trace$.apply(trace.scala:33)
	at dotty.tools.dotc.reporting.trace$.apply(trace.scala:39)
	at dotty.tools.dotc.core.TypeComparer.recur(TypeComparer.scala:129)
	at dotty.tools.dotc.core.TypeComparer.isSubType(TypeComparer.scala:124)
	at dotty.tools.dotc.core.TypeComparer.isSubType(TypeComparer.scala:127)
	at dotty.tools.dotc.core.TypeComparer.topLevelSubType(TypeComparer.scala:110)
	at dotty.tools.dotc.core.Types$Type.$anonfun$$less$colon$less$1(Types.scala:778)
	at scala.runtime.java8.JFunction0$mcZ$sp.apply(JFunction0$mcZ$sp.java:12)
	at dotty.tools.dotc.util.Stats$.track(Stats.scala:35)
	at dotty.tools.dotc.core.Types$Type.$less$colon$less(Types.scala:778)
	at dotty.tools.dotc.typer.Typer.adaptNoArgsOther$1(Typer.scala:2326)
	at dotty.tools.dotc.typer.Typer.adaptNoArgs$1(Typer.scala:2394)
	at dotty.tools.dotc.typer.Typer.adapt1(Typer.scala:2526)
	at dotty.tools.dotc.typer.Typer.$anonfun$adapt$1(Typer.scala:2071)
	at dotty.tools.dotc.util.Stats$.track(Stats.scala:35)
	at dotty.tools.dotc.typer.Typer.adapt(Typer.scala:2066)
	at dotty.tools.dotc.typer.Typer.$anonfun$typed$2(Typer.scala:1856)
	at dotty.tools.dotc.reporting.trace$.op1$3(trace.scala:32)
	at dotty.tools.dotc.reporting.trace$.apply(trace.scala:33)
	at dotty.tools.dotc.typer.Typer.typed(Typer.scala:1852)
	at dotty.tools.dotc.typer.Typer.typed(Typer.scala:1864)
	at dotty.tools.dotc.typer.Typer.ascription$1(Typer.scala:560)
	at dotty.tools.dotc.typer.Typer.$anonfun$typedTyped$5(Typer.scala:578)
	at dotty.tools.dotc.typer.Typer.cases$1(Typer.scala:550)
	at dotty.tools.dotc.typer.Typer.$anonfun$typedTyped$1(Typer.scala:576)
	at dotty.tools.dotc.util.Stats$.track(Stats.scala:35)
	at dotty.tools.dotc.typer.Typer.typedTyped(Typer.scala:536)
	at dotty.tools.dotc.typer.Typer.typedUnnamed$1(Typer.scala:1778)
	at dotty.tools.dotc.typer.Typer.typedUnadapted(Typer.scala:1825)
	at dotty.tools.dotc.typer.Typer.$anonfun$typed$2(Typer.scala:1856)
	at dotty.tools.dotc.reporting.trace$.op1$3(trace.scala:32)
	at dotty.tools.dotc.reporting.trace$.apply(trace.scala:33)
	at dotty.tools.dotc.typer.Typer.typed(Typer.scala:1852)
	at dotty.tools.dotc.typer.Typer.typed(Typer.scala:1864)
	at dotty.tools.dotc.typer.Typer.traverse$1(Typer.scala:1900)
	at dotty.tools.dotc.typer.Typer.typedStats(Typer.scala:1912)
	at dotty.tools.dotc.typer.Typer.$anonfun$typedClassDef$1(Typer.scala:1526)
	at dotty.tools.dotc.util.Stats$.track(Stats.scala:35)
	at dotty.tools.dotc.typer.Typer.typedClassDef(Typer.scala:1450)
	at dotty.tools.dotc.typer.Typer.typedNamed$1(Typer.scala:1765)
	at dotty.tools.dotc.typer.Typer.typedUnadapted(Typer.scala:1824)
	at dotty.tools.dotc.typer.Typer.$anonfun$typed$2(Typer.scala:1856)
	at dotty.tools.dotc.reporting.trace$.op1$3(trace.scala:32)
	at dotty.tools.dotc.reporting.trace$.apply(trace.scala:33)
	at dotty.tools.dotc.typer.Typer.typed(Typer.scala:1852)
	at dotty.tools.dotc.typer.Typer.typed(Typer.scala:1864)
	at dotty.tools.dotc.typer.Typer.traverse$1(Typer.scala:1883)
	at dotty.tools.dotc.typer.Typer.typedStats(Typer.scala:1912)
	at dotty.tools.dotc.typer.Typer.$anonfun$typedPackageDef$1(Typer.scala:1631)
	at dotty.tools.dotc.util.Stats$.track(Stats.scala:35)
	at dotty.tools.dotc.typer.Typer.typedPackageDef(Typer.scala:1624)
	at dotty.tools.dotc.typer.Typer.typedUnnamed$1(Typer.scala:1804)
	at dotty.tools.dotc.typer.Typer.typedUnadapted(Typer.scala:1825)
	at dotty.tools.dotc.typer.Typer.$anonfun$typed$2(Typer.scala:1856)
	at dotty.tools.dotc.reporting.trace$.op1$3(trace.scala:32)
	at dotty.tools.dotc.reporting.trace$.apply(trace.scala:33)
	at dotty.tools.dotc.typer.Typer.typed(Typer.scala:1852)
	at dotty.tools.dotc.typer.Typer.typed(Typer.scala:1864)
	at dotty.tools.dotc.typer.Typer.typedExpr(Typer.scala:1924)
	at dotty.tools.dotc.typer.FrontEnd.$anonfun$typeCheck$1(FrontEnd.scala:66)
	at dotty.tools.dotc.typer.FrontEnd.monitor(FrontEnd.scala:34)
	at dotty.tools.dotc.typer.FrontEnd.typeCheck(FrontEnd.scala:64)
	at dotty.tools.dotc.typer.FrontEnd.$anonfun$runOn$7(FrontEnd.scala:95)
	at dotty.tools.dotc.typer.FrontEnd.$anonfun$runOn$7$adapted(FrontEnd.scala:95)
	at scala.collection.immutable.List.foreach(List.scala:389)
	at dotty.tools.dotc.typer.FrontEnd.runOn(FrontEnd.scala:95)
	at dotty.tools.dotc.Run.$anonfun$compileUnits$3(Run.scala:174)
	at scala.runtime.java8.JFunction0$mcV$sp.apply(JFunction0$mcV$sp.java:12)
	at dotty.tools.dotc.util.Stats$.trackTime(Stats.scala:47)
	at dotty.tools.dotc.Run.$anonfun$compileUnits$2(Run.scala:171)
	at dotty.tools.dotc.Run.$anonfun$compileUnits$2$adapted(Run.scala:169)
	at scala.collection.IndexedSeqOptimized.foreach(IndexedSeqOptimized.scala:32)
	at scala.collection.IndexedSeqOptimized.foreach$(IndexedSeqOptimized.scala:29)
	at scala.collection.mutable.ArrayOps$ofRef.foreach(ArrayOps.scala:191)
	at dotty.tools.dotc.Run.runPhases$1(Run.scala:169)
	at dotty.tools.dotc.Run.$anonfun$compileUnits$1(Run.scala:194)
	at scala.runtime.java8.JFunction0$mcV$sp.apply(JFunction0$mcV$sp.java:12)
	at dotty.tools.dotc.util.Stats$.maybeMonitored(Stats.scala:88)
	at dotty.tools.dotc.Run.compileUnits(Run.scala:149)
	at dotty.tools.dotc.Run.compileSources(Run.scala:136)
	at dotty.tools.dotc.Run.compile(Run.scala:120)
	at dotty.tools.dotc.Driver.doCompile(Driver.scala:29)
	at dotty.tools.dotc.Driver.process(Driver.scala:127)
	at dotty.tools.dotc.Driver.process(Driver.scala:96)
	at dotty.tools.dotc.Driver.process(Driver.scala:108)
	at dotty.tools.dotc.Driver.main(Driver.scala:135)
	at dotty.tools.dotc.Main.main(Main.scala)

That code assumes that all ParamInfo are also symbols, but LambdaParam is the lone exception.

Metadata

Metadata

Assignees

No one assigned

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions