- Notifications
You must be signed in to change notification settings - Fork 1.1k
Closed
Milestone
Description
I was trying to enable explicit nulls for all compiling. But I get several errors in BootstrappedOnlyCompilationTests.picklingWithCompiler test. See #14946
Minimized code
I am able to minimize some of the errors:
class C { def g: String | Null = ??? def f = import scala.language.unsafeNulls if true then "" else g } Output
scalac -Xprint-types -Ytest-pickler -Yexplicit-nulls -color never Stest.scala
exception occurred while compiling Stest.scala class dotty.tools.dotc.reporting.Diagnostic$Error at ?: pickling difference for class C in Stest.scala, for details: diff before-pickling.txt after-pickling.txt while compiling Stest.scalaException in thread "main" class dotty.tools.dotc.reporting.Diagnostic$Error at ?: pickling difference for class C in Stest.scala, for details: diff before-pickling.txt after-pickling.txt at dotty.tools.dotc.report$.error(report.scala:63) at dotty.tools.dotc.transform.Pickler.testSame(Pickler.scala:151) at dotty.tools.dotc.transform.Pickler.testUnpickler$$anonfun$2(Pickler.scala:138) at scala.runtime.function.JProcedure1.apply(JProcedure1.java:15) at scala.runtime.function.JProcedure1.apply(JProcedure1.java:10) at scala.collection.IterableOnceOps.foreach(IterableOnce.scala:563) at scala.collection.IterableOnceOps.foreach$(IterableOnce.scala:561) at scala.collection.AbstractIterable.foreach(Iterable.scala:926) at scala.collection.IterableOps$WithFilter.foreach(Iterable.scala:896) at dotty.tools.dotc.transform.Pickler.testUnpickler(Pickler.scala:139) at dotty.tools.dotc.transform.Pickler.runOn(Pickler.scala:122) at dotty.tools.dotc.Run.runPhases$1$$anonfun$1(Run.scala:225) at scala.runtime.function.JProcedure1.apply(JProcedure1.java:15) at scala.runtime.function.JProcedure1.apply(JProcedure1.java:10) at scala.collection.ArrayOps$.foreach$extension(ArrayOps.scala:1328) at dotty.tools.dotc.Run.runPhases$1(Run.scala:236) at dotty.tools.dotc.Run.compileUnits$$anonfun$1(Run.scala:244) at dotty.tools.dotc.Run.compileUnits$$anonfun$adapted$1(Run.scala:253) at dotty.tools.dotc.util.Stats$.maybeMonitored(Stats.scala:68) at dotty.tools.dotc.Run.compileUnits(Run.scala:253) at dotty.tools.dotc.Run.compileSources(Run.scala:186) at dotty.tools.dotc.Run.compile(Run.scala:170) at dotty.tools.dotc.Driver.doCompile(Driver.scala:35) at dotty.tools.dotc.Driver.process(Driver.scala:195) at dotty.tools.dotc.Driver.process(Driver.scala:163) at dotty.tools.dotc.Driver.process(Driver.scala:175) at dotty.tools.dotc.Driver.main(Driver.scala:205) at dotty.tools.dotc.Main.main(Main.scala) before-pickling.txt
<package <empty>.type { @SourceFile(<"Stest.scala":("Stest.scala" : String)>) class C() extends < <<new Object:Object>:((): Object)> ():Object> { def g: scala.Predef.String | scala.Null = <scala.Predef.???:=> scala.Nothing> def f: scala.Predef.String = < { <import <<scala:scala>.language:scala.language>.unsafeNulls: <import>.type > <if <true:(true : scala.Boolean)> then <"":("" : String)> else <<this:(C.this : C)>.g:=> scala.Predef.String | scala.Null> :String> } :String> } }:<empty>.type> diff before-pickling.txt after-pickling.txt
15c15 < :String> --- > :String | scala.Null> 17c17 < :String> --- > :String | scala.Null> It seems the if expression gets different types before and after pickling?
He-Pin