Closed scabug closed 13 years ago
Imported From: https://issues.scala-lang.org/browse/SI-3896?orig=1 Reporter: Alexander Berger (alex)
@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
}
}
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
}
@dragos said: (In r23901) Fixed a bad interaction between overloading, default parameters and specialization. Closes #3896, no review.
@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.
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: ==
== Stack trace of the compiler crash: ==