Skip to content

"VerifyError: Bad invokespecial" when explicitly super call an abstract method #8693

Open
@scabug

Description

@scabug

The compiler ends with an java.lang.AssertionError when compiling the following file (and I have to look for another exam question....)

class A {
  def print(): Unit = {  }
}

trait B extends A {
  def print(): Unit
}

trait T3 extends B {
  override def print(): Unit = { super[B].print }
}

The error message looks as follows:

error: java.lang.AssertionError: assertion failed:
  class T3$class
     while compiling: Bug.scala
        during phase: globalPhase=mixin, enteringPhase=cleanup
     library version: version 2.11.0
    compiler version: version 2.11.0
  reconstructed args:

  last tree to typer: Select(Super(trait T3), print)
       tree position: line 10 of Bug.scala
              symbol: method print in class A
   symbol definition: def print(): Unit (a MethodSymbol)
      symbol package: <empty>
       symbol owners: method print -> class A
           call site: object T3$class in package <empty>

== Source file context for tree position ==

     7
     8 trait T3 extends B {
     9   override def print(): Unit = { super[B].print }
    10 }
    11
	at scala.tools.nsc.transform.Mixin$MixinTransformer.scala$tools$nsc$transform$Mixin$MixinTransformer$$postTransform(Mixin.scala:1195)
	at scala.tools.nsc.transform.Mixin$MixinTransformer$$anonfun$transform$1.apply(Mixin.scala:1239)
	at scala.tools.nsc.transform.Mixin$MixinTransformer$$anonfun$transform$1.apply(Mixin.scala:1239)
	at scala.reflect.internal.SymbolTable.enteringPhase(SymbolTable.scala:242)
	at scala.reflect.internal.SymbolTable.exitingPhase(SymbolTable.scala:263)
	at scala.tools.nsc.transform.Mixin$MixinTransformer.transform(Mixin.scala:1239)
	at scala.tools.nsc.transform.Mixin$MixinTransformer.transform(Mixin.scala:468)
	at scala.reflect.internal.Trees$$anonfun$itransform$2.apply(Trees.scala:1356)
	at scala.reflect.internal.Trees$$anonfun$itransform$2.apply(Trees.scala:1354)
	at scala.reflect.api.Trees$Transformer.atOwner(Trees.scala:2600)
	at scala.reflect.internal.Trees$class.itransform(Trees.scala:1353)
	at scala.reflect.internal.SymbolTable.itransform(SymbolTable.scala:16)
	at scala.reflect.internal.SymbolTable.itransform(SymbolTable.scala:16)
	at scala.reflect.api.Trees$Transformer.transform(Trees.scala:2555)
	at scala.tools.nsc.transform.Mixin$MixinTransformer.transform(Mixin.scala:1236)
	at scala.tools.nsc.transform.Mixin$MixinTransformer.transform(Mixin.scala:468)
	at scala.reflect.api.Trees$Transformer$$anonfun$transformStats$1.apply(Trees.scala:2589)
	at scala.reflect.api.Trees$Transformer$$anonfun$transformStats$1.apply(Trees.scala:2587)
	at scala.collection.immutable.List.loop$1(List.scala:172)
	at scala.collection.immutable.List.mapConserve(List.scala:188)
	at scala.reflect.api.Trees$Transformer.transformStats(Trees.scala:2587)
	at scala.reflect.internal.Trees$class.itransform(Trees.scala:1397)
	at scala.reflect.internal.SymbolTable.itransform(SymbolTable.scala:16)
	at scala.reflect.internal.SymbolTable.itransform(SymbolTable.scala:16)
	at scala.reflect.api.Trees$Transformer.transform(Trees.scala:2555)
	at scala.tools.nsc.transform.Mixin$MixinTransformer.transform(Mixin.scala:1236)
	at scala.tools.nsc.transform.Mixin$MixinTransformer.transform(Mixin.scala:468)
	at scala.reflect.api.Trees$Transformer.transformTemplate(Trees.scala:2563)
	at scala.reflect.internal.Trees$$anonfun$itransform$4.apply(Trees.scala:1401)
	at scala.reflect.internal.Trees$$anonfun$itransform$4.apply(Trees.scala:1400)
	at scala.reflect.api.Trees$Transformer.atOwner(Trees.scala:2600)
	at scala.reflect.internal.Trees$class.itransform(Trees.scala:1399)
	at scala.reflect.internal.SymbolTable.itransform(SymbolTable.scala:16)
	at scala.reflect.internal.SymbolTable.itransform(SymbolTable.scala:16)
	at scala.reflect.api.Trees$Transformer.transform(Trees.scala:2555)
	at scala.tools.nsc.transform.Mixin$MixinTransformer.transform(Mixin.scala:1236)
	at scala.tools.nsc.transform.Mixin$MixinTransformer.transform(Mixin.scala:468)
	at scala.reflect.api.Trees$Transformer$$anonfun$transformStats$1.apply(Trees.scala:2589)
	at scala.reflect.api.Trees$Transformer$$anonfun$transformStats$1.apply(Trees.scala:2587)
	at scala.collection.immutable.List.loop$1(List.scala:172)
	at scala.collection.immutable.List.mapConserve(List.scala:188)
	at scala.reflect.api.Trees$Transformer.transformStats(Trees.scala:2587)
	at scala.reflect.internal.Trees$$anonfun$itransform$7.apply(Trees.scala:1419)
	at scala.reflect.internal.Trees$$anonfun$itransform$7.apply(Trees.scala:1419)
	at scala.reflect.api.Trees$Transformer.atOwner(Trees.scala:2600)
	at scala.reflect.internal.Trees$class.itransform(Trees.scala:1418)
	at scala.reflect.internal.SymbolTable.itransform(SymbolTable.scala:16)
	at scala.reflect.internal.SymbolTable.itransform(SymbolTable.scala:16)
	at scala.reflect.api.Trees$Transformer.transform(Trees.scala:2555)
	at scala.tools.nsc.transform.Mixin$MixinTransformer.transform(Mixin.scala:1236)
	at scala.tools.nsc.transform.Mixin$MixinTransformer.transform(Mixin.scala:468)
	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.applyPhase(Global.scala:430)
	at scala.tools.nsc.Global$GlobalPhase$$anonfun$run$1.apply(Global.scala:397)
	at scala.tools.nsc.Global$GlobalPhase$$anonfun$run$1.apply(Global.scala:397)
	at scala.collection.Iterator$class.foreach(Iterator.scala:743)
	at scala.collection.AbstractIterator.foreach(Iterator.scala:1174)
	at scala.tools.nsc.Global$GlobalPhase.run(Global.scala:397)
	at scala.tools.nsc.Global$Run.compileUnitsInternal(Global.scala:1625)
	at scala.tools.nsc.Global$Run.compileUnits(Global.scala:1610)
	at scala.tools.nsc.Global$Run.compileSources(Global.scala:1605)
	at scala.tools.nsc.Global$Run.compile(Global.scala:1703)
	at scala.tools.nsc.Driver.doCompile(Driver.scala:34)
	at scala.tools.nsc.MainClass.doCompile(Main.scala:23)
	at scala.tools.nsc.Driver.process(Driver.scala:55)
	at scala.tools.nsc.Driver.main(Driver.scala:68)
	at scala.tools.nsc.Main.main(Main.scala)
Exception in thread "main" java.lang.AssertionError: assertion failed: 
  class T3$class
     while compiling: Bug.scala
        during phase: globalPhase=mixin, enteringPhase=cleanup
     library version: version 2.11.0
    compiler version: version 2.11.0
  reconstructed args: 

  last tree to typer: Select(Super(trait T3), print)
       tree position: line 10 of Bug.scala
              symbol: method print in class A
   symbol definition: def print(): Unit (a MethodSymbol)
      symbol package: <empty>
       symbol owners: method print -> class A
           call site: object T3$class in package <empty>

== Source file context for tree position ==

     7 
     8 trait T3 extends B {
     9   override def print(): Unit = { super[B].print }
    10 }
    11 
	at scala.tools.nsc.transform.Mixin$MixinTransformer.scala$tools$nsc$transform$Mixin$MixinTransformer$$postTransform(Mixin.scala:1195)
	at scala.tools.nsc.transform.Mixin$MixinTransformer$$anonfun$transform$1.apply(Mixin.scala:1239)
	at scala.tools.nsc.transform.Mixin$MixinTransformer$$anonfun$transform$1.apply(Mixin.scala:1239)
	at scala.reflect.internal.SymbolTable.enteringPhase(SymbolTable.scala:242)
	at scala.reflect.internal.SymbolTable.exitingPhase(SymbolTable.scala:263)
	at scala.tools.nsc.transform.Mixin$MixinTransformer.transform(Mixin.scala:1239)
	at scala.tools.nsc.transform.Mixin$MixinTransformer.transform(Mixin.scala:468)
	at scala.reflect.internal.Trees$$anonfun$itransform$2.apply(Trees.scala:1356)
	at scala.reflect.internal.Trees$$anonfun$itransform$2.apply(Trees.scala:1354)
	at scala.reflect.api.Trees$Transformer.atOwner(Trees.scala:2600)
	at scala.reflect.internal.Trees$class.itransform(Trees.scala:1353)
	at scala.reflect.internal.SymbolTable.itransform(SymbolTable.scala:16)
	at scala.reflect.internal.SymbolTable.itransform(SymbolTable.scala:16)
	at scala.reflect.api.Trees$Transformer.transform(Trees.scala:2555)
	at scala.tools.nsc.transform.Mixin$MixinTransformer.transform(Mixin.scala:1236)
	at scala.tools.nsc.transform.Mixin$MixinTransformer.transform(Mixin.scala:468)
	at scala.reflect.api.Trees$Transformer$$anonfun$transformStats$1.apply(Trees.scala:2589)
	at scala.reflect.api.Trees$Transformer$$anonfun$transformStats$1.apply(Trees.scala:2587)
	at scala.collection.immutable.List.loop$1(List.scala:172)
	at scala.collection.immutable.List.mapConserve(List.scala:188)
	at scala.reflect.api.Trees$Transformer.transformStats(Trees.scala:2587)
	at scala.reflect.internal.Trees$class.itransform(Trees.scala:1397)
	at scala.reflect.internal.SymbolTable.itransform(SymbolTable.scala:16)
	at scala.reflect.internal.SymbolTable.itransform(SymbolTable.scala:16)
	at scala.reflect.api.Trees$Transformer.transform(Trees.scala:2555)
	at scala.tools.nsc.transform.Mixin$MixinTransformer.transform(Mixin.scala:1236)
	at scala.tools.nsc.transform.Mixin$MixinTransformer.transform(Mixin.scala:468)
	at scala.reflect.api.Trees$Transformer.transformTemplate(Trees.scala:2563)
	at scala.reflect.internal.Trees$$anonfun$itransform$4.apply(Trees.scala:1401)
	at scala.reflect.internal.Trees$$anonfun$itransform$4.apply(Trees.scala:1400)
	at scala.reflect.api.Trees$Transformer.atOwner(Trees.scala:2600)
	at scala.reflect.internal.Trees$class.itransform(Trees.scala:1399)
	at scala.reflect.internal.SymbolTable.itransform(SymbolTable.scala:16)
	at scala.reflect.internal.SymbolTable.itransform(SymbolTable.scala:16)
	at scala.reflect.api.Trees$Transformer.transform(Trees.scala:2555)
	at scala.tools.nsc.transform.Mixin$MixinTransformer.transform(Mixin.scala:1236)
	at scala.tools.nsc.transform.Mixin$MixinTransformer.transform(Mixin.scala:468)
	at scala.reflect.api.Trees$Transformer$$anonfun$transformStats$1.apply(Trees.scala:2589)
	at scala.reflect.api.Trees$Transformer$$anonfun$transformStats$1.apply(Trees.scala:2587)
	at scala.collection.immutable.List.loop$1(List.scala:172)
	at scala.collection.immutable.List.mapConserve(List.scala:188)
	at scala.reflect.api.Trees$Transformer.transformStats(Trees.scala:2587)
	at scala.reflect.internal.Trees$$anonfun$itransform$7.apply(Trees.scala:1419)
	at scala.reflect.internal.Trees$$anonfun$itransform$7.apply(Trees.scala:1419)
	at scala.reflect.api.Trees$Transformer.atOwner(Trees.scala:2600)
	at scala.reflect.internal.Trees$class.itransform(Trees.scala:1418)
	at scala.reflect.internal.SymbolTable.itransform(SymbolTable.scala:16)
	at scala.reflect.internal.SymbolTable.itransform(SymbolTable.scala:16)
	at scala.reflect.api.Trees$Transformer.transform(Trees.scala:2555)
	at scala.tools.nsc.transform.Mixin$MixinTransformer.transform(Mixin.scala:1236)
	at scala.tools.nsc.transform.Mixin$MixinTransformer.transform(Mixin.scala:468)
	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.applyPhase(Global.scala:430)
	at scala.tools.nsc.Global$GlobalPhase$$anonfun$run$1.apply(Global.scala:397)
	at scala.tools.nsc.Global$GlobalPhase$$anonfun$run$1.apply(Global.scala:397)
	at scala.collection.Iterator$class.foreach(Iterator.scala:743)
	at scala.collection.AbstractIterator.foreach(Iterator.scala:1174)
	at scala.tools.nsc.Global$GlobalPhase.run(Global.scala:397)
	at scala.tools.nsc.Global$Run.compileUnitsInternal(Global.scala:1625)
	at scala.tools.nsc.Global$Run.compileUnits(Global.scala:1610)
	at scala.tools.nsc.Global$Run.compileSources(Global.scala:1605)
	at scala.tools.nsc.Global$Run.compile(Global.scala:1703)
	at scala.tools.nsc.Driver.doCompile(Driver.scala:34)
	at scala.tools.nsc.MainClass.doCompile(Main.scala:23)
	at scala.tools.nsc.Driver.process(Driver.scala:55)
	at scala.tools.nsc.Driver.main(Driver.scala:68)
	at scala.tools.nsc.Main.main(Main.scala)

Metadata

Metadata

Assignees

Labels

No labels
No labels

Type

No type

Projects

No projects

Relationships

None yet

Development

No branches or pull requests

Issue actions