Skip to content

Compiler crash: NullPointerException with HK types and separate compilation #4188

Closed
@allanrenucci

Description

@allanrenucci

In a file collections.scala:

package collections

object collections {
  type AnyConstr[X] = Any
}

import collections._

trait Iterable[+A] extends IterableOps[A, Iterable, Iterable[A]]

trait IterableOps[+A, +CC[_], +C]

trait Map[K, +V] extends MapOps[K, V, Map, Map[K, V]]

trait MapOps[K, +V, +CC[_, _] <: IterableOps[_, AnyConstr, _], +C]
  extends IterableOps[(K, V), Iterable, C] {
  def view: MapView[K, V] = ???
}

trait View[+A] extends Iterable[A] with IterableOps[A, View, View[A]]

trait MapView[K, +V]
  extends MapOps[K, V, ({ type l[X, Y] = View[(X, Y)] })#l, View[(K, V)]]
  with View[(K, V)]

class MapDecorator[C, M <: HasMapOps[C]]

trait HasMapOps[C] {

  /** The type of keys */
  type K

  /** The type of values */
  type V

  type A = (K, V)
}

object decorators {
  def MapDecorator[C](coll: C)(implicit map: HasMapOps[C]): MapDecorator[C, map.type] = ???

  implicit def mapHasMapOps[CC[X, +Y] <: MapOps[X, Y, ({ type l[X, +Y] = IterableOps[_, AnyConstr, _] })#l, _], K0, V0]: HasMapOps[CC[K0, V0]] { type K = K0; type V = V0 } = ???
}

In a file Test.scala

package collections

import decorators._

object Test {
  def test(map: Map[Int, String]) = {
    MapDecorator(map.view)
  }
}
> dotc -d out collections.scala
> dotc -d out -classpath out Test.scala
Exception in thread "main" java.lang.NullPointerException
	at dotty.tools.dotc.core.Types$HKLambda.iso(Types.scala:2722)
	at dotty.tools.dotc.core.Types$Type.equals(Types.scala:1415)
	at dotty.tools.dotc.core.Types$HKLambda.equals(Types.scala:2712)
	at dotty.tools.dotc.core.Substituters.substParams(Substituters.scala:181)
	at dotty.tools.dotc.core.Substituters.substParams$(Substituters.scala:178)
	at dotty.tools.dotc.core.Contexts$Context.substParams(Contexts.scala:70)
	at dotty.tools.dotc.core.Substituters$SubstParamsMap.apply(Substituters.scala:234)
	at dotty.tools.dotc.core.Types$TypeMap.$anonfun$mapOver$6(Types.scala:3965)
	at dotty.tools.dotc.core.Types$VariantTraversal.atVariance(Types.scala:3893)
	at dotty.tools.dotc.core.Types$TypeMap.mapArgs$1(Types.scala:3965)
	at dotty.tools.dotc.core.Types$TypeMap.mapOver(Types.scala:3973)
	at dotty.tools.dotc.core.Substituters.substParams(Substituters.scala:189)
	at dotty.tools.dotc.core.Substituters.substParams$(Substituters.scala:178)
	at dotty.tools.dotc.core.Contexts$Context.substParams(Contexts.scala:70)
	at dotty.tools.dotc.core.Substituters$SubstParamsMap.apply(Substituters.scala:234)
	at dotty.tools.dotc.core.Types$TypeMap.$anonfun$mapOver$6(Types.scala:3965)
	at dotty.tools.dotc.core.Types$VariantTraversal.atVariance(Types.scala:3893)
	at dotty.tools.dotc.core.Types$TypeMap.mapArgs$1(Types.scala:3965)
	at dotty.tools.dotc.core.Types$TypeMap.mapOver(Types.scala:3973)
	at dotty.tools.dotc.core.Substituters.substParams(Substituters.scala:189)
	at dotty.tools.dotc.core.Substituters.substParams$(Substituters.scala:178)
	at dotty.tools.dotc.core.Contexts$Context.substParams(Contexts.scala:70)
	at dotty.tools.dotc.core.Types$Type.substParams(Types.scala:1345)
	at dotty.tools.dotc.core.Types$LambdaType.instantiate(Types.scala:2675)
	at dotty.tools.dotc.core.Types$LambdaType.instantiate$(Types.scala:2674)
	at dotty.tools.dotc.core.Types$HKLambda.instantiate(Types.scala:2704)
	at dotty.tools.dotc.core.TypeApplications$.tryReduce$1(TypeApplications.scala:373)
	at dotty.tools.dotc.core.TypeApplications$.$anonfun$appliedTo$extension0$1(TypeApplications.scala:390)
...

Metadata

Metadata

Assignees

Type

No type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions