Skip to content

Instantly share code, notes, and snippets.

@xuwei-k
Last active August 29, 2015 13:58
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save xuwei-k/10002590 to your computer and use it in GitHub Desktop.
Save xuwei-k/10002590 to your computer and use it in GitHub Desktop.
NameHashing を有効にすると sbt が コンパイル時に stack overflow するバグ?
  • 発生条件

  • 実際の結果は以下のtravis参照すれば、すべてわかるようにしてあるはず

  • https://travis-ci.org/xuwei-k/nobox/builds/22371723

  • https://travis-ci.org/xuwei-k/nobox/builds/22371760

  • sbt 0.13.2-RC1, 0.13.5-M1, 0.13.5-M2 のどれか

  • かつ、Scala 2.11.0-RC1, RC3, RC4 のどれか (2.11.0-M8以前は試していない)

  • かつ、NameHashing のオプションを ON にした場合

  • 逆に発生しない条件で言い換えると

  • sbt 0.13.2-M3, 0.13.2-M2, 0.13.2-M1 では、 Scala2.11.x で NameHashing を ON にしても発生しない

  • sbt 0.13.2-RC1, 0.13.5-M1, 0.13.5-M2 で NameHashing 有効にしても、Scala2.10.4だと発生しない

  • NameHashingのオプションをoffにすると、sbtやScalaのversionに関係なく発生しない

  • 発生するコード

  • このtree https://github.com/xuwei-k/nobox/tree/56618410

  • かなりの量をコード生成して、大量にあって切り出せていない、すいません

  • ほかのプロジェクトでも、同じ条件で試すと同じエラー発生

  • https://travis-ci.org/xuwei-k/iarray/builds/22372260

  • https://github.com/xuwei-k/iarray/tree/4b4255a2d

  • その他個人的予想など

  • sbt 0.13.2系もしくは0.13.5系のSNAPSHOTはまだ試していない

  • ログを見る限り無限ループしてるように見える

  • stack traceにExtractUsedNames.scala がでてくるので、その履歴を見る限り、このあたり https://github.com/sbt/sbt/commit/70fecfe767f5d9 のコミットでバグ入れた?

java.lang.StackOverflowError
at scala.PartialFunction$$anonfun$runWith$1.apply(PartialFunction.scala:136)
at scala.PartialFunction$$anonfun$runWith$1.apply(PartialFunction.scala:135)
at scala.collection.immutable.Set$Set2.foreach(Set.scala:113)
at scala.collection.TraversableLike$class.collect(TraversableLike.scala:282)
at scala.collection.AbstractTraversable.collect(Traversable.scala:104)
at xsbt.Compat$MacroExpansionOf$.unapply(Compat.scala:125)
at xsbt.ExtractUsedNames.xsbt$ExtractUsedNames$$handleTreeNode$1(ExtractUsedNames.scala:86)
at xsbt.ExtractUsedNames$$anonfun$handleMacroExpansion$1$1.apply(ExtractUsedNames.scala:58)
at xsbt.ExtractUsedNames$$anonfun$handleMacroExpansion$1$1.apply(ExtractUsedNames.scala:58)
at scala.reflect.internal.Trees$ForeachTreeTraverser.traverse(Trees.scala:1616)
at scala.reflect.internal.Trees$TreeContextApiImpl.foreach(Trees.scala:106)
at xsbt.ExtractUsedNames.handleMacroExpansion$1(ExtractUsedNames.scala:58)
at xsbt.ExtractUsedNames.xsbt$ExtractUsedNames$$handleTreeNode$1(ExtractUsedNames.scala:88)
at xsbt.ExtractUsedNames$$anonfun$handleMacroExpansion$1$1.apply(ExtractUsedNames.scala:58)
at xsbt.ExtractUsedNames$$anonfun$handleMacroExpansion$1$1.apply(ExtractUsedNames.scala:58)
at scala.reflect.internal.Trees$ForeachTreeTraverser.traverse(Trees.scala:1616)
at scala.reflect.internal.Trees$TreeContextApiImpl.foreach(Trees.scala:106)
at xsbt.ExtractUsedNames.handleMacroExpansion$1(ExtractUsedNames.scala:58)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment