Skip to content

Specialization/constructors/genicode interaction #7574

@scabug

Description

@scabug
$ cat X.scala 
class Ctor[@specialized(Int) T](var t1: T, var t2: T) {

  // the block needs to be here to cause the crash:
  {
    // the code needs to be here to cause the crash:
    val XXX = "XXX"
    println(XXX)

    // boilerplate to force constructor specialization:
    t1 = t2
  }
}
$ scalac X.scala 
error: Unknown type: => String, => String [class scala.reflect.internal.Types$NullaryMethodType, class scala.reflect.internal.Types$NullaryMethodType] TypeRef? false
error: uncaught exception during compilation: scala.reflect.internal.FatalError
error: scala.reflect.internal.FatalError: 
     while compiling: X.scala
        during phase: icode
     library version: version 2.10.3-20130609-151224-a54d86b550
    compiler version: version 2.10.3-20130612-162255-3a959f7a05
  reconstructed args: 

  last tree to typer: Ident(t2$mcI$sp)
              symbol: value t2$mcI$sp (flags: <param> <triedcooking>)
   symbol definition: t2$mcI$sp: Int
                 tpe: Int
       symbol owners: value t2$mcI$sp -> constructor Ctor$mcI$sp -> class Ctor$mcI$sp -> package <empty>
      context owners: class Ctor$mcI$sp -> package <empty>

...

== Expanded type of tree ==

TypeRef(TypeSymbol(final abstract class Int extends ))

Unknown type: => String, => String [class scala.reflect.internal.Types$NullaryMethodType, class scala.reflect.internal.Types$NullaryMethodType] TypeRef? false
	at scala.reflect.internal.SymbolTable.abort(SymbolTable.scala:49)
	at scala.tools.nsc.Global.abort(Global.scala:254)
	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.genLoadSelect$1(GenICode.scala:1006)
	at scala.tools.nsc.backend.icode.GenICode$ICodePhase.scala$tools$nsc$backend$icode$GenICode$ICodePhase$$genLoad(GenICode.scala:1022)
	at scala.tools.nsc.backend.icode.GenICode$ICodePhase$$anonfun$genLoadArguments$1.apply(GenICode.scala:1246)
	at scala.tools.nsc.backend.icode.GenICode$ICodePhase$$anonfun$genLoadArguments$1.apply(GenICode.scala:1244)
	at scala.collection.LinearSeqOptimized$class.foldLeft(LinearSeqOptimized.scala:111)
	at scala.collection.immutable.List.foldLeft(List.scala:84)
	at scala.tools.nsc.backend.icode.GenICode$ICodePhase.genLoadArguments(GenICode.scala:1244)
	at scala.tools.nsc.backend.icode.GenICode$ICodePhase.genLoadApply6$1(GenICode.scala:935)
	at scala.tools.nsc.backend.icode.GenICode$ICodePhase.scala$tools$nsc$backend$icode$GenICode$ICodePhase$$genLoad(GenICode.scala:967)
	at scala.tools.nsc.backend.icode.GenICode$ICodePhase.scala$tools$nsc$backend$icode$GenICode$ICodePhase$$genStat(GenICode.scala:187)
	at scala.tools.nsc.backend.icode.GenICode$ICodePhase$$anonfun$genStat$1.apply(GenICode.scala:156)
	at scala.tools.nsc.backend.icode.GenICode$ICodePhase$$anonfun$genStat$1.apply(GenICode.scala:156)
	at scala.collection.LinearSeqOptimized$class.foldLeft(LinearSeqOptimized.scala:111)
	at scala.collection.immutable.List.foldLeft(List.scala:84)
	at scala.tools.nsc.backend.icode.GenICode$ICodePhase.genStat(GenICode.scala:156)
	at scala.tools.nsc.backend.icode.GenICode$ICodePhase.scala$tools$nsc$backend$icode$GenICode$ICodePhase$$genLoad(GenICode.scala:1068)
	at scala.tools.nsc.backend.icode.GenICode$ICodePhase.scala$tools$nsc$backend$icode$GenICode$ICodePhase$$genStat(GenICode.scala:187)
	at scala.tools.nsc.backend.icode.GenICode$ICodePhase$$anonfun$genStat$1.apply(GenICode.scala:156)
	at scala.tools.nsc.backend.icode.GenICode$ICodePhase$$anonfun$genStat$1.apply(GenICode.scala:156)
	at scala.collection.LinearSeqOptimized$class.foldLeft(LinearSeqOptimized.scala:111)
	at scala.collection.immutable.List.foldLeft(List.scala:84)
	at scala.tools.nsc.backend.icode.GenICode$ICodePhase.genStat(GenICode.scala:156)
	at scala.tools.nsc.backend.icode.GenICode$ICodePhase.scala$tools$nsc$backend$icode$GenICode$ICodePhase$$genLoad(GenICode.scala:1068)
	at scala.tools.nsc.backend.icode.GenICode$ICodePhase.gen(GenICode.scala:124)
	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:318)
	at scala.tools.nsc.backend.icode.GenICode$ICodePhase.gen(GenICode.scala:72)
	at scala.tools.nsc.backend.icode.GenICode$ICodePhase.gen(GenICode.scala:149)
	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:318)
	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:464)
	at scala.tools.nsc.Global$GlobalPhase$$anonfun$run$1.apply(Global.scala:431)
	at scala.tools.nsc.Global$GlobalPhase$$anonfun$run$1.apply(Global.scala:431)
	at scala.collection.Iterator$class.foreach(Iterator.scala:727)
	at scala.collection.AbstractIterator.foreach(Iterator.scala:1157)
	at scala.tools.nsc.Global$GlobalPhase.run(Global.scala:431)
	at scala.tools.nsc.backend.icode.GenICode$ICodePhase.run(GenICode.scala:57)
	at scala.tools.nsc.Global$Run.compileUnitsInternal(Global.scala:1583)
	at scala.tools.nsc.Global$Run.compileUnits(Global.scala:1557)
	at scala.tools.nsc.Global$Run.compileSources(Global.scala:1553)
	at scala.tools.nsc.Global$Run.compile(Global.scala:1662)
	at scala.tools.nsc.Driver.doCompile(Driver.scala:33)
	at scala.tools.nsc.Main$.doCompile(Main.scala:79)
	at scala.tools.nsc.Driver.process(Driver.scala:54)
	at scala.tools.nsc.Driver.main(Driver.scala:67)
	at scala.tools.nsc.Main.main(Main.scala)

Note the constructor specialization happens in constructors and is key to the crash, thus the bug description mentions constructors.

Metadata

Metadata

Assignees

No one assigned

    Type

    No type

    Projects

    No projects

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions