Scalaコンパイラを落とす3行のコード
既知のバグ(NullPointerException when using case class with function-valued field · Issue #1087 · scala/bug · GitHub)だったようです。
Scalaコンパイラを落とすコード。
class A case class B extends A case class C(f : Unit => Unit) extends B
$ scalac foo.java ... Exception in thread "main" java.lang.NullPointerException at scala.tools.nsc.typechecker.EtaExpansion$class.freshName$1(EtaExpansion.scala:57) at scala.tools.nsc.typechecker.EtaExpansion$class.liftout$1(EtaExpansion.scala:82) at scala.tools.nsc.typechecker.EtaExpansion$class.liftoutPrefix$1(EtaExpansion.scala:92) at scala.tools.nsc.typechecker.EtaExpansion$class.etaExpand(EtaExpansion.scala:121) at scala.tools.nsc.Global$analyzer$.etaExpand(Global.scala:284) ...
発生条件
caseクラスを継承できるのかな、と思って試してみたら、コンパイラがNullPointerExceptionを吐いた。型チェックに失敗しているのか。
いろいろコードを変えて試したところ、
- caseクラスを継承する
- 引数として関数型を受け取る
という条件で落ちる気がする。
発生環境
環境は、こんな感じ。
$ uname -a Linux mzp-desktop 2.6.27-11-generic #1 SMP Thu Jan 29 19:24:39 UTC 2009 i686 GNU/Linux $ java -version java version "1.6.0_10" Java(TM) SE Runtime Environment (build 1.6.0_10-b33) Java HotSpot(TM) Client VM (build 11.0-b15, mixed mode, sharing) $ scalac -version Scala compiler version 2.7.2.final -- Copyright 2002-2008, LAMP/EPFL