Skip to content

Instantly share code, notes, and snippets.

@gseitz
Created August 22, 2012 15:08
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 gseitz/3426589 to your computer and use it in GitHub Desktop.
Save gseitz/3426589 to your computer and use it in GitHub Desktop.
Crash in pattern matcher in 2.10.0-M7
> last compile
[debug]
[debug] Initial source changes:
[debug] removed:Set()
[debug] added: Set()
[debug] modified: Set(C:\Users\sege\projects\scratch\src\main\scala\PatMat.scala)
[debug] Removed products: Set(C:\Users\sege\projects\scratch\target\scala-2.10\classes\crash\PatMatCrash.class, C:\Users\sege\projects\scratch\target\scala-2.10\classes\crash\PatMatCrash$$anonfun$1.class)
[debug] Modified external sources: Set()
[debug] Modified binary dependencies: Set()
[debug] Initial directly invalidated sources: Set(C:\Users\sege\projects\scratch\src\main\scala\PatMat.scala)
[debug]
[debug] Sources indirectly invalidated by:
[debug] product: Set(C:\Users\sege\projects\scratch\src\main\scala\PatMat.scala)
[debug] binary dep: Set()
[debug] external source: Set()
[debug] Initially invalidated: Set(C:\Users\sege\projects\scratch\src\main\scala\PatMat.scala)
[info] Compiling 1 Scala source to C:\Users\sege\projects\scratch\target\scala-2.10\classes...
[debug] Running cached compiler 42d34b8c, interfacing (CompilerInterface) with Scala compiler version 2.10.0-M7
[debug] Calling Scala compiler with arguments (CompilerInterface):
[debug] -d
[debug] C:\Users\sege\projects\scratch\target\scala-2.10\classes
[debug] -bootclasspath
[debug] C:\Program Files\Java\jdk1.6.0_27\jre\lib\resources.jar;C:\Program Files\Java\jdk1.6.0_27\jre\lib\rt.jar;C:\Program Files\Java\jdk1.6.0_27\jre\lib\sunrsasign.jar;C:\Program Files\Java\jdk1.6.0_27\jre\lib\jsse.jar;C:\Program Files\Java\jdk1.6.0_27\jre\lib\jce.jar;C:\Program Files\Java\jdk1.6.0_27\jre\lib\charsets.jar;C:\Program Files\Java\jdk1.6.0_27\jre\lib\modules\jdk.boot.jar;C:\Program Files\Java\jdk1.6.0_27\jre\classes;C:\Users\sege\.sbt\0.12.0\boot\scala-2.10.0-M7\lib\scala-library.jar
[debug] -classpath
[debug] C:\Users\sege\projects\scratch\target\scala-2.10\classes
[error] Unknown type: ?, ? [class scala.reflect.internal.Types$WildcardType$, class scala.reflect.internal.Types$WildcardType$] TypeRef? false
[error]
[error] while compiling: C:\Users\sege\projects\scratch\src\main\scala\PatMat.scala
[error] during phase: icode
[error] library version: version 2.10.0-M7
[error] compiler version: version 2.10.0-M7
[error] reconstructed args: -bootclasspath C:\Program Files\Java\jdk1.6.0_27\jre\lib\resources.jar;C:\Program Files\Java\jdk1.6.0_27\jre\lib\rt.jar;C:\Program Files\Java\jdk1.6.0_27\jre\lib\sunrsasign.jar;C:\Program Files\Java\jdk1.6.0_27\jre\lib\jsse.jar;C:\Program Files\Java\jdk1.6.0_27\jre\lib\jce.jar;C:\Program Files\Java\jdk1.6.0_27\jre\lib\charsets.jar;C:\Program Files\Java\jdk1.6.0_27\jre\lib\modules\jdk.boot.jar;C:\Program Files\Java\jdk1.6.0_27\jre\classes;C:\Users\sege\.sbt\0.12.0\boot\scala-2.10.0-M7\lib\scala-library.jar -d C:\Users\sege\projects\scratch\target\scala-2.10\classes -classpath C:\Users\sege\projects\scratch\target\scala-2.10\classes
[error]
[error] last tree to typer: term $outer
[error] symbol: value $outer (flags: <synthetic> <paramaccessor> <triedcooking> private[this])
[error] symbol definition: private[this] val $outer: crash.PatMatCrash
[error] tpe: <notype>
[error] symbol owners: value $outer -> anonymous class PatMatCrash$$anonfun$1 -> package crash
[error] context owners: anonymous class PatMatCrash$$anonfun$1 -> package crash
[error]
[error] == Enclosing template or block ==
[error]
[error] Template( // val <local $anonfun>: <notype>, tree.tpe=crash.PatMatCrash$$anonfun$1
[error] "scala.runtime.AbstractPartialFunction", "scala.Serializable" // parents
[error] ValDef(
[error] private
[error] "_"
[error] <tpt>
[error] <empty>
[error] )
[error] // 3 statements
[error] DefDef( // final override def applyOrElse(x$1: ?,default: Function1): Object
[error] <method> final override
[error] "applyOrElse"
[error] []
[error] // 1 parameter list
[error] ValDef( // x$1: ?
[error] <param> <synthetic> <triedcooking>
[error] "x$1"
[error] <tpt> // tree.tpe=?
[error] <empty>
[error] )
[error] ValDef( // default: Function1
[error] <param> <synthetic> <triedcooking>
[error] "default"
[error] <tpt> // tree.tpe=Function1
[error] <empty>
[error] )
[error] <tpt> // tree.tpe=Object
[error] Block( // tree.tpe=Object
[error] // 3 statements
[error] ValDef( // case val x1: ?
[error] case <synthetic> <triedcooking>
[error] "x1"
[error] <tpt> // tree.tpe=?
[error] Typed( // tree.tpe=?
[error] "x$1" // x$1: ?, tree.tpe=?
[error] <tpt> // tree.tpe=?
[error] )
[error] )
[error] LabelDef( // case def case5(): Object, tree.tpe=Object
[error] ()
[error] If( // tree.tpe=Object
[error] Apply( // final def ==(x$1: Object): Boolean in class Object, tree.tpe=Boolean
[error] "foo"."$eq$eq" // final def ==(x$1: Object): Boolean in class Object, tree.tpe=(x$1: Object)Boolean
[error] "x1" // case val x1: ?, tree.tpe=?
[error] )
[error] Block( // tree.tpe=Object
[error] ValDef( // val x2: ?
[error] 0
[error] "x2"
[error] <tpt> // tree.tpe=?
[error] "x1" // case val x1: ?, tree.tpe=?
[error] )
[error] Apply( // case def matchEnd4(x: Object): Object, tree.tpe=Object
[error] "matchEnd4" // case def matchEnd4(x: Object): Object, tree.tpe=(x: Object)Object
[error] "scala"."runtime"."BoxedUnit"."UNIT" // final val UNIT: runtime.BoxedUnit in object BoxedUnit, tree.tpe=runtime.BoxedUnit
[error] )
[error] )
[error] Apply( // case def case6(): Object, tree.tpe=Object
[error] "case6" // case def case6(): Object, tree.tpe=()Object
[error] Nil
[error] )
[error] )
[error] )
[error] LabelDef( // case def case6(): Object, tree.tpe=Object
[error] ()
[error] Apply( // case def matchEnd4(x: Object): Object, tree.tpe=Object
[error] "matchEnd4" // case def matchEnd4(x: Object): Object, tree.tpe=(x: Object)Object
[error] Apply( // def apply(v1: Object): Object in trait Function1, tree.tpe=Object
[error] "default"."apply" // def apply(v1: Object): Object in trait Function1, tree.tpe=(v1: Object)Object
[error] "x$1" // x$1: ?, tree.tpe=?
[error] )
[error] )
[error] )
[error] LabelDef( // case def matchEnd4(x: Object): Object, tree.tpe=Object
[error] "x" // x: Object, tree.tpe=Object
[error] "x" // x: Object, tree.tpe=Object
[error] )
[error] )
[error] )
[error] DefDef( // final def isDefinedAt(x$1: ?): Boolean
[error] <method> final
[error] "isDefinedAt"
[error] []
[error] // 1 parameter list
[error] ValDef( // x$1: ?
[error] <param> <synthetic> <triedcooking>
[error] "x$1"
[error] <tpt> // tree.tpe=?
[error] <empty>
[error] )
[error] <tpt> // tree.tpe=Boolean
[error] Block( // tree.tpe=Boolean
[error] // 3 statements
[error] ValDef( // case val x1: ?
[error] case <synthetic> <triedcooking>
[error] "x1"
[error] <tpt> // tree.tpe=?
[error] Typed( // tree.tpe=?
[error] "x$1" // x$1: ?, tree.tpe=?
[error] <tpt> // tree.tpe=?
[error] )
[error] )
[error] LabelDef( // case def case5(): Boolean, tree.tpe=Boolean
[error] ()
[error] If( // tree.tpe=Boolean
[error] Apply( // final def ==(x$1: Object): Boolean in class Object, tree.tpe=Boolean
[error] "foo"."$eq$eq" // final def ==(x$1: Object): Boolean in class Object, tree.tpe=(x$1: Object)Boolean
[error] "x1" // case val x1: ?, tree.tpe=?
[error] )
[error] Block( // tree.tpe=Boolean
[error] ValDef( // val x2: ?
[error] 0
[error] "x2"
[error] <tpt> // tree.tpe=?
[error] "x1" // case val x1: ?, tree.tpe=?
[error] )
[error] Apply( // case def matchEnd4(x: Boolean): Boolean, tree.tpe=Boolean
[error] "matchEnd4" // case def matchEnd4(x: Boolean): Boolean, tree.tpe=(x: Boolean)Boolean
[error] true
[error] )
[error] )
[error] Apply( // case def case6(): Boolean, tree.tpe=Boolean
[error] "case6" // case def case6(): Boolean, tree.tpe=()Boolean
[error] Nil
[error] )
[error] )
[error] )
[error] LabelDef( // case def case6(): Boolean, tree.tpe=Boolean
[error] ()
[error] Apply( // case def matchEnd4(x: Boolean): Boolean, tree.tpe=Boolean
[error] "matchEnd4" // case def matchEnd4(x: Boolean): Boolean, tree.tpe=(x: Boolean)Boolean
[error] false
[error] )
[error] )
[error] LabelDef( // case def matchEnd4(x: Boolean): Boolean, tree.tpe=Boolean
[error] "x" // x: Boolean, tree.tpe=Boolean
[error] "x" // x: Boolean, tree.tpe=Boolean
[error] )
[error] )
[error] )
[error] DefDef( // def <init>(arg$outer: crash.PatMatCrash): crash.PatMatCrash$$anonfun$1
[error] <method> <triedcooking>
[error] "<init>"
[error] []
[error] // 1 parameter list
[error] ValDef( // $outer: crash.PatMatCrash
[error] <param>
[error] "$outer"
[error] <tpt> // tree.tpe=crash.PatMatCrash
[error] <empty>
[error] )
[error] <tpt> // tree.tpe=crash.PatMatCrash$$anonfun$1
[error] Block( // tree.tpe=Unit
[error] Apply( // def <init>(): runtime.AbstractPartialFunction in class AbstractPartialFunction, tree.tpe=runtime.AbstractPartialFunction
[error] PatMatCrash$$anonfun$1.super."<init>" // def <init>(): runtime.AbstractPartialFunction in class AbstractPartialFunction, tree.tpe=()runtime.AbstractPartialFunction
[error] Nil
[error] )
[error] ()
[error] )
[error] )
[error] )
[error]
[error] == Expanded type of tree ==
[error]
[error] <notype>
[error]
[error] uncaught exception during compilation: scala.reflect.internal.FatalError
scala.reflect.internal.FatalError:
while compiling: C:\Users\sege\projects\scratch\src\main\scala\PatMat.scala
during phase: icode
library version: version 2.10.0-M7
compiler version: version 2.10.0-M7
reconstructed args: -bootclasspath C:\Program Files\Java\jdk1.6.0_27\jre\lib\resources.jar;C:\Program Files\Java\jdk1.6.0_27\jre\lib\rt.jar;C:\Program Files\Java\jdk1.6.0_27\jre\lib\sunrsasign.jar;C:\Program Files\Java\jdk1.6.0_27\jre\lib\jsse.jar;C:\Program Files\Java\jdk1.6.0_27\jre\lib\jce.jar;C:\Program Files\Java\jdk1.6.0_27\jre\lib\charsets.jar;C:\Program Files\Java\jdk1.6.0_27\jre\lib\modules\jdk.boot.jar;C:\Program Files\Java\jdk1.6.0_27\jre\classes;C:\Users\sege\.sbt\0.12.0\boot\scala-2.10.0-M7\lib\scala-library.jar -d C:\Users\sege\projects\scratch\target\scala-2.10\classes -classpath C:\Users\sege\projects\scratch\target\scala-2.10\classes
last tree to typer: term $outer
symbol: value $outer (flags: <synthetic> <paramaccessor> <triedcooking> private[this])
symbol definition: private[this] val $outer: crash.PatMatCrash
tpe: <notype>
symbol owners: value $outer -> anonymous class PatMatCrash$$anonfun$1 -> package crash
context owners: anonymous class PatMatCrash$$anonfun$1 -> package crash
== Enclosing template or block ==
Template( // val <local $anonfun>: <notype>, tree.tpe=crash.PatMatCrash$$anonfun$1
"scala.runtime.AbstractPartialFunction", "scala.Serializable" // parents
ValDef(
private
"_"
<tpt>
<empty>
)
// 3 statements
DefDef( // final override def applyOrElse(x$1: ?,default: Function1): Object
<method> final override
"applyOrElse"
[]
// 1 parameter list
ValDef( // x$1: ?
<param> <synthetic> <triedcooking>
"x$1"
<tpt> // tree.tpe=?
<empty>
)
ValDef( // default: Function1
<param> <synthetic> <triedcooking>
"default"
<tpt> // tree.tpe=Function1
<empty>
)
<tpt> // tree.tpe=Object
Block( // tree.tpe=Object
// 3 statements
ValDef( // case val x1: ?
case <synthetic> <triedcooking>
"x1"
<tpt> // tree.tpe=?
Typed( // tree.tpe=?
"x$1" // x$1: ?, tree.tpe=?
<tpt> // tree.tpe=?
)
)
LabelDef( // case def case5(): Object, tree.tpe=Object
()
If( // tree.tpe=Object
Apply( // final def ==(x$1: Object): Boolean in class Object, tree.tpe=Boolean
"foo"."$eq$eq" // final def ==(x$1: Object): Boolean in class Object, tree.tpe=(x$1: Object)Boolean
"x1" // case val x1: ?, tree.tpe=?
)
Block( // tree.tpe=Object
ValDef( // val x2: ?
0
"x2"
<tpt> // tree.tpe=?
"x1" // case val x1: ?, tree.tpe=?
)
Apply( // case def matchEnd4(x: Object): Object, tree.tpe=Object
"matchEnd4" // case def matchEnd4(x: Object): Object, tree.tpe=(x: Object)Object
"scala"."runtime"."BoxedUnit"."UNIT" // final val UNIT: runtime.BoxedUnit in object BoxedUnit, tree.tpe=runtime.BoxedUnit
)
)
Apply( // case def case6(): Object, tree.tpe=Object
"case6" // case def case6(): Object, tree.tpe=()Object
Nil
)
)
)
LabelDef( // case def case6(): Object, tree.tpe=Object
()
Apply( // case def matchEnd4(x: Object): Object, tree.tpe=Object
"matchEnd4" // case def matchEnd4(x: Object): Object, tree.tpe=(x: Object)Object
Apply( // def apply(v1: Object): Object in trait Function1, tree.tpe=Object
"default"."apply" // def apply(v1: Object): Object in trait Function1, tree.tpe=(v1: Object)Object
"x$1" // x$1: ?, tree.tpe=?
)
)
)
LabelDef( // case def matchEnd4(x: Object): Object, tree.tpe=Object
"x" // x: Object, tree.tpe=Object
"x" // x: Object, tree.tpe=Object
)
)
)
DefDef( // final def isDefinedAt(x$1: ?): Boolean
<method> final
"isDefinedAt"
[]
// 1 parameter list
ValDef( // x$1: ?
<param> <synthetic> <triedcooking>
"x$1"
<tpt> // tree.tpe=?
<empty>
)
<tpt> // tree.tpe=Boolean
Block( // tree.tpe=Boolean
// 3 statements
ValDef( // case val x1: ?
case <synthetic> <triedcooking>
"x1"
<tpt> // tree.tpe=?
Typed( // tree.tpe=?
"x$1" // x$1: ?, tree.tpe=?
<tpt> // tree.tpe=?
)
)
LabelDef( // case def case5(): Boolean, tree.tpe=Boolean
()
If( // tree.tpe=Boolean
Apply( // final def ==(x$1: Object): Boolean in class Object, tree.tpe=Boolean
"foo"."$eq$eq" // final def ==(x$1: Object): Boolean in class Object, tree.tpe=(x$1: Object)Boolean
"x1" // case val x1: ?, tree.tpe=?
)
Block( // tree.tpe=Boolean
ValDef( // val x2: ?
0
"x2"
<tpt> // tree.tpe=?
"x1" // case val x1: ?, tree.tpe=?
)
Apply( // case def matchEnd4(x: Boolean): Boolean, tree.tpe=Boolean
"matchEnd4" // case def matchEnd4(x: Boolean): Boolean, tree.tpe=(x: Boolean)Boolean
true
)
)
Apply( // case def case6(): Boolean, tree.tpe=Boolean
"case6" // case def case6(): Boolean, tree.tpe=()Boolean
Nil
)
)
)
LabelDef( // case def case6(): Boolean, tree.tpe=Boolean
()
Apply( // case def matchEnd4(x: Boolean): Boolean, tree.tpe=Boolean
"matchEnd4" // case def matchEnd4(x: Boolean): Boolean, tree.tpe=(x: Boolean)Boolean
false
)
)
LabelDef( // case def matchEnd4(x: Boolean): Boolean, tree.tpe=Boolean
"x" // x: Boolean, tree.tpe=Boolean
"x" // x: Boolean, tree.tpe=Boolean
)
)
)
DefDef( // def <init>(arg$outer: crash.PatMatCrash): crash.PatMatCrash$$anonfun$1
<method> <triedcooking>
"<init>"
[]
// 1 parameter list
ValDef( // $outer: crash.PatMatCrash
<param>
"$outer"
<tpt> // tree.tpe=crash.PatMatCrash
<empty>
)
<tpt> // tree.tpe=crash.PatMatCrash$$anonfun$1
Block( // tree.tpe=Unit
Apply( // def <init>(): runtime.AbstractPartialFunction in class AbstractPartialFunction, tree.tpe=runtime.AbstractPartialFunction
PatMatCrash$$anonfun$1.super."<init>" // def <init>(): runtime.AbstractPartialFunction in class AbstractPartialFunction, tree.tpe=()runtime.AbstractPartialFunction
Nil
)
()
)
)
)
== Expanded type of tree ==
<notype>
Unknown type: ?, ? [class scala.reflect.internal.Types$WildcardType$, class scala.reflect.internal.Types$WildcardType$] TypeRef? false
at scala.reflect.internal.SymbolTable.abort(SymbolTable.scala:48)
at scala.tools.nsc.Global.abort(Global.scala:246)
at scala.tools.nsc.backend.icode.TypeKinds$class.toTypeKind(TypeKinds.scala:397)
at scala.tools.nsc.backend.icode.ICodes.toTypeKind(ICodes.scala:20)
at scala.tools.nsc.backend.icode.GenICode$ICodePhase$$anonfun$addMethodParams$1.apply(GenICode.scala:1749)
at scala.tools.nsc.backend.icode.GenICode$ICodePhase$$anonfun$addMethodParams$1.apply(GenICode.scala:1748)
at scala.collection.immutable.List.foreach(List.scala:309)
at scala.tools.nsc.backend.icode.GenICode$ICodePhase.addMethodParams(GenICode.scala:1748)
at scala.tools.nsc.backend.icode.GenICode$ICodePhase.gen(GenICode.scala:120)
at scala.tools.nsc.backend.icode.GenICode$ICodePhase$$anonfun$gen$1.apply(GenICode.scala:72)
at scala.tools.nsc.backend.icode.GenICode$ICodePhase$$anonfun$gen$1.apply(GenICode.scala:72)
at scala.collection.immutable.List.foreach(List.scala:309)
at scala.tools.nsc.backend.icode.GenICode$ICodePhase.gen(GenICode.scala:72)
at scala.tools.nsc.backend.icode.GenICode$ICodePhase.gen(GenICode.scala:165)
at scala.tools.nsc.backend.icode.GenICode$ICodePhase.gen(GenICode.scala:99)
at scala.tools.nsc.backend.icode.GenICode$ICodePhase$$anonfun$gen$1.apply(GenICode.scala:72)
at scala.tools.nsc.backend.icode.GenICode$ICodePhase$$anonfun$gen$1.apply(GenICode.scala:72)
at scala.collection.immutable.List.foreach(List.scala:309)
at scala.tools.nsc.backend.icode.GenICode$ICodePhase.gen(GenICode.scala:72)
at scala.tools.nsc.backend.icode.GenICode$ICodePhase.gen(GenICode.scala:90)
at scala.tools.nsc.backend.icode.GenICode$ICodePhase.gen(GenICode.scala:68)
at scala.tools.nsc.backend.icode.GenICode$ICodePhase.apply(GenICode.scala:64)
at scala.tools.nsc.Global$GlobalPhase.applyPhase(Global.scala:455)
at scala.tools.nsc.Global$GlobalPhase$$anonfun$run$1.apply(Global.scala:422)
at scala.tools.nsc.Global$GlobalPhase$$anonfun$run$1.apply(Global.scala:422)
at scala.collection.Iterator$class.foreach(Iterator.scala:726)
at scala.collection.AbstractIterator.foreach(Iterator.scala:1155)
at scala.tools.nsc.Global$GlobalPhase.run(Global.scala:422)
at scala.tools.nsc.backend.icode.GenICode$ICodePhase.run(GenICode.scala:57)
at scala.tools.nsc.Global$Run.compileUnitsInternal(Global.scala:1566)
at scala.tools.nsc.Global$Run.compileUnits(Global.scala:1540)
at scala.tools.nsc.Global$Run.compileSources(Global.scala:1536)
at scala.tools.nsc.Global$Run.compile(Global.scala:1646)
at xsbt.CachedCompiler0.run(CompilerInterface.scala:90)
at xsbt.CachedCompiler0.run(CompilerInterface.scala:72)
at xsbt.CompilerInterface.run(CompilerInterface.scala:26)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:597)
at sbt.compiler.AnalyzingCompiler.call(AnalyzingCompiler.scala:73)
at sbt.compiler.AnalyzingCompiler.compile(AnalyzingCompiler.scala:35)
at sbt.compiler.AnalyzingCompiler.compile(AnalyzingCompiler.scala:29)
at sbt.compiler.AggressiveCompile$$anonfun$4$$anonfun$compileScala$1$1.apply$mcV$sp(AggressiveCompile.scala:71)
at sbt.compiler.AggressiveCompile$$anonfun$4$$anonfun$compileScala$1$1.apply(AggressiveCompile.scala:71)
at sbt.compiler.AggressiveCompile$$anonfun$4$$anonfun$compileScala$1$1.apply(AggressiveCompile.scala:71)
at sbt.compiler.AggressiveCompile.sbt$compiler$AggressiveCompile$$timed(AggressiveCompile.scala:101)
at sbt.compiler.AggressiveCompile$$anonfun$4.compileScala$1(AggressiveCompile.scala:70)
at sbt.compiler.AggressiveCompile$$anonfun$4.apply(AggressiveCompile.scala:88)
at sbt.compiler.AggressiveCompile$$anonfun$4.apply(AggressiveCompile.scala:60)
at sbt.inc.IncrementalCompile$$anonfun$doCompile$1.apply(Compile.scala:24)
at sbt.inc.IncrementalCompile$$anonfun$doCompile$1.apply(Compile.scala:22)
at sbt.inc.Incremental$.cycle(Incremental.scala:39)
at sbt.inc.Incremental$.compile(Incremental.scala:26)
at sbt.inc.IncrementalCompile$.apply(Compile.scala:20)
at sbt.compiler.AggressiveCompile.compile2(AggressiveCompile.scala:96)
at sbt.compiler.AggressiveCompile.compile1(AggressiveCompile.scala:44)
at sbt.compiler.AggressiveCompile.apply(AggressiveCompile.scala:31)
at sbt.Compiler$.apply(Compiler.scala:79)
at sbt.Defaults$$anonfun$compileTask$1.apply(Defaults.scala:571)
at sbt.Defaults$$anonfun$compileTask$1.apply(Defaults.scala:571)
at sbt.Scoped$$anonfun$hf2$1.apply(Structure.scala:578)
at sbt.Scoped$$anonfun$hf2$1.apply(Structure.scala:578)
at scala.Function1$$anonfun$compose$1.apply(Function1.scala:49)
at sbt.Scoped$Reduced$$anonfun$combine$1$$anonfun$apply$12.apply(Structure.scala:311)
at sbt.Scoped$Reduced$$anonfun$combine$1$$anonfun$apply$12.apply(Structure.scala:311)
at sbt.$tilde$greater$$anonfun$$u2219$1.apply(TypeFunctions.scala:40)
at sbt.std.Transform$$anon$5.work(System.scala:71)
at sbt.Execute$$anonfun$submit$1$$anonfun$apply$1.apply(Execute.scala:232)
at sbt.Execute$$anonfun$submit$1$$anonfun$apply$1.apply(Execute.scala:232)
at sbt.ErrorHandling$.wideConvert(ErrorHandling.scala:18)
at sbt.Execute.work(Execute.scala:238)
at sbt.Execute$$anonfun$submit$1.apply(Execute.scala:232)
at sbt.Execute$$anonfun$submit$1.apply(Execute.scala:232)
at sbt.ConcurrentRestrictions$$anon$4$$anonfun$1.apply(ConcurrentRestrictions.scala:159)
at sbt.CompletionService$$anon$2.call(CompletionService.scala:30)
at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:303)
at java.util.concurrent.FutureTask.run(FutureTask.java:138)
at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:441)
at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:303)
at java.util.concurrent.FutureTask.run(FutureTask.java:138)
at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
at java.lang.Thread.run(Thread.java:662)
[error] (compile:compile) scala.reflect.internal.FatalError:
[error] while compiling: C:\Users\sege\projects\scratch\src\main\scala\PatMat.scala
[error] during phase: icode
[error] library version: version 2.10.0-M7
[error] compiler version: version 2.10.0-M7
[error] reconstructed args: -bootclasspath C:\Program Files\Java\jdk1.6.0_27\jre\lib\resources.jar;C:\Program Files\Java\jdk1.6.0_27\jre\lib\rt.jar;C:\Program Files\Java\jdk1.6.0_27\jre\lib\sunrsasign.jar;C:\Program Files\Java\jdk1.6.0_27\jre\lib\jsse.jar;C:\Program Files\Java\jdk1.6.0_27\jre\lib\jce.jar;C:\Program Files\Java\jdk1.6.0_27\jre\lib\charsets.jar;C:\Program Files\Java\jdk1.6.0_27\jre\lib\modules\jdk.boot.jar;C:\Program Files\Java\jdk1.6.0_27\jre\classes;C:\Users\sege\.sbt\0.12.0\boot\scala-2.10.0-M7\lib\scala-library.jar -d C:\Users\sege\projects\scratch\target\scala-2.10\classes -classpath C:\Users\sege\projects\scratch\target\scala-2.10\classes
[error]
[error] last tree to typer: term $outer
[error] symbol: value $outer (flags: <synthetic> <paramaccessor> <triedcooking> private[this])
[error] symbol definition: private[this] val $outer: crash.PatMatCrash
[error] tpe: <notype>
[error] symbol owners: value $outer -> anonymous class PatMatCrash$$anonfun$1 -> package crash
[error] context owners: anonymous class PatMatCrash$$anonfun$1 -> package crash
[error]
[error] == Enclosing template or block ==
[error]
[error] Template( // val <local $anonfun>: <notype>, tree.tpe=crash.PatMatCrash$$anonfun$1
[error] "scala.runtime.AbstractPartialFunction", "scala.Serializable" // parents
[error] ValDef(
[error] private
[error] "_"
[error] <tpt>
[error] <empty>
[error] )
[error] // 3 statements
[error] DefDef( // final override def applyOrElse(x$1: ?,default: Function1): Object
[error] <method> final override
[error] "applyOrElse"
[error] []
[error] // 1 parameter list
[error] ValDef( // x$1: ?
[error] <param> <synthetic> <triedcooking>
[error] "x$1"
[error] <tpt> // tree.tpe=?
[error] <empty>
[error] )
[error] ValDef( // default: Function1
[error] <param> <synthetic> <triedcooking>
[error] "default"
[error] <tpt> // tree.tpe=Function1
[error] <empty>
[error] )
[error] <tpt> // tree.tpe=Object
[error] Block( // tree.tpe=Object
[error] // 3 statements
[error] ValDef( // case val x1: ?
[error] case <synthetic> <triedcooking>
[error] "x1"
[error] <tpt> // tree.tpe=?
[error] Typed( // tree.tpe=?
[error] "x$1" // x$1: ?, tree.tpe=?
[error] <tpt> // tree.tpe=?
[error] )
[error] )
[error] LabelDef( // case def case5(): Object, tree.tpe=Object
[error] ()
[error] If( // tree.tpe=Object
[error] Apply( // final def ==(x$1: Object): Boolean in class Object, tree.tpe=Boolean
[error] "foo"."$eq$eq" // final def ==(x$1: Object): Boolean in class Object, tree.tpe=(x$1: Object)Boolean
[error] "x1" // case val x1: ?, tree.tpe=?
[error] )
[error] Block( // tree.tpe=Object
[error] ValDef( // val x2: ?
[error] 0
[error] "x2"
[error] <tpt> // tree.tpe=?
[error] "x1" // case val x1: ?, tree.tpe=?
[error] )
[error] Apply( // case def matchEnd4(x: Object): Object, tree.tpe=Object
[error] "matchEnd4" // case def matchEnd4(x: Object): Object, tree.tpe=(x: Object)Object
[error] "scala"."runtime"."BoxedUnit"."UNIT" // final val UNIT: runtime.BoxedUnit in object BoxedUnit, tree.tpe=runtime.BoxedUnit
[error] )
[error] )
[error] Apply( // case def case6(): Object, tree.tpe=Object
[error] "case6" // case def case6(): Object, tree.tpe=()Object
[error] Nil
[error] )
[error] )
[error] )
[error] LabelDef( // case def case6(): Object, tree.tpe=Object
[error] ()
[error] Apply( // case def matchEnd4(x: Object): Object, tree.tpe=Object
[error] "matchEnd4" // case def matchEnd4(x: Object): Object, tree.tpe=(x: Object)Object
[error] Apply( // def apply(v1: Object): Object in trait Function1, tree.tpe=Object
[error] "default"."apply" // def apply(v1: Object): Object in trait Function1, tree.tpe=(v1: Object)Object
[error] "x$1" // x$1: ?, tree.tpe=?
[error] )
[error] )
[error] )
[error] LabelDef( // case def matchEnd4(x: Object): Object, tree.tpe=Object
[error] "x" // x: Object, tree.tpe=Object
[error] "x" // x: Object, tree.tpe=Object
[error] )
[error] )
[error] )
[error] DefDef( // final def isDefinedAt(x$1: ?): Boolean
[error] <method> final
[error] "isDefinedAt"
[error] []
[error] // 1 parameter list
[error] ValDef( // x$1: ?
[error] <param> <synthetic> <triedcooking>
[error] "x$1"
[error] <tpt> // tree.tpe=?
[error] <empty>
[error] )
[error] <tpt> // tree.tpe=Boolean
[error] Block( // tree.tpe=Boolean
[error] // 3 statements
[error] ValDef( // case val x1: ?
[error] case <synthetic> <triedcooking>
[error] "x1"
[error] <tpt> // tree.tpe=?
[error] Typed( // tree.tpe=?
[error] "x$1" // x$1: ?, tree.tpe=?
[error] <tpt> // tree.tpe=?
[error] )
[error] )
[error] LabelDef( // case def case5(): Boolean, tree.tpe=Boolean
[error] ()
[error] If( // tree.tpe=Boolean
[error] Apply( // final def ==(x$1: Object): Boolean in class Object, tree.tpe=Boolean
[error] "foo"."$eq$eq" // final def ==(x$1: Object): Boolean in class Object, tree.tpe=(x$1: Object)Boolean
[error] "x1" // case val x1: ?, tree.tpe=?
[error] )
[error] Block( // tree.tpe=Boolean
[error] ValDef( // val x2: ?
[error] 0
[error] "x2"
[error] <tpt> // tree.tpe=?
[error] "x1" // case val x1: ?, tree.tpe=?
[error] )
[error] Apply( // case def matchEnd4(x: Boolean): Boolean, tree.tpe=Boolean
[error] "matchEnd4" // case def matchEnd4(x: Boolean): Boolean, tree.tpe=(x: Boolean)Boolean
[error] true
[error] )
[error] )
[error] Apply( // case def case6(): Boolean, tree.tpe=Boolean
[error] "case6" // case def case6(): Boolean, tree.tpe=()Boolean
[error] Nil
[error] )
[error] )
[error] )
[error] LabelDef( // case def case6(): Boolean, tree.tpe=Boolean
[error] ()
[error] Apply( // case def matchEnd4(x: Boolean): Boolean, tree.tpe=Boolean
[error] "matchEnd4" // case def matchEnd4(x: Boolean): Boolean, tree.tpe=(x: Boolean)Boolean
[error] false
[error] )
[error] )
[error] LabelDef( // case def matchEnd4(x: Boolean): Boolean, tree.tpe=Boolean
[error] "x" // x: Boolean, tree.tpe=Boolean
[error] "x" // x: Boolean, tree.tpe=Boolean
[error] )
[error] )
[error] )
[error] DefDef( // def <init>(arg$outer: crash.PatMatCrash): crash.PatMatCrash$$anonfun$1
[error] <method> <triedcooking>
[error] "<init>"
[error] []
[error] // 1 parameter list
[error] ValDef( // $outer: crash.PatMatCrash
[error] <param>
[error] "$outer"
[error] <tpt> // tree.tpe=crash.PatMatCrash
[error] <empty>
[error] )
[error] <tpt> // tree.tpe=crash.PatMatCrash$$anonfun$1
[error] Block( // tree.tpe=Unit
[error] Apply( // def <init>(): runtime.AbstractPartialFunction in class AbstractPartialFunction, tree.tpe=runtime.AbstractPartialFunction
[error] PatMatCrash$$anonfun$1.super."<init>" // def <init>(): runtime.AbstractPartialFunction in class AbstractPartialFunction, tree.tpe=()runtime.AbstractPartialFunction
[error] Nil
[error] )
[error] ()
[error] )
[error] )
[error] )
[error]
[error] == Expanded type of tree ==
[error]
[error] <notype>
[error]
[error] Unknown type: ?, ? [class scala.reflect.internal.Types$WildcardType$, class scala.reflect.internal.Types$WildcardType$] TypeRef? false
class PatMatCrash {
def foo[T](pattern: PartialFunction[T, Unit]) = ???
// CRASHES
foo {
case "foo" => ()
}
// does NOT crash
foo[String] {
case "foo" => ()
}
}
@retronym
Copy link

class X {
  trait Matcher[-T]

  def bar[T](m: Matcher[T]) = null      
  def bar[T](i: Int) = null

  def foo[T](p: PartialFunction[T, Any]): Matcher[T] = null

  case class M[X](a: X)

  bar[M[Any]] (foo {
    case M(_) => null
  })
}
~ scalac29 /Users/jason/code/scratch/partial-crasher.scala
/Users/jason/code/scratch/partial-crasher.scala:11: error: missing parameter type for expanded function
The argument types of an anonymous function must be fully known. (SLS 8.5)
Expected type was: PartialFunction[?,Any]
  bar[M[Any]] (foo {
                   ^
one error found
~ scalac210 /Users/jason/code/scratch/partial-crasher.scala
/Users/jason/code/scratch/partial-crasher.scala:11: error: error during expansion of this match (this is a scalac bug).
The underlying error was: value _1 is not a member of type parameter A1
  bar[M[Any]] (foo {
                   ^

It's a new mode of failure for https://issues.scala-lang.org/browse/SI-6258

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment