scala / scala3

The Scala 3 compiler, also known as Dotty.
https://dotty.epfl.ch
Apache License 2.0
5.85k stars 1.06k forks source link

java.lang.AssertionError: assertion failed: unresolved symbols: in TreePickler in inline method with varargs #13434

Open dlwh opened 3 years ago

dlwh commented 3 years ago

(entirely possible this isn't intended to work but I imagine this shouldn't be an assertion error crash)

Compiler version

3.0.2-RC2

Minimized code

object Schema:
  inline transparent def of(inline t: Int, inline ts: Int*) =
    inline ts.size match
      case 0 => ???
      case _ => ???

@main def Test() =
  val s1 = Schema.of(32)

Output (click arrow to expand)

```scala [error] java.lang.AssertionError: assertion failed: unresolved symbols: value ts$proxy1 in object Foo (line 8) #51242 when pickling rs$line$1 [error] at scala.runtime.Scala3RunTime$.assertFailed(Scala3RunTime.scala:8) [error] at dotty.tools.dotc.core.tasty.TreePickler.pickle(TreePickler.scala:788) [error] at dotty.tools.dotc.transform.Pickler.run$$anonfun$3$$anonfun$2(Pickler.scala:69) [error] at scala.runtime.function.JProcedure1.apply(JProcedure1.java:15) [error] at scala.runtime.function.JProcedure1.apply(JProcedure1.java:10) [error] at scala.collection.immutable.List.foreach(List.scala:333) [error] at dotty.tools.dotc.transform.Pickler.run$$anonfun$1(Pickler.scala:106) [error] at scala.runtime.function.JProcedure1.apply(JProcedure1.java:15) [error] at scala.runtime.function.JProcedure1.apply(JProcedure1.java:10) [error] at scala.collection.immutable.List.foreach(List.scala:333) [error] at dotty.tools.dotc.transform.Pickler.run(Pickler.scala:106) [error] at dotty.tools.dotc.core.Phases$Phase.runOn$$anonfun$1(Phases.scala:303) [error] at scala.collection.immutable.List.map(List.scala:246) [error] at dotty.tools.dotc.core.Phases$Phase.runOn(Phases.scala:304) [error] at dotty.tools.dotc.transform.Pickler.runOn(Pickler.scala:111) [error] at dotty.tools.dotc.Run.runPhases$4$$anonfun$4(Run.scala:205) [error] at scala.runtime.function.JProcedure1.apply(JProcedure1.java:15) [error] at scala.runtime.function.JProcedure1.apply(JProcedure1.java:10) [error] at scala.collection.ArrayOps$.foreach$extension(ArrayOps.scala:1323) [error] at dotty.tools.dotc.Run.runPhases$5(Run.scala:216) [error] at dotty.tools.dotc.Run.compileUnits$$anonfun$1(Run.scala:224) [error] at scala.runtime.java8.JFunction0$mcV$sp.apply(JFunction0$mcV$sp.scala:18) [error] at dotty.tools.dotc.util.Stats$.maybeMonitored(Stats.scala:67) [error] at dotty.tools.dotc.Run.compileUnits(Run.scala:231) [error] at dotty.tools.dotc.Run.compileUnits(Run.scala:172) [error] at dotty.tools.repl.ReplCompiler.runCompilationUnit(ReplCompiler.scala:152) [error] at dotty.tools.repl.ReplCompiler.compile(ReplCompiler.scala:162) [error] at dotty.tools.repl.ReplDriver.compile(ReplDriver.scala:250) [error] at dotty.tools.repl.ReplDriver.interpret(ReplDriver.scala:213) [error] at dotty.tools.repl.ReplDriver.loop$1(ReplDriver.scala:147) [error] at dotty.tools.repl.ReplDriver.runUntilQuit$$anonfun$1(ReplDriver.scala:150) [error] at dotty.tools.repl.ReplDriver.withRedirectedOutput(ReplDriver.scala:169) [error] at dotty.tools.repl.ReplDriver.runUntilQuit(ReplDriver.scala:150) [error] at xsbt.ConsoleInterface.run(ConsoleInterface.java:52) [error] at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) [error] at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:78) [error] at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) [error] at java.base/java.lang.reflect.Method.invoke(Method.java:567) [error] at sbt.internal.inc.AnalyzingCompiler.invoke(AnalyzingCompiler.scala:329) [error] at sbt.internal.inc.AnalyzingCompiler.console(AnalyzingCompiler.scala:233) [error] at sbt.Console.console0$1(Console.scala:64) [error] at sbt.Console.$anonfun$apply$5(Console.scala:74) [error] at scala.runtime.java8.JFunction0$mcV$sp.apply(JFunction0$mcV$sp.java:23) [error] at sbt.util.InterfaceUtil$$anon$1.get(InterfaceUtil.scala:17) [error] at sbt.TrapExit$App.run(TrapExit.scala:258) [error] at java.base/java.lang.Thread.run(Thread.java:831) [error] Nonzero exit code: 1 ```
nicolasstucki commented 3 years ago

The inline match is failing to generate the correct code

val $scrutinee1: (ts$proxy1.size : => Int) = ([32 : Int]*).size
???

We need to widen the type ts$proxy1.size