scala / bug

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

Scala compiler crash with @specialized - no-symbol does not have owner #3896

Closed scabug closed 13 years ago

scabug commented 14 years ago

Affected scala version: trunk, version 2.9.0.r23164-b20101001201054

The following code (see below), which uses specialization crashes the scala compiler from trunk (see stack trace at the bottom). If I remove @specialized or rename the second "update" method then it works.

This bug was discussed on the mailing list at http://article.gmane.org/gmane.comp.lang.scala.user/31777

== Code causing the compiler crash: ==

import scala.annotation._

trait Atomic[@specialized(Boolean) T] {
        @inline def get() : T
        @inline def cas(expected: T, value: T): Boolean

        @tailrec final def update(f: T => T) : T = {
            val e: T = get()
            val v: T = f(e)
            if ( cas(e,v) ) v else update(f)
        }

        @tailrec final def update[R]
          (f: T => Option[T])
          (r: Option[T] => R = (_:Option[T]).isDefined  )
        : R = {
                val e = get()
                val v = f(e)
                v match {
                        case Some(x) => if (cas(e, x)) r(v) else update(f)(r)
                        case None => r(None)
                }
        }
}

class AtomicBoolean(initial: Boolean) extends Atomic[Boolean] {
        private val value = new java.util.concurrent.atomic.AtomicBoolean(initial);

        @inline def get() = value.get()

        @inline def cas(e: Boolean, v: Boolean) = value.compareAndSet(e,v)
}

object Atomic {
   def main(args: Array[String]) {
      val e = new AtomicBoolean(false)
      val x = e.update( (a : Boolean) => ! a ) // ok
      println( e.update( (a : Boolean) => ! a ) toString ) // ok
      println( e.update( (a : Boolean) => ! a ) ) // compiler crash
   }
}

== Stack trace of the compiler crash: ==

xception in thread "main" java.lang.Error: no-symbol does not have owner
        at scala.tools.nsc.symtab.SymbolTable.abort(SymbolTable.scala:33)
        at scala.tools.nsc.symtab.Symbols$$NoSymbol$$.owner(Symbols.scala:2066)
        at scala.tools.nsc.ast.TreeGen.isInPkgObject$$1(TreeGen.scala:165)
        at scala.tools.nsc.ast.TreeGen.mkAttributedSelect(TreeGen.scala:171)
        at scala.tools.nsc.typechecker.NamesDefaults$$$$anonfun$$11.apply(NamesDefaults.scala:370)
        at scala.tools.nsc.typechecker.NamesDefaults$$$$anonfun$$11.apply(NamesDefaults.scala:368)
        at scala.collection.TraversableLike$$$$anonfun$$map$$1.apply(TraversableLike.scala:206)
        at scala.collection.TraversableLike$$$$anonfun$$map$$1.apply(TraversableLike.scala:206)
        at scala.collection.LinearSeqOptimized$$class.foreach(LinearSeqOptimized.scala:61)
        at scala.collection.immutable.List.foreach(List.scala:45)
        at scala.collection.TraversableLike$$class.map(TraversableLike.scala:206)
        at scala.collection.immutable.List.map(List.scala:45)
        at scala.tools.nsc.typechecker.NamesDefaults$$class.addDefaults(NamesDefaults.scala:368)
        at scala.tools.nsc.transform.Erasure.addDefaults(Erasure.scala:16)
        at scala.tools.nsc.typechecker.Typers$$Typer.tryNamesDefaults$$1(Typers.scala:2407)
        at scala.tools.nsc.typechecker.Typers$$Typer.doTypedApply(Typers.scala:2439)
        at scala.tools.nsc.typechecker.Typers$$Typer.typedApply$$1(Typers.scala:3397)
        at scala.tools.nsc.typechecker.Typers$$Typer.typed1(Typers.scala:4073)
        at scala.tools.nsc.transform.Erasure$$Eraser.liftedTree1$$1(Erasure.scala:663)
        at scala.tools.nsc.transform.Erasure$$Eraser.typed1(Erasure.scala:662)
        at scala.tools.nsc.typechecker.Typers$$Typer.typed(Typers.scala:4228)
        at scala.tools.nsc.typechecker.Typers$$Typer.typedArg(Typers.scala:2217)
        at scala.tools.nsc.typechecker.Typers$$Typer$$$$anonfun$$typedArgs$$3.apply(Typers.scala:2227)
        at scala.tools.nsc.typechecker.Typers$$Typer$$$$anonfun$$typedArgs$$3.apply(Typers.scala:2226)
        at scala.collection.TraversableLike$$$$anonfun$$map$$1.apply(TraversableLike.scala:206)
        at scala.collection.TraversableLike$$$$anonfun$$map$$1.apply(TraversableLike.scala:206)
        at scala.collection.LinearSeqOptimized$$class.foreach(LinearSeqOptimized.scala:61)
        at scala.collection.immutable.List.foreach(List.scala:45)
        at scala.collection.TraversableLike$$class.map(TraversableLike.scala:206)
        at scala.collection.immutable.List.map(List.scala:45)
        at scala.tools.nsc.typechecker.Typers$$Typer.typedArgs(Typers.scala:2226)
        at scala.tools.nsc.typechecker.Typers$$Typer.doTypedApply(Typers.scala:2443)
        at scala.tools.nsc.typechecker.Typers$$Typer.typedApply$$1(Typers.scala:3397)
        at scala.tools.nsc.typechecker.Typers$$Typer.typed1(Typers.scala:4073)
        at scala.tools.nsc.transform.Erasure$$Eraser.liftedTree1$$1(Erasure.scala:663)
        at scala.tools.nsc.transform.Erasure$$Eraser.typed1(Erasure.scala:662)
        at scala.tools.nsc.typechecker.Typers$$Typer.typed(Typers.scala:4228)
        at scala.tools.nsc.typechecker.Typers$$Typer.typedBlock(Typers.scala:1964)
        at scala.tools.nsc.typechecker.Typers$$Typer.typed1(Typers.scala:3918)
        at scala.tools.nsc.transform.Erasure$$Eraser.liftedTree1$$1(Erasure.scala:663)
        at scala.tools.nsc.transform.Erasure$$Eraser.typed1(Erasure.scala:662)
        at scala.tools.nsc.typechecker.Typers$$Typer.typed(Typers.scala:4228)
        at scala.tools.nsc.typechecker.Typers$$Typer.transformedOrTyped(Typers.scala:4373)
        at scala.tools.nsc.typechecker.Typers$$Typer.typedDefDef(Typers.scala:1796)
        at scala.tools.nsc.typechecker.Typers$$Typer.typed1(Typers.scala:3886)
        at scala.tools.nsc.transform.Erasure$$Eraser.liftedTree1$$1(Erasure.scala:663)
        at scala.tools.nsc.transform.Erasure$$Eraser.typed1(Erasure.scala:662)
        at scala.tools.nsc.typechecker.Typers$$Typer.typed(Typers.scala:4228)
        at scala.tools.nsc.typechecker.Typers$$Typer.typedStat$$1(Typers.scala:2143)
        at scala.tools.nsc.typechecker.Typers$$Typer$$$$anonfun$$21.apply(Typers.scala:2211)
        at scala.tools.nsc.typechecker.Typers$$Typer$$$$anonfun$$21.apply(Typers.scala:2211)
        at scala.collection.immutable.List.loop$$1(List.scala:119)
        at scala.collection.immutable.List.mapConserve(List.scala:135)
        at scala.tools.nsc.typechecker.Typers$$Typer.typedStats(Typers.scala:2211)
        at scala.tools.nsc.typechecker.Typers$$Typer.typedTemplate(Typers.scala:1556)
        at scala.tools.nsc.typechecker.Typers$$Typer.typedClassDef(Typers.scala:1318)
        at scala.tools.nsc.typechecker.Typers$$Typer.typed1(Typers.scala:3877)
        at scala.tools.nsc.transform.Erasure$$Eraser.liftedTree1$$1(Erasure.scala:663)
        at scala.tools.nsc.transform.Erasure$$Eraser.typed1(Erasure.scala:662)
        at scala.tools.nsc.typechecker.Typers$$Typer.typed(Typers.scala:4228)
        at scala.tools.nsc.typechecker.Typers$$Typer.typedStat$$1(Typers.scala:2143)
        at scala.tools.nsc.typechecker.Typers$$Typer$$$$anonfun$$21.apply(Typers.scala:2211)
        at scala.tools.nsc.typechecker.Typers$$Typer$$$$anonfun$$21.apply(Typers.scala:2211)
        at scala.collection.immutable.List.loop$$1(List.scala:119)
        at scala.collection.immutable.List.mapConserve(List.scala:135)
        at scala.tools.nsc.typechecker.Typers$$Typer.typedStats(Typers.scala:2211)
        at scala.tools.nsc.typechecker.Typers$$Typer.typed1(Typers.scala:3873)
        at scala.tools.nsc.transform.Erasure$$Eraser.liftedTree1$$1(Erasure.scala:663)
        at scala.tools.nsc.transform.Erasure$$Eraser.typed1(Erasure.scala:662)
        at scala.tools.nsc.typechecker.Typers$$Typer.typed(Typers.scala:4228)
        at scala.tools.nsc.typechecker.Typers$$Typer.typed(Typers.scala:4277)
        at scala.tools.nsc.transform.Erasure$$ErasureTransformer$$$$anonfun$$transform$$1.apply(Erasure.scala:1096)
        at scala.tools.nsc.transform.Erasure$$ErasureTransformer$$$$anonfun$$transform$$1.apply(Erasure.scala:1093)
        at scala.tools.nsc.symtab.SymbolTable.atPhase(SymbolTable.scala:103)
        at scala.tools.nsc.transform.Erasure$$ErasureTransformer.transform(Erasure.scala:1093)
        at scala.tools.nsc.ast.Trees$$Transformer.transformUnit(Trees.scala:875)
        at scala.tools.nsc.transform.Transform$$Phase.apply(Transform.scala:30)
        at scala.tools.nsc.Global$$GlobalPhase$$$$anonfun$$applyPhase$$1.apply$$mcV$$sp(Global.scala:292)
        at scala.tools.nsc.Global$$GlobalPhase$$$$anonfun$$applyPhase$$1.apply(Global.scala:292)
        at scala.tools.nsc.Global$$GlobalPhase$$$$anonfun$$applyPhase$$1.apply(Global.scala:292)
        at scala.tools.nsc.reporters.Reporter.withSource(Reporter.scala:48)
        at scala.tools.nsc.Global$$GlobalPhase.applyPhase(Global.scala:292)
        at scala.tools.nsc.Global$$GlobalPhase$$$$anonfun$$run$$1.apply(Global.scala:261)
        at scala.tools.nsc.Global$$GlobalPhase$$$$anonfun$$run$$1.apply(Global.scala:261)
        at scala.collection.Iterator$$class.foreach(Iterator.scala:631)
        at scala.collection.mutable.ListBuffer$$$$anon$$1.foreach(ListBuffer.scala:310)
        at scala.tools.nsc.Global$$GlobalPhase.run(Global.scala:261)
        at scala.tools.nsc.Global$$Run.compileSources(Global.scala:763)
        at scala.tools.nsc.Global$$Run.compile(Global.scala:843)
        at scala.tools.nsc.Main$$.process(Main.scala:106)
        at scala.tools.nsc.Main$$.main(Main.scala:120)
        at scala.tools.nsc.Main.main(Main.scala)
scabug commented 14 years ago

Imported From: https://issues.scala-lang.org/browse/SI-3896?orig=1 Reporter: Alexander Berger (alex)

scabug commented 14 years ago

@paulp said: Reduced.

trait Atomic[@specialized(Boolean) T] {
  def x: T

  // crash depends on the overloading: if second method is "g", no crash.
  def f(fn: T => T): Boolean = f(fn(x))
  def f[R](a: T, b: R = true) = b
}
class AtomicBoolean(val x: Boolean) extends Atomic[Boolean]

object Main {
   def main(args: Array[String]): Unit = {
      val e = new AtomicBoolean(false)
      val x = e.f( (a : Boolean) => !a ) // ok
      println( e.f( (a : Boolean) => !a ) toString ) // ok
      println( e.f( (a : Boolean) => !a) ) // compiler crash
   }
}
scabug commented 13 years ago

Reto Bachmann-Gmr (reto) said: Not sure if this is the same issue.

I'm getting the following exception compiling (using maven):

Compiling 13 source files to /home/reto/projects/apache/clerezza/trunk/scala-scripting/script-engine/target/classes at 1290028424607
java.lang.reflect.InvocationTargetException
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
        at java.lang.reflect.Method.invoke(Method.java:616)
        at org_scala_tools_maven_executions.MainHelper.runMain(MainHelper.java:151)
        at org_scala_tools_maven_executions.MainWithArgsInFile.main(MainWithArgsInFile.java:26)
[ERROR]Caused by: java.lang.Error: no-symbol does not have owner
        at scala.tools.nsc.symtab.SymbolTable.abort(SymbolTable.scala:33)
        at scala.tools.nsc.symtab.Symbols$$NoSymbol$$.owner(Symbols.scala:2048)
        at scala.tools.nsc.transform.ExplicitOuter$$OuterPathTransformer.outerSelect(ExplicitOuter.scala:196)
        at scala.tools.nsc.transform.ExplicitOuter$$OuterPathTransformer.outerValue(ExplicitOuter.scala:182)
        at scala.tools.nsc.transform.ExplicitOuter$$ExplicitOuterTransformer.transform(ExplicitOuter.scala:461)
        at scala.tools.nsc.ast.Trees$$Transformer.transform(Trees.scala:812)
        at scala.tools.nsc.transform.TypingTransformers$$TypingTransformer.transform(TypingTransformers.scala:53)
        at scala.tools.nsc.transform.ExplicitOuter$$OuterPathTransformer.transform(ExplicitOuter.scala:239)
        at scala.tools.nsc.transform.ExplicitOuter$$ExplicitOuterTransformer.transform(ExplicitOuter.scala:470)
        at scala.tools.nsc.ast.Trees$$Transformer.transform(Trees.scala:804)
        at scala.tools.nsc.transform.TypingTransformers$$TypingTransformer.transform(TypingTransformers.scala:53)
        at scala.tools.nsc.transform.ExplicitOuter$$OuterPathTransformer.transform(ExplicitOuter.scala:239)
        at scala.tools.nsc.transform.ExplicitOuter$$ExplicitOuterTransformer.transform(ExplicitOuter.scala:498)
        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.transform.TypingTransformers$$TypingTransformer.atOwner(TypingTransformers.scala:38)
        at scala.tools.nsc.transform.TypingTransformers$$TypingTransformer.atOwner(TypingTransformers.scala:31)
        at scala.tools.nsc.ast.Trees$$Transformer.transform(Trees.scala:747)
        at scala.tools.nsc.transform.TypingTransformers$$TypingTransformer.transform(TypingTransformers.scala:53)
        at scala.tools.nsc.transform.ExplicitOuter$$OuterPathTransformer.transform(ExplicitOuter.scala:239)
        at scala.tools.nsc.transform.ExplicitOuter$$ExplicitOuterTransformer.transform(ExplicitOuter.scala:457)
        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.TypingTransformers$$TypingTransformer.scala$$tools$$nsc$$transform$$TypingTransformers$$TypingTransformer$$$$super$$transform(TypingTransformers.scala:49)
        at scala.tools.nsc.transform.TypingTransformers$$TypingTransformer$$$$anonfun$$transform$$1.apply(TypingTransformers.scala:49)
        at scala.tools.nsc.transform.TypingTransformers$$TypingTransformer$$$$anonfun$$transform$$1.apply(TypingTransformers.scala:49)
        at scala.tools.nsc.ast.Trees$$Transformer.atOwner(Trees.scala:864)
        at scala.tools.nsc.transform.TypingTransformers$$TypingTransformer.atOwner(TypingTransformers.scala:38)
        at scala.tools.nsc.transform.TypingTransformers$$TypingTransformer.atOwner(TypingTransformers.scala:31)
        at scala.tools.nsc.transform.TypingTransformers$$TypingTransformer.transform(TypingTransformers.scala:49)
        at scala.tools.nsc.transform.ExplicitOuter$$OuterPathTransformer.transform(ExplicitOuter.scala:239)
        at scala.tools.nsc.transform.ExplicitOuter$$ExplicitOuterTransformer.transform(ExplicitOuter.scala:437)
        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.transform.TypingTransformers$$TypingTransformer.atOwner(TypingTransformers.scala:38)
        at scala.tools.nsc.transform.TypingTransformers$$TypingTransformer.atOwner(TypingTransformers.scala:31)
        at scala.tools.nsc.ast.Trees$$Transformer.transform(Trees.scala:732)
        at scala.tools.nsc.transform.TypingTransformers$$TypingTransformer.transform(TypingTransformers.scala:53)
        at scala.tools.nsc.transform.ExplicitOuter$$OuterPathTransformer.transform(ExplicitOuter.scala:239)
        at scala.tools.nsc.transform.ExplicitOuter$$ExplicitOuterTransformer.transform(ExplicitOuter.scala:498)
        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.TypingTransformers$$TypingTransformer.transform(TypingTransformers.scala:53)
        at scala.tools.nsc.transform.ExplicitOuter$$OuterPathTransformer.transform(ExplicitOuter.scala:239)
        at scala.tools.nsc.transform.ExplicitOuter$$ExplicitOuterTransformer.transform(ExplicitOuter.scala:498)
        at scala.tools.nsc.ast.Trees$$Transformer$$$$anonfun$$transformTrees$$1.apply(Trees.scala:838)
        at scala.tools.nsc.ast.Trees$$Transformer$$$$anonfun$$transformTrees$$1.apply(Trees.scala:838)
        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.transformTrees(Trees.scala:838)
        at scala.tools.nsc.ast.Trees$$Transformer.transform(Trees.scala:804)
        at scala.tools.nsc.transform.TypingTransformers$$TypingTransformer.transform(TypingTransformers.scala:53)
        at scala.tools.nsc.transform.ExplicitOuter$$OuterPathTransformer.transform(ExplicitOuter.scala:239)
        at scala.tools.nsc.transform.ExplicitOuter$$ExplicitOuterTransformer.transform(ExplicitOuter.scala:498)
        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.TypingTransformers$$TypingTransformer.transform(TypingTransformers.scala:53)
        at scala.tools.nsc.transform.ExplicitOuter$$OuterPathTransformer.transform(ExplicitOuter.scala:239)
        at scala.tools.nsc.transform.ExplicitOuter$$ExplicitOuterTransformer.transform(ExplicitOuter.scala:498)
        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.transform.TypingTransformers$$TypingTransformer.atOwner(TypingTransformers.scala:38)
        at scala.tools.nsc.transform.TypingTransformers$$TypingTransformer.atOwner(TypingTransformers.scala:31)
        at scala.tools.nsc.ast.Trees$$Transformer.transform(Trees.scala:747)
        at scala.tools.nsc.transform.TypingTransformers$$TypingTransformer.transform(TypingTransformers.scala:53)
        at scala.tools.nsc.transform.ExplicitOuter$$OuterPathTransformer.transform(ExplicitOuter.scala:239)
        at scala.tools.nsc.transform.ExplicitOuter$$ExplicitOuterTransformer.transform(ExplicitOuter.scala:454)
        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.TypingTransformers$$TypingTransformer.scala$$tools$$nsc$$transform$$TypingTransformers$$TypingTransformer$$$$super$$transform(TypingTransformers.scala:49)
        at scala.tools.nsc.transform.TypingTransformers$$TypingTransformer$$$$anonfun$$transform$$1.apply(TypingTransformers.scala:49)
        at scala.tools.nsc.transform.TypingTransformers$$TypingTransformer$$$$anonfun$$transform$$1.apply(TypingTransformers.scala:49)
        at scala.tools.nsc.ast.Trees$$Transformer.atOwner(Trees.scala:864)
        at scala.tools.nsc.transform.TypingTransformers$$TypingTransformer.atOwner(TypingTransformers.scala:38)
        at scala.tools.nsc.transform.TypingTransformers$$TypingTransformer.atOwner(TypingTransformers.scala:31)
        at scala.tools.nsc.transform.TypingTransformers$$TypingTransformer.transform(TypingTransformers.scala:49)
        at scala.tools.nsc.transform.ExplicitOuter$$OuterPathTransformer.transform(ExplicitOuter.scala:239)
        at scala.tools.nsc.transform.ExplicitOuter$$ExplicitOuterTransformer.transform(ExplicitOuter.scala:437)
        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.transform.TypingTransformers$$TypingTransformer.atOwner(TypingTransformers.scala:38)
        at scala.tools.nsc.transform.TypingTransformers$$TypingTransformer.atOwner(TypingTransformers.scala:31)
        at scala.tools.nsc.ast.Trees$$Transformer.transform(Trees.scala:732)
        at scala.tools.nsc.transform.TypingTransformers$$TypingTransformer.transform(TypingTransformers.scala:53)
        at scala.tools.nsc.transform.ExplicitOuter$$OuterPathTransformer.transform(ExplicitOuter.scala:239)
        at scala.tools.nsc.transform.ExplicitOuter$$ExplicitOuterTransformer.transform(ExplicitOuter.scala:498)
        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$$$$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.transform.TypingTransformers$$TypingTransformer.atOwner(TypingTransformers.scala:38)
        at scala.tools.nsc.transform.TypingTransformers$$TypingTransformer.atOwner(TypingTransformers.scala:31)
        at scala.tools.nsc.ast.Trees$$Transformer.transform(Trees.scala:727)
        at scala.tools.nsc.transform.TypingTransformers$$TypingTransformer.scala$$tools$$nsc$$transform$$TypingTransformers$$TypingTransformer$$$$super$$transform(TypingTransformers.scala:49)
        at scala.tools.nsc.transform.TypingTransformers$$TypingTransformer$$$$anonfun$$transform$$2.apply(TypingTransformers.scala:51)
        at scala.tools.nsc.transform.TypingTransformers$$TypingTransformer$$$$anonfun$$transform$$2.apply(TypingTransformers.scala:51)
        at scala.tools.nsc.ast.Trees$$Transformer.atOwner(Trees.scala:864)
        at scala.tools.nsc.transform.TypingTransformers$$TypingTransformer.atOwner(TypingTransformers.scala:38)
        at scala.tools.nsc.transform.TypingTransformers$$TypingTransformer.atOwner(TypingTransformers.scala:31)
        at scala.tools.nsc.transform.TypingTransformers$$TypingTransformer.transform(TypingTransformers.scala:51)
        at scala.tools.nsc.transform.ExplicitOuter$$OuterPathTransformer.transform(ExplicitOuter.scala:239)
        at scala.tools.nsc.transform.ExplicitOuter$$ExplicitOuterTransformer.transform(ExplicitOuter.scala:498)
        at scala.tools.nsc.ast.Trees$$Transformer.transformUnit(Trees.scala:857)
        at scala.tools.nsc.transform.ExplicitOuter$$ExplicitOuterTransformer.scala$$tools$$nsc$$transform$$ExplicitOuter$$ExplicitOuterTransformer$$$$super$$transformUnit(ExplicitOuter.scala:507)
        at scala.tools.nsc.transform.ExplicitOuter$$ExplicitOuterTransformer$$$$anonfun$$transformUnit$$1.apply(ExplicitOuter.scala:507)
        at scala.tools.nsc.transform.ExplicitOuter$$ExplicitOuterTransformer$$$$anonfun$$transformUnit$$1.apply(ExplicitOuter.scala:507)
        at scala.tools.nsc.symtab.SymbolTable.atPhase(SymbolTable.scala:103)
        at scala.tools.nsc.transform.ExplicitOuter$$ExplicitOuterTransformer.transformUnit(ExplicitOuter.scala:507)
        at scala.tools.nsc.transform.ExplicitOuter$$ExplicitOuterTransformer.transformUnit(ExplicitOuter.scala:302)
        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)
        at scala.tools.nsc.Main$$.process(Main.scala:108)
        at scala.tools.nsc.Main$$.main(Main.scala:122)
        at scala.tools.nsc.Main.main(Main.scala)
        ... 6 more

compiling the following code

class Base(logger: ArgType)

abstract class ArgType() {
    def doIt;
}

class Demo extends Base(new ArgType { def doIt {Demo.this.logEntry = "foo"} }) {
    var logEntry: String = null
}
scabug commented 13 years ago

@dragos said: (In r23901) Fixed a bad interaction between overloading, default parameters and specialization. Closes #3896, no review.

scabug commented 13 years ago

@retronym said: Replying to [comment:5 reto]:

Not sure if this is the same issue.

Nope, and it is still crashes. It's not really kosher to refer to logEntry from that position in the code.

4166