scala / bug

Scala 2 bug reports only. Please, no questions — proper bug reports only.
https://scala-lang.org
232 stars 21 forks source link

Trait super[Object] crasher #4704

Closed scabug closed 6 years ago

scabug commented 13 years ago

If I try to compile the following code:

trait Bar {
  super[ScalaObject].hashCode // also super[Object]
}

I get a compiler crash with the following stacktrace:

java.lang.AssertionError: assertion failed
    at scala.Predef$.assert(Predef.scala:77)
    at scala.tools.nsc.transform.Mixin$MixinTransformer.scala$tools$nsc$transform$Mixin$MixinTransformer$$postTransform(Mixin.scala:1006)
    at scala.tools.nsc.transform.Mixin$MixinTransformer$$anonfun$16.apply(Mixin.scala:1054)
    at scala.tools.nsc.transform.Mixin$MixinTransformer$$anonfun$16.apply(Mixin.scala:1054)
    at scala.tools.nsc.symtab.SymbolTable.atPhase(SymbolTable.scala:103)
    at scala.tools.nsc.transform.Mixin$MixinTransformer.transform(Mixin.scala:1054)
    at scala.tools.nsc.ast.Trees$Transformer$$anonfun$transformStats$1.apply(Trees.scala:856)
    at scala.tools.nsc.ast.Trees$Transformer$$anonfun$transformStats$1.apply(Trees.scala:854)
    at scala.collection.immutable.List.loop$1(List.scala:115)
    at scala.collection.immutable.List.mapConserve(List.scala:132)
    at scala.tools.nsc.ast.Trees$Transformer.transformStats(Trees.scala:854)
    at scala.tools.nsc.ast.Trees$Transformer.transform(Trees.scala:766)
    at scala.tools.nsc.transform.Mixin$MixinTransformer.transform(Mixin.scala:1053)
    at scala.tools.nsc.ast.Trees$Transformer$$anonfun$transform$5.apply(Trees.scala:750)
    at scala.tools.nsc.ast.Trees$Transformer$$anonfun$transform$5.apply(Trees.scala:748)
    at scala.tools.nsc.ast.Trees$Transformer.atOwner(Trees.scala:864)
    at scala.tools.nsc.ast.Trees$Transformer.transform(Trees.scala:747)
    at scala.tools.nsc.transform.Mixin$MixinTransformer.transform(Mixin.scala:1053)
    at scala.tools.nsc.ast.Trees$Transformer$$anonfun$transformStats$1.apply(Trees.scala:856)
    at scala.tools.nsc.ast.Trees$Transformer$$anonfun$transformStats$1.apply(Trees.scala:854)
    at scala.collection.immutable.List.loop$1(List.scala:115)
    at scala.collection.immutable.List.mapConserve(List.scala:132)
    at scala.tools.nsc.ast.Trees$Transformer.transformStats(Trees.scala:854)
    at scala.tools.nsc.ast.Trees$Transformer.transform(Trees.scala:764)
    at scala.tools.nsc.transform.Mixin$MixinTransformer.transform(Mixin.scala:1053)
    at scala.tools.nsc.ast.Trees$Transformer.transformTemplate(Trees.scala:840)
    at scala.tools.nsc.ast.Trees$Transformer$$anonfun$transform$2.apply(Trees.scala:734)
    at scala.tools.nsc.ast.Trees$Transformer$$anonfun$transform$2.apply(Trees.scala:733)
    at scala.tools.nsc.ast.Trees$Transformer.atOwner(Trees.scala:864)
    at scala.tools.nsc.ast.Trees$Transformer.transform(Trees.scala:732)
    at scala.tools.nsc.transform.Mixin$MixinTransformer.transform(Mixin.scala:1053)
    at scala.tools.nsc.ast.Trees$Transformer$$anonfun$transformStats$1.apply(Trees.scala:856)
    at scala.tools.nsc.ast.Trees$Transformer$$anonfun$transformStats$1.apply(Trees.scala:854)
    at scala.collection.immutable.List.loop$1(List.scala:115)
    at scala.collection.immutable.List.mapConserve(List.scala:132)
    at scala.collection.immutable.List.loop$1(List.scala:119)
    at scala.collection.immutable.List.mapConserve(List.scala:132)
    at scala.collection.immutable.List.loop$1(List.scala:119)
    at scala.collection.immutable.List.mapConserve(List.scala:132)
    at scala.tools.nsc.ast.Trees$Transformer.transformStats(Trees.scala:854)
    at scala.tools.nsc.ast.Trees$Transformer$$anonfun$transform$1.apply(Trees.scala:728)
    at scala.tools.nsc.ast.Trees$Transformer$$anonfun$transform$1.apply(Trees.scala:728)
    at scala.tools.nsc.ast.Trees$Transformer.atOwner(Trees.scala:864)
    at scala.tools.nsc.ast.Trees$Transformer.transform(Trees.scala:727)
    at scala.tools.nsc.transform.Mixin$MixinTransformer.transform(Mixin.scala:1053)
    at scala.tools.nsc.ast.Trees$Transformer.transformUnit(Trees.scala:857)
    at scala.tools.nsc.transform.Transform$Phase.apply(Transform.scala:30)
    at scala.tools.nsc.Global$GlobalPhase$$anonfun$applyPhase$1.apply(Global.scala:276)
    at scala.tools.nsc.Global$GlobalPhase$$anonfun$applyPhase$1.apply(Global.scala:276)
    at scala.tools.nsc.reporters.Reporter.withSource(Reporter.scala:48)
    at scala.tools.nsc.Global$GlobalPhase.applyPhase(Global.scala:276)
    at scala.tools.nsc.Global$GlobalPhase$$anonfun$run$1.apply(Global.scala:252)
    at scala.tools.nsc.Global$GlobalPhase$$anonfun$run$1.apply(Global.scala:252)
    at scala.collection.Iterator$class.foreach(Iterator.scala:631)
    at scala.collection.mutable.ListBuffer$$anon$1.foreach(ListBuffer.scala:304)
    at scala.tools.nsc.Global$GlobalPhase.run(Global.scala:252)
    at scala.tools.nsc.Global$Run.compileSources(Global.scala:733)
    at scala.tools.nsc.Global$Run.compile(Global.scala:813)
scabug commented 13 years ago

Imported From: https://issues.scala-lang.org/browse/SI-4704?orig=1 Reporter: Jorge Ortiz (jorgeortiz85) Affected Versions: 2.8.0, 2.8.1, 2.9.0, 2.11.0-M8

scabug commented 13 years ago

@paulp said: Don't know how to handle. Here's a test, in case this starts looking too easy.

trait MM {
  protected def method = "bip"
}
trait NN {
  protected def method = "bop"
}
trait OOOOO extends MM with NN {
  override protected def method = super[MM].method + super[NN].method
  override def hashCode = super[MM].hashCode + super[NN].hashCode
}
scabug commented 10 years ago

@VladUreche said: The variant I found independently:

trait IterableLike[A]

trait SeqLike[A] extends IterableLike[A] {
  override def toString = super[IterableLike].toString
}

History: https://github.com/miniboxing/miniboxing-plugin/issues/40

xuwei-k commented 6 years ago

fixed since Scala 2.12.x? 🤔

Welcome to Scala 2.12.6 (Java HotSpot(TM) 64-Bit Server VM, Java 1.8.0_181).
Type in expressions for evaluation. Or try :help.

scala> trait Bar {
     |   super[Object].hashCode
     | }
defined trait Bar
Welcome to Scala 2.13.0-M4 (Java HotSpot(TM) 64-Bit Server VM, Java 1.8.0_181).
Type in expressions for evaluation. Or try :help.

scala> trait Bar {
     |   super[Object].hashCode
     | }
defined trait Bar
Welcome to Scala 2.11.12 (Java HotSpot(TM) 64-Bit Server VM, Java 1.8.0_181).
Type in expressions for evaluation. Or try :help.

scala> trait Bar {
     |   super[Object].hashCode
     | }
java.lang.AssertionError: assertion failed: 
  class iw$Bar$class
     while compiling: <console>
        during phase: globalPhase=mixin, enteringPhase=cleanup
     library version: version 2.11.12
    compiler version: version 2.11.12
  reconstructed args: 

  last tree to typer: type $iw
       tree position: line 9 of <console>
            tree tpe: <notype>
              symbol: object iw in package $line3
   symbol definition: class iw extends Object (a ModuleClassSymbol)
      symbol package: $line3
       symbol owners: object iw
           call site: object iw$Bar$class in package $line3 in package $line3

<Cannot read source file>
    at scala.tools.nsc.transform.Mixin$MixinTransformer.scala$tools$nsc$transform$Mixin$MixinTransformer$$postTransform(Mixin.scala:1217)
    at scala.tools.nsc.transform.Mixin$MixinTransformer$$anonfun$transform$1.apply(Mixin.scala:1261)
    at scala.tools.nsc.transform.Mixin$MixinTransformer$$anonfun$transform$1.apply(Mixin.scala:1261)
    at scala.reflect.internal.SymbolTable.enteringPhase(SymbolTable.scala:235)
    at scala.reflect.internal.SymbolTable.exitingPhase(SymbolTable.scala:256)
    at scala.tools.nsc.transform.Mixin$MixinTransformer.transform(Mixin.scala:1261)
    at scala.tools.nsc.transform.Mixin$MixinTransformer.transform(Mixin.scala:468)
    at scala.reflect.api.Trees$Transformer$$anonfun$transformStats$1.apply(Trees.scala:2589)