scala / bug

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

"error reading Scala signature of $line5.$read: assertion failed: unsafe symbol $anon$1" when refining "val b: Any" with "object b" #9163

Open scabug opened 9 years ago

scabug commented 9 years ago

Reported by Jerzy Müller: https://groups.google.com/d/topic/scala-internals/fSFBe9ebiqw/discussion

It works on 2.10.4.

[info] Starting scala interpreter...
[info]
Welcome to Scala version 2.11.5 (Java HotSpot(TM) 64-Bit Server VM, Java 1.8.0_25).
Type in expressions to have them evaluated.
Type :help for more information.

scala> trait A { val b: Any }
defined trait A

scala> new A { object b }
res0: A{object b} = $anon$1@4d114a30

scala> res0.b
java.lang.AssertionError: assertion failed: unsafe symbol $anon$1 (child of object $iw) in runtime reflection universe
        at scala.reflect.internal.Symbols$Symbol.<init>(Symbols.scala:179)
        at scala.reflect.internal.Symbols$TypeSymbol.<init>(Symbols.scala:2976)
        at scala.reflect.internal.Symbols$ClassSymbol.<init>(Symbols.scala:3168)
        at scala.reflect.internal.Symbols$StubClassSymbol.<init>(Symbols.scala:3463)
        at scala.reflect.internal.Symbols$Symbol.newStubSymbol(Symbols.scala:493)
        at scala.reflect.internal.pickling.UnPickler$Scan.readExtSymbol$1(UnPickler.scala:258)
        at scala.reflect.internal.pickling.UnPickler$Scan.readSymbol(UnPickler.scala:284)
        at scala.reflect.internal.pickling.UnPickler$Scan.readSymbolRef(UnPickler.scala:649)
        at scala.reflect.internal.pickling.UnPickler$Scan.readExtSymbol$1(UnPickler.scala:207)
        at scala.reflect.internal.pickling.UnPickler$Scan.readSymbol(UnPickler.scala:284)
        at scala.reflect.internal.pickling.UnPickler$Scan.readSymbolRef(UnPickler.scala:649)
        at scala.reflect.internal.pickling.UnPickler$Scan.readType(UnPickler.scala:417)
        at scala.reflect.internal.pickling.UnPickler$Scan$$anonfun$2.apply(UnPickler.scala:360)
        at scala.reflect.internal.pickling.UnPickler$Scan$$anonfun$2.apply(UnPickler.scala:360)
        at scala.reflect.internal.pickling.UnPickler$Scan.at(UnPickler.scala:179)
        at scala.reflect.internal.pickling.UnPickler$Scan.readSymbol(UnPickler.scala:360)
        at scala.reflect.internal.pickling.UnPickler$Scan.run(UnPickler.scala:87)
        at scala.reflect.internal.pickling.UnPickler.unpickle(UnPickler.scala:38)
        at scala.reflect.runtime.JavaMirrors$JavaMirror.unpickleClass(JavaMirrors.scala:615)
        at scala.reflect.runtime.SymbolLoaders$TopClassCompleter$$anonfun$complete$1.apply$mcV$sp(SymbolLoaders.scala:28)
        at scala.reflect.runtime.SymbolLoaders$TopClassCompleter$$anonfun$complete$1.apply(SymbolLoaders.scala:25)
        at scala.reflect.runtime.SymbolLoaders$TopClassCompleter$$anonfun$complete$1.apply(SymbolLoaders.scala:25)
        at scala.reflect.internal.SymbolTable.slowButSafeEnteringPhaseNotLaterThan(SymbolTable.scala:263)
        at scala.reflect.runtime.SymbolLoaders$TopClassCompleter.complete(SymbolLoaders.scala:25)
        at scala.reflect.runtime.SymbolLoaders$TopClassCompleter.load(SymbolLoaders.scala:33)
        at scala.reflect.internal.Symbols$Symbol.exists(Symbols.scala:1050)
        at scala.reflect.internal.Importers$StandardImporter.recreateOrRelink$1(Importers.scala:163)
        at scala.reflect.internal.Importers$StandardImporter.importSymbol(Importers.scala:210)
        at scala.reflect.internal.Importers$StandardImporter.importSymbol(Importers.scala:29)
        at scala.tools.nsc.interpreter.IMain.getModuleIfDefined(IMain.scala:173)
        at scala.tools.nsc.interpreter.IMain.readRootPath(IMain.scala:296)
        at scala.tools.nsc.interpreter.IMain$ReadEvalPrint.resolvePathToSymbol(IMain.scala:806)
        at scala.tools.nsc.interpreter.IMain$Request.resultSymbol$lzycompute(IMain.scala:997)
        at scala.tools.nsc.interpreter.IMain$Request.resultSymbol(IMain.scala:997)
        at scala.tools.nsc.interpreter.IMain$Request$$anonfun$typeMap$1.apply(IMain.scala:1004)
        at scala.tools.nsc.interpreter.IMain$Request$$anonfun$typeMap$1.apply(IMain.scala:1004)
        at scala.reflect.internal.util.Collections$$anonfun$mapFrom$1.apply(Collections.scala:182)
        at scala.reflect.internal.util.Collections$$anonfun$mapFrom$1.apply(Collections.scala:182)
        at scala.collection.immutable.List.map(List.scala:273)
        at scala.reflect.internal.util.Collections$class.mapFrom(Collections.scala:182)
        at scala.reflect.internal.SymbolTable.mapFrom(SymbolTable.scala:16)
        at scala.tools.nsc.interpreter.IMain$Request.typeMap(IMain.scala:1004)
        at scala.tools.nsc.interpreter.IMain$Request.typeOf$lzycompute(IMain.scala:1009)
        at scala.tools.nsc.interpreter.IMain$Request.typeOf(IMain.scala:1009)
        at scala.tools.nsc.interpreter.IMain$Request.compile$lzycompute(IMain.scala:978)
        at scala.tools.nsc.interpreter.IMain$Request.compile(IMain.scala:971)
        at scala.tools.nsc.interpreter.IMain.compile(IMain.scala:568)
        at scala.tools.nsc.interpreter.IMain.interpret(IMain.scala:556)
        at scala.tools.nsc.interpreter.IMain.interpret(IMain.scala:554)
        at scala.tools.nsc.interpreter.ILoop.reallyInterpret$1(ILoop.scala:802)
        at scala.tools.nsc.interpreter.ILoop.interpretStartingWith(ILoop.scala:847)
        at scala.tools.nsc.interpreter.ILoop.command(ILoop.scala:705)
        at scala.tools.nsc.interpreter.ILoop.processLine(ILoop.scala:404)
        at scala.tools.nsc.interpreter.ILoop.loop(ILoop.scala:430)
        at scala.tools.nsc.interpreter.ILoop$$anonfun$process$1.apply$mcZ$sp(ILoop.scala:918)
        at scala.tools.nsc.interpreter.ILoop$$anonfun$process$1.apply(ILoop.scala:904)
        at scala.tools.nsc.interpreter.ILoop$$anonfun$process$1.apply(ILoop.scala:904)
        at scala.reflect.internal.util.ScalaClassLoader$.savingContextLoader(ScalaClassLoader.scala:97)
        at scala.tools.nsc.interpreter.ILoop.process(ILoop.scala:904)
        at scala.tools.nsc.interpreter.ILoop.main(ILoop.scala:929)
        at xsbt.ConsoleInterface.run(ConsoleInterface.scala:62)
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
        at java.lang.reflect.Method.invoke(Method.java:483)
        at sbt.compiler.AnalyzingCompiler.call(AnalyzingCompiler.scala:101)
        at sbt.compiler.AnalyzingCompiler.console(AnalyzingCompiler.scala:76)
        at sbt.Console.sbt$Console$$console0$1(Console.scala:22)
        at sbt.Console$$anonfun$apply$2$$anonfun$apply$1.apply$mcV$sp(Console.scala:23)
        at sbt.Console$$anonfun$apply$2$$anonfun$apply$1.apply(Console.scala:23)
        at sbt.Console$$anonfun$apply$2$$anonfun$apply$1.apply(Console.scala:23)
        at sbt.Logger$$anon$4.apply(Logger.scala:85)
        at sbt.TrapExit$App.run(TrapExit.scala:248)
        at java.lang.Thread.run(Thread.java:745)
java.lang.RuntimeException: error reading Scala signature of $line5.$read: assertion failed: unsafe symbol $anon$1 (child of object $iw) in runtime reflection universe
        at scala.reflect.internal.pickling.UnPickler.unpickle(UnPickler.scala:46)
        at scala.reflect.runtime.JavaMirrors$JavaMirror.unpickleClass(JavaMirrors.scala:615)
        at scala.reflect.runtime.SymbolLoaders$TopClassCompleter$$anonfun$complete$1.apply$mcV$sp(SymbolLoaders.scala:28)
        at scala.reflect.runtime.SymbolLoaders$TopClassCompleter$$anonfun$complete$1.apply(SymbolLoaders.scala:25)
        at scala.reflect.runtime.SymbolLoaders$TopClassCompleter$$anonfun$complete$1.apply(SymbolLoaders.scala:25)
        at scala.reflect.internal.SymbolTable.slowButSafeEnteringPhaseNotLaterThan(SymbolTable.scala:263)
        at scala.reflect.runtime.SymbolLoaders$TopClassCompleter.complete(SymbolLoaders.scala:25)
        at scala.reflect.runtime.SymbolLoaders$TopClassCompleter.load(SymbolLoaders.scala:33)
        at scala.reflect.internal.Symbols$Symbol.exists(Symbols.scala:1050)
        at scala.reflect.internal.Importers$StandardImporter.recreateOrRelink$1(Importers.scala:163)
        at scala.reflect.internal.Importers$StandardImporter.importSymbol(Importers.scala:210)
        at scala.reflect.internal.Importers$StandardImporter.importSymbol(Importers.scala:29)
        at scala.tools.nsc.interpreter.IMain.getModuleIfDefined(IMain.scala:173)
        at scala.tools.nsc.interpreter.IMain.readRootPath(IMain.scala:296)
        at scala.tools.nsc.interpreter.IMain$ReadEvalPrint.resolvePathToSymbol(IMain.scala:806)
        at scala.tools.nsc.interpreter.IMain$Request.resultSymbol$lzycompute(IMain.scala:997)
        at scala.tools.nsc.interpreter.IMain$Request.resultSymbol(IMain.scala:997)
        at scala.tools.nsc.interpreter.IMain$Request$$anonfun$typeMap$1.apply(IMain.scala:1004)
        at scala.tools.nsc.interpreter.IMain$Request$$anonfun$typeMap$1.apply(IMain.scala:1004)
        at scala.reflect.internal.util.Collections$$anonfun$mapFrom$1.apply(Collections.scala:182)
        at scala.reflect.internal.util.Collections$$anonfun$mapFrom$1.apply(Collections.scala:182)
        at scala.collection.immutable.List.map(List.scala:273)
        at scala.reflect.internal.util.Collections$class.mapFrom(Collections.scala:182)
        at scala.reflect.internal.SymbolTable.mapFrom(SymbolTable.scala:16)
        at scala.tools.nsc.interpreter.IMain$Request.typeMap(IMain.scala:1004)
        at scala.tools.nsc.interpreter.IMain$Request.typeOf$lzycompute(IMain.scala:1009)
        at scala.tools.nsc.interpreter.IMain$Request.typeOf(IMain.scala:1009)
        at scala.tools.nsc.interpreter.IMain$Request.compile$lzycompute(IMain.scala:978)
        at scala.tools.nsc.interpreter.IMain$Request.compile(IMain.scala:971)
        at scala.tools.nsc.interpreter.IMain.compile(IMain.scala:568)
        at scala.tools.nsc.interpreter.IMain.interpret(IMain.scala:556)
        at scala.tools.nsc.interpreter.IMain.interpret(IMain.scala:554)
        at scala.tools.nsc.interpreter.ILoop.reallyInterpret$1(ILoop.scala:802)
        at scala.tools.nsc.interpreter.ILoop.interpretStartingWith(ILoop.scala:847)
        at scala.tools.nsc.interpreter.ILoop.command(ILoop.scala:705)
        at scala.tools.nsc.interpreter.ILoop.processLine(ILoop.scala:404)
        at scala.tools.nsc.interpreter.ILoop.loop(ILoop.scala:430)
        at scala.tools.nsc.interpreter.ILoop$$anonfun$process$1.apply$mcZ$sp(ILoop.scala:918)
        at scala.tools.nsc.interpreter.ILoop$$anonfun$process$1.apply(ILoop.scala:904)
        at scala.tools.nsc.interpreter.ILoop$$anonfun$process$1.apply(ILoop.scala:904)
        at scala.reflect.internal.util.ScalaClassLoader$.savingContextLoader(ScalaClassLoader.scala:97)
        at scala.tools.nsc.interpreter.ILoop.process(ILoop.scala:904)
        at scala.tools.nsc.interpreter.ILoop.main(ILoop.scala:929)
        at xsbt.ConsoleInterface.run(ConsoleInterface.scala:62)
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
        at java.lang.reflect.Method.invoke(Method.java:483)
        at sbt.compiler.AnalyzingCompiler.call(AnalyzingCompiler.scala:101)
        at sbt.compiler.AnalyzingCompiler.console(AnalyzingCompiler.scala:76)
        at sbt.Console.sbt$Console$$console0$1(Console.scala:22)
        at sbt.Console$$anonfun$apply$2$$anonfun$apply$1.apply$mcV$sp(Console.scala:23)
        at sbt.Console$$anonfun$apply$2$$anonfun$apply$1.apply(Console.scala:23)
        at sbt.Console$$anonfun$apply$2$$anonfun$apply$1.apply(Console.scala:23)
        at sbt.Logger$$anon$4.apply(Logger.scala:85)
        at sbt.TrapExit$App.run(TrapExit.scala:248)
        at java.lang.Thread.run(Thread.java:745)

That entry seems to have slain the compiler.  Shall I replay
your session? I can re-run each line except the last one.
[y/n]
scabug commented 9 years ago

Imported From: https://issues.scala-lang.org/browse/SI-9163?orig=1 Reporter: @soc Affected Versions: 2.11.5

scabug commented 9 years ago

@som-snytt said:

scala> new { object b }
res0: AnyRef{object b} = $anon$1@22b48b21

scala> res0.b
warning: there was one feature warning; re-run with -feature for details
java.lang.AssertionError: assertion failed: unsafe symbol $anon$1 (child of object $iw) in runtime reflection universe
scabug commented 9 years ago

@paulp said:

// That isn't even a type.
AnyRef { object b }

// It should infer this.
AnyRef { val b: AnyRef }
hrhino commented 6 years ago

FWIW this doesn't crash in 2.13.0-M3, but it still infers the invalid (?) type A { object b }.

Also this, if that turns out to be valid somehow:

scala> (new { object b }) : (AnyRef { val b: Any })
<console>:37: error: type mismatch;
 found   : AnyRef{object b}
 required: AnyRef{val b: Any}
       (new { object b }) : (AnyRef { val b: Any })
        ^