Aladdin - Scala Bugtracking
[#1278] project: compiler priority: high category: bug
submitter assigned to status date submitted
Sean Burak fixed 2007-08-19 12:00:41.0
subject pm code causes erasure asInstanceOf crash
code
package test
object Go {  
  trait Token {
    val offset : Int
    def matching : Option[Token]
  }
  def go(tok : Token) = tok.matching match {
    case Some(other) if true => Some(other)
    case _ if true => tok.matching match {
      case Some(other) => Some(other)
      case _ => None
    }
  }
}
what happened
Tested in both RC1, and my current checkout (with Burak's recent pattern match changes reverted to 12494):

sean-mcdirmid:~/workspace/test14/src mcdirmid$ ../../scala/dists/latest/bin/scalac -sourcepath . -d ../bin -clas\
spath ../bin/ test/Go.scala 
Exception in thread "main" java.lang.AssertionError: assertion failed: temp1.asInstanceOf[Some]()
	at scala.Predef$.assert(Predef.scala:96)
	at scala.tools.nsc.transform.Erasure$ErasureTransformer$$anon$2.transform(Erasure.scala:780)
	at scala.tools.nsc.ast.Trees$Transformer$$anonfun$23.apply(Trees.scala:1217)
	at scala.tools.nsc.ast.Trees$Transformer$$anonfun$23.apply(Trees.scala:1217)
	at scala.tools.nsc.ast.Trees$Transformer.atOwner(Trees.scala:1333)
	at scala.tools.nsc.ast.Trees$Transformer.transform(Trees.scala:1216)
	at scala.tools.nsc.transform.Erasure$ErasureTransformer$$anon$2.transform(Erasure.scala:864)
	at scala.tools.nsc.ast.Trees$Transformer$$anonfun$33.apply(Trees.scala:1327)
	at scala.tools.nsc.ast.Trees$Transformer$$anonfun$33.apply(Trees.scala:1325)
	at scala.List$.loop$0(List.scala:244)
	at scala.List$.mapConserve(List.scala:261)
	at scala.tools.nsc.ast.Trees$Transformer.transformStats(Trees.scala:1325)
	at scala.tools.nsc.ast.Trees$Transformer.transform(Trees.scala:1239)
	at scala.tools.nsc.transform.Erasure$ErasureTransformer$$anon$2.transform(Erasure.scala:864)
	at scala.tools.nsc.ast.Trees$Transformer.transform(Trees.scala:1261)
	at scala.tools.nsc.transform.Erasure$ErasureTransformer$$anon$2.transform(Erasure.scala:864)
	at scala.tools.nsc.ast.Trees$Transformer.transform(Trees.scala:1239)
	at scala.tools.nsc.transform.Erasure$ErasureTransformer$$anon$2.transform(Erasure.scala:864)
	at scala.tools.nsc.ast.Trees$Transformer.transform(Trees.scala:1261)
	at scala.tools.nsc.transform.Erasure$ErasureTransformer$$anon$2.transform(Erasure.scala:864)
	at scala.tools.nsc.ast.Trees$Transformer.transform(Trees.scala:1239)
	at scala.tools.nsc.transform.Erasure$ErasureTransformer$$anon$2.transform(Erasure.scala:864)
	at scala.tools.nsc.ast.Trees$Transformer.transform(Trees.scala:1261)
	at scala.tools.nsc.transform.Erasure$ErasureTransformer$$anon$2.transform(Erasure.scala:864)
	at scala.tools.nsc.ast.Trees$Transformer.transform(Trees.scala:1239)
	at scala.tools.nsc.transform.Erasure$ErasureTransformer$$anon$2.transform(Erasure.scala:864)
	at scala.tools.nsc.ast.Trees$Transformer$$anonfun$24.apply(Trees.scala:1222)
	at scala.tools.nsc.ast.Trees$Transformer$$anonfun$24.apply(Trees.scala:1221)
	at scala.tools.nsc.ast.Trees$Transformer.atOwner(Trees.scala:1333)
	at scala.tools.nsc.ast.Trees$Transformer.transform(Trees.scala:1220)
	at scala.tools.nsc.transform.Erasure$ErasureTransformer$$anon$2.transform(Erasure.scala:860)
	at scala.tools.nsc.ast.Trees$Transformer$$anonfun$33.apply(Trees.scala:1327)
	at scala.tools.nsc.ast.Trees$Transformer$$anonfun$33.apply(Trees.scala:1325)
	at scala.List$.loop$0(List.scala:244)
	at scala.List$.mapConserve(List.scala:261)
	at scala.tools.nsc.ast.Trees$Transformer.transformStats(Trees.scala:1325)
	at scala.tools.nsc.ast.Trees$Transformer.transform(Trees.scala:1237)
	at scala.tools.nsc.transform.Erasure$ErasureTransformer$$anon$2.transform(Erasure.scala:864)
	at scala.tools.nsc.ast.Trees$Transformer.transformTemplate(Trees.scala:1311)
	at scala.tools.nsc.ast.Trees$Transformer$$anonfun$21.apply(Trees.scala:1209)
	at scala.tools.nsc.ast.Trees$Transformer$$anonfun$21.apply(Trees.scala:1209)
	at scala.tools.nsc.ast.Trees$Transformer.atOwner(Trees.scala:1333)
	at scala.tools.nsc.ast.Trees$Transformer.transform(Trees.scala:1208)
	at scala.tools.nsc.transform.Erasure$ErasureTransformer$$anon$2.transform(Erasure.scala:864)
	at scala.tools.nsc.ast.Trees$Transformer$$anonfun$33.apply(Trees.scala:1327)
	at scala.tools.nsc.ast.Trees$Transformer$$anonfun$33.apply(Trees.scala:1325)
	at scala.List$.loop$0(List.scala:244)
	at scala.List$.mapConserve(List.scala:261)
	at scala.tools.nsc.ast.Trees$Transformer.transformStats(Trees.scala:1325)
	at scala.tools.nsc.ast.Trees$Transformer$$anonfun$20.apply(Trees.scala:1205)
	at scala.tools.nsc.ast.Trees$Transformer$$anonfun$20.apply(Trees.scala:1205)
	at scala.tools.nsc.ast.Trees$Transformer.atOwner(Trees.scala:1333)
	at scala.tools.nsc.ast.Trees$Transformer.transform(Trees.scala:1204)
	at scala.tools.nsc.transform.Erasure$ErasureTransformer$$anon$2.transform(Erasure.scala:864)
	at scala.tools.nsc.transform.Erasure$ErasureTransformer.transform(Erasure.scala:873)
	at scala.tools.nsc.ast.Trees$Transformer.transformUnit(Trees.scala:1328)
	at scala.tools.nsc.transform.Transform$Phase.apply(Transform.scala:30)
	at scala.tools.nsc.Global$GlobalPhase.applyPhase(Global.scala:258)
	at scala.tools.nsc.Global$GlobalPhase$$anonfun$2.apply(Global.scala:247)
	at scala.tools.nsc.Global$GlobalPhase$$anonfun$2.apply(Global.scala:247)
	at scala.Iterator$class.foreach(Iterator.scala:375)
	at scala.collection.mutable.ListBuffer$$anon$0.foreach(ListBuffer.scala:255)
	at scala.tools.nsc.Global$GlobalPhase.run(Global.scala:247)
	at scala.tools.nsc.Global$Run.compileSources(Global.scala:542)
	at scala.tools.nsc.Global$Run.compile(Global.scala:623)
	at scala.tools.nsc.Main$.process(Main.scala:86)
	at scala.tools.nsc.Main$.main(Main.scala:107)
	at scala.tools.nsc.Main.main(Main.scala)
what expected
[back to overview]
Changes of this bug report
Burak  edited on  2007-08-19 13:15:33.0
fixed in rev 12566
Burak  edited on  2007-08-19 13:16:15.0
changed the subject line, the cause was a missing LabelDef