exception when typing new ("a")/class scala.reflect.internal.Trees$Apply class type required but ErasedValueType(class Opt, Object) found in file /Users/user/scalac-bug/Opt.scala [error] [error] unrecoverable error [error] while compiling: /Users/user/scalac-bug/Opt.scala [error] during phase: globalPhase=erasure, enteringPhase=posterasure [error] library version: version 2.12.0-M3 [error] compiler version: version 2.12.0-M3 [error] reconstructed args: -bootclasspath /Library/Java/JavaVirtualMachines/jdk1.8.0_66.jdk/Contents/Home/jre/lib/resources.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_66.jdk/Contents/Home/jre/lib/rt.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_66.jdk/Contents/Home/jre/lib/sunrsasign.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_66.jdk/Contents/Home/jre/lib/jsse.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_66.jdk/Contents/Home/jre/lib/jce.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_66.jdk/Contents/Home/jre/lib/charsets.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_66.jdk/Contents/Home/jre/lib/jfr.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_66.jdk/Contents/Home/jre/classes:/Users/user/.ivy2/cache/org.scala-lang/scala-library/jars/scala-library-2.12.0-M3.jar -classpath /Users/user/scalac-bug/target/scala-2.12.0-M3/classes [error] [error] last tree to typer: TypeTree(class Object) [error] tree position: [error] tree tpe: Object [error] symbol: class Object in package lang [error] symbol definition: class Object extends (a ClassSymbol) [error] symbol package: java.lang [error] symbol owners: class Object [error] call site: object Main in package example in package example [error] [error] exception when typing private[this] val x: ErasedValueType(class Opt, String) = new ("a") exception when typing object Main extends Object { def (): com.example.Main.type = { Main.super.(); () }; private[this] val x: ErasedValueType(class Opt, String) = new ("a"); def x(): ErasedValueType(class Opt, String) = Main.this.x } exception when typing package com.example { final case class Opt extends Object with Product with Serializable { private[this] val get: Object = _; def get(): Object = Opt.this.get; private[example] def (get: Object): com.example.Opt = { Opt.super.(); Opt.this./*Product$class*/$init$(); () }; def copy(get: Object): ErasedValueType(class Opt, Object) = com.example.Opt.copy$extension(Opt.this, get); def copy$default$1(): Object = com.example.Opt.copy$default$1$extension(Opt.this); override def productPrefix(): String = com.example.Opt.productPrefix$extension(Opt.this); def productArity(): Int = com.example.Opt.productArity$extension(Opt.this); def productElement(x$1: Int): Object = com.example.Opt.productElement$extension(Opt.this, x$1); override def productIterator(): Iterator = com.example.Opt.productIterator$extension(Opt.this); def canEqual(x$1: Object): Boolean = com.example.Opt.canEqual$extension(Opt.this, x$1); override def hashCode(): Int = com.example.Opt.hashCode$extension(Opt.this); override def equals(x$1: Object): Boolean = com.example.Opt.equals$extension(Opt.this, x$1); override def toString(): String = com.example.Opt.toString$extension(Opt.this) }; object Opt extends Object with Serializable { def (): com.example.Opt.type = { Opt.super.(); () }; final override def toString(): String = "Opt"; case def apply(get: Object): ErasedValueType(class Opt, Object) = InjectDerivedValue(get); case def unapply(x$0: ErasedValueType(class Opt, Object)): Option = if (x$0.==(null)) scala.None else new Some(x$0.get()); private def readResolve(): Object = com.example.Opt; final def copy$extension($this: ErasedValueType(class Opt, Object), get: Object): ErasedValueType(class Opt, Object) = InjectDerivedValue(get); final def copy$default$1$extension($this: ErasedValueType(class Opt, Object)): Object = $this.get(); final def productPrefix$extension($this: ErasedValueType(class Opt, Object)): String = "Opt"; final def productArity$extension($this: ErasedValueType(class Opt, Object)): Int = 1; final def productElement$extension($this: ErasedValueType(class Opt, Object), x$1: Int): Object = { case val x1: Int = x$1; (x1: Int) match { case 0 => $this.get() case _ => throw new IndexOutOfBoundsException(x$1.toString()) } }; final def productIterator$extension($this: ErasedValueType(class Opt, Object)): Iterator = scala.runtime.ScalaRunTime.typedProductIterator($this); final def canEqual$extension($this: ErasedValueType(class Opt, Object), x$1: Object): Boolean = x$1.$isInstanceOf[ErasedValueType(class Opt, Object)](); final def hashCode$extension($this: ErasedValueType(class Opt, Object)): Int = $this.get().hashCode(); final def equals$extension($this: ErasedValueType(class Opt, Object), x$1: Object): Boolean = { case val x1: Object = x$1; case5(){ if (x1.isInstanceOf[com.example.Opt]()) matchEnd4(true) else case6() }; case6(){ matchEnd4(false) }; matchEnd4(x: Boolean){ x } }.&&({ val Opt$1: ErasedValueType(class Opt, Object) = x$1.asInstanceOf[ErasedValueType(class Opt, Object)](); $this.get().==(Opt$1.get()) }); final def toString$extension($this: ErasedValueType(class Opt, Object)): String = scala.runtime.ScalaRunTime._toString($this) }; object Main extends Object { def (): com.example.Main.type = { Main.super.(); () }; private[this] val x: ErasedValueType(class Opt, String) = new ("a"); def x(): ErasedValueType(class Opt, String) = Main.this.x } } scala.reflect.internal.FatalError: unrecoverable error while compiling: /Users/user/scalac-bug/Opt.scala during phase: globalPhase=erasure, enteringPhase=posterasure library version: version 2.12.0-M3 compiler version: version 2.12.0-M3 reconstructed args: -bootclasspath /Library/Java/JavaVirtualMachines/jdk1.8.0_66.jdk/Contents/Home/jre/lib/resources.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_66.jdk/Contents/Home/jre/lib/rt.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_66.jdk/Contents/Home/jre/lib/sunrsasign.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_66.jdk/Contents/Home/jre/lib/jsse.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_66.jdk/Contents/Home/jre/lib/jce.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_66.jdk/Contents/Home/jre/lib/charsets.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_66.jdk/Contents/Home/jre/lib/jfr.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_66.jdk/Contents/Home/jre/classes:/Users/user/.ivy2/cache/org.scala-lang/scala-library/jars/scala-library-2.12.0-M3.jar -classpath /Users/user/scalac-bug/target/scala-2.12.0-M3/classes last tree to typer: TypeTree(class Object) tree position: tree tpe: Object symbol: class Object in package lang symbol definition: class Object extends (a ClassSymbol) symbol package: java.lang symbol owners: class Object call site: object Main in package example in package example at scala.reflect.internal.Reporting$class.abort(Reporting.scala:59) at scala.reflect.internal.SymbolTable.abort(SymbolTable.scala:16) at scala.tools.nsc.transform.Erasure$Eraser.typed1(Erasure.scala:705) at scala.tools.nsc.typechecker.Typers$Typer.runTyper$1(Typers.scala:5385) at scala.tools.nsc.typechecker.Typers$Typer.typedInternal(Typers.scala:5412) at scala.tools.nsc.typechecker.Typers$Typer.body$2(Typers.scala:5359) at scala.tools.nsc.typechecker.Typers$Typer.typed(Typers.scala:5363) at scala.tools.nsc.typechecker.Typers$Typer.transformedOrTyped(Typers.scala:5594) at scala.tools.nsc.typechecker.Typers$Typer.typedValDefImpl(Typers.scala:1984) at scala.tools.nsc.typechecker.Typers$Typer.typedValDef(Typers.scala:1947) at scala.tools.nsc.typechecker.Typers$Typer.typedMemberDef$1(Typers.scala:5296) at scala.tools.nsc.typechecker.Typers$Typer.typed1(Typers.scala:5348) at scala.tools.nsc.transform.Erasure$Eraser.typed1(Erasure.scala:698) at scala.tools.nsc.typechecker.Typers$Typer.runTyper$1(Typers.scala:5385) at scala.tools.nsc.typechecker.Typers$Typer.typedInternal(Typers.scala:5412) at scala.tools.nsc.typechecker.Typers$Typer.body$2(Typers.scala:5359) at scala.tools.nsc.typechecker.Typers$Typer.typed(Typers.scala:5363) at scala.tools.nsc.typechecker.Typers$Typer.typedByValueExpr(Typers.scala:5441) at scala.tools.nsc.typechecker.Typers$Typer.typedStat$1(Typers.scala:3036) at scala.tools.nsc.typechecker.Typers$Typer.scala$tools$nsc$typechecker$Typers$Typer$$$anonfun$219(Typers.scala:3140) at scala.tools.nsc.typechecker.Typers$Typer.typedStats(Typers.scala:3140) at scala.tools.nsc.typechecker.Typers$Typer.typedTemplate(Typers.scala:1910) at scala.tools.nsc.typechecker.Typers$Typer.typedClassDef(Typers.scala:1751) at scala.tools.nsc.typechecker.Typers$Typer.typedMemberDef$1(Typers.scala:5298) at scala.tools.nsc.typechecker.Typers$Typer.typed1(Typers.scala:5348) at scala.tools.nsc.transform.Erasure$Eraser.typed1(Erasure.scala:698) at scala.tools.nsc.typechecker.Typers$Typer.runTyper$1(Typers.scala:5385) at scala.tools.nsc.typechecker.Typers$Typer.typedInternal(Typers.scala:5412) at scala.tools.nsc.typechecker.Typers$Typer.body$2(Typers.scala:5359) at scala.tools.nsc.typechecker.Typers$Typer.typed(Typers.scala:5363) at scala.tools.nsc.typechecker.Typers$Typer.typedByValueExpr(Typers.scala:5441) at scala.tools.nsc.typechecker.Typers$Typer.typedStat$1(Typers.scala:3036) at scala.tools.nsc.typechecker.Typers$Typer.scala$tools$nsc$typechecker$Typers$Typer$$$anonfun$219(Typers.scala:3140) at scala.tools.nsc.typechecker.Typers$Typer.typedStats(Typers.scala:3140) at scala.tools.nsc.typechecker.Typers$Typer.typedPackageDef$1(Typers.scala:5004) at scala.tools.nsc.typechecker.Typers$Typer.typedMemberDef$1(Typers.scala:5301) at scala.tools.nsc.typechecker.Typers$Typer.typed1(Typers.scala:5348) at scala.tools.nsc.transform.Erasure$Eraser.typed1(Erasure.scala:698) at scala.tools.nsc.typechecker.Typers$Typer.runTyper$1(Typers.scala:5385) at scala.tools.nsc.typechecker.Typers$Typer.typedInternal(Typers.scala:5412) at scala.tools.nsc.typechecker.Typers$Typer.body$2(Typers.scala:5359) at scala.tools.nsc.typechecker.Typers$Typer.typed(Typers.scala:5363) at scala.tools.nsc.typechecker.Typers$Typer.typed(Typers.scala:5437) at scala.tools.nsc.transform.Erasure$ErasureTransformer.scala$tools$nsc$transform$Erasure$ErasureTransformer$$$anonfun$86(Erasure.scala:1167) at scala.tools.nsc.transform.Erasure$ErasureTransformer.transform(Erasure.scala:1163) at scala.tools.nsc.transform.Erasure$ErasureTransformer.transform(Erasure.scala:745) at scala.tools.nsc.ast.Trees$Transformer.transformUnit(Trees.scala:147) at scala.tools.nsc.transform.Transform$Phase.apply(Transform.scala:30) at scala.tools.nsc.Global$GlobalPhase.scala$tools$nsc$Global$GlobalPhase$$$anonfun$11(Global.scala:440) at scala.tools.nsc.Global$GlobalPhase.applyPhase(Global.scala:431) at scala.tools.nsc.Global$GlobalPhase.scala$tools$nsc$Global$GlobalPhase$$$anonfun$10(Global.scala:398) at scala.tools.nsc.Global$GlobalPhase.scala$tools$nsc$Global$GlobalPhase$$$anonfun$10$adapted(Global.scala:398) at scala.collection.AbstractIterator.foreach(Iterator.scala:1370) at scala.tools.nsc.Global$GlobalPhase.run(Global.scala:398) at scala.tools.nsc.Global$Run.compileUnitsInternal(Global.scala:1505) at scala.tools.nsc.Global$Run.compileUnits(Global.scala:1490) at scala.tools.nsc.Global$Run.compileSources(Global.scala:1485) at scala.tools.nsc.Global$Run.compile(Global.scala:1586) at xsbt.CachedCompiler0.run(CompilerInterface.scala:116) at xsbt.CachedCompiler0.run(CompilerInterface.scala:95) at xsbt.CompilerInterface.run(CompilerInterface.scala:26) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) at java.lang.reflect.Method.invoke(Method.java:497) at sbt.compiler.AnalyzingCompiler.call(AnalyzingCompiler.scala:101) at sbt.compiler.AnalyzingCompiler.compile(AnalyzingCompiler.scala:47) at sbt.compiler.AnalyzingCompiler.compile(AnalyzingCompiler.scala:41) at sbt.compiler.MixedAnalyzingCompiler$$anonfun$compileScala$1$1.apply$mcV$sp(MixedAnalyzingCompiler.scala:51) at sbt.compiler.MixedAnalyzingCompiler$$anonfun$compileScala$1$1.apply(MixedAnalyzingCompiler.scala:51) at sbt.compiler.MixedAnalyzingCompiler$$anonfun$compileScala$1$1.apply(MixedAnalyzingCompiler.scala:51) at sbt.compiler.MixedAnalyzingCompiler.timed(MixedAnalyzingCompiler.scala:75) at sbt.compiler.MixedAnalyzingCompiler.compileScala$1(MixedAnalyzingCompiler.scala:50) at sbt.compiler.MixedAnalyzingCompiler.compile(MixedAnalyzingCompiler.scala:65) at sbt.compiler.IC$$anonfun$compileInternal$1.apply(IncrementalCompiler.scala:160) at sbt.compiler.IC$$anonfun$compileInternal$1.apply(IncrementalCompiler.scala:160) at sbt.inc.IncrementalCompile$$anonfun$doCompile$1.apply(Compile.scala:66) at sbt.inc.IncrementalCompile$$anonfun$doCompile$1.apply(Compile.scala:64) at sbt.inc.IncrementalCommon.cycle(IncrementalCommon.scala:31) at sbt.inc.Incremental$$anonfun$1.apply(Incremental.scala:62) at sbt.inc.Incremental$$anonfun$1.apply(Incremental.scala:61) at sbt.inc.Incremental$.manageClassfiles(Incremental.scala:89) at sbt.inc.Incremental$.compile(Incremental.scala:61) at sbt.inc.IncrementalCompile$.apply(Compile.scala:54) at sbt.compiler.IC$.compileInternal(IncrementalCompiler.scala:160) at sbt.compiler.IC$.incrementalCompile(IncrementalCompiler.scala:138) at sbt.Compiler$.compile(Compiler.scala:128) at sbt.Compiler$.compile(Compiler.scala:114) at sbt.Defaults$.sbt$Defaults$$compileIncrementalTaskImpl(Defaults.scala:829) at sbt.Defaults$$anonfun$compileIncrementalTask$1.apply(Defaults.scala:820) at sbt.Defaults$$anonfun$compileIncrementalTask$1.apply(Defaults.scala:818) at scala.Function1$$anonfun$compose$1.apply(Function1.scala:47) at sbt.$tilde$greater$$anonfun$$u2219$1.apply(TypeFunctions.scala:40) at sbt.std.Transform$$anon$4.work(System.scala:63) at sbt.Execute$$anonfun$submit$1$$anonfun$apply$1.apply(Execute.scala:226) at sbt.Execute$$anonfun$submit$1$$anonfun$apply$1.apply(Execute.scala:226) at sbt.ErrorHandling$.wideConvert(ErrorHandling.scala:17) at sbt.Execute.work(Execute.scala:235) at sbt.Execute$$anonfun$submit$1.apply(Execute.scala:226) at sbt.Execute$$anonfun$submit$1.apply(Execute.scala:226) at sbt.ConcurrentRestrictions$$anon$4$$anonfun$1.apply(ConcurrentRestrictions.scala:159) at sbt.CompletionService$$anon$2.call(CompletionService.scala:28) at java.util.concurrent.FutureTask.run(FutureTask.java:266) at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511) at java.util.concurrent.FutureTask.run(FutureTask.java:266) at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142) at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617) at java.lang.Thread.run(Thread.java:745) [error] (compile:compileIncremental) scala.reflect.internal.FatalError: [error] unrecoverable error [error] while compiling: /Users/user/scalac-bug/Opt.scala [error] during phase: globalPhase=erasure, enteringPhase=posterasure [error] library version: version 2.12.0-M3 [error] compiler version: version 2.12.0-M3 [error] reconstructed args: -bootclasspath /Library/Java/JavaVirtualMachines/jdk1.8.0_66.jdk/Contents/Home/jre/lib/resources.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_66.jdk/Contents/Home/jre/lib/rt.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_66.jdk/Contents/Home/jre/lib/sunrsasign.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_66.jdk/Contents/Home/jre/lib/jsse.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_66.jdk/Contents/Home/jre/lib/jce.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_66.jdk/Contents/Home/jre/lib/charsets.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_66.jdk/Contents/Home/jre/lib/jfr.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_66.jdk/Contents/Home/jre/classes:/Users/user/.ivy2/cache/org.scala-lang/scala-library/jars/scala-library-2.12.0-M3.jar -classpath /Users/user/scalac-bug/target/scala-2.12.0-M3/classes [error] [error] last tree to typer: TypeTree(class Object) [error] tree position: [error] tree tpe: Object [error] symbol: class Object in package lang [error] symbol definition: class Object extends (a ClassSymbol) [error] symbol package: java.lang [error] symbol owners: class Object [error] call site: object Main in package example in package example [error] [error] [error] Total time: 3 s, completed 2015/11/03 7:45:15