Closed
Description
This has started crashing in 3.2.0-RC1-bin-20220422-fd6ac43-NIGHTLY. Example is from https://docs.scala-lang.org/scala3/reference/metaprogramming/macros.html#example-expansion
Compiler version
3.2.0-RC1-bin-20220422-fd6ac43-NIGHTLY (first crash)
Minimized code
import scala.quoted.*
def map[T](arr: Expr[Array[T]], f: Expr[T] => Expr[Unit])(using Type[T], Quotes): Expr[Unit] = '{}
def sum(arr: Expr[Array[Int]])(using Quotes): Expr[Int] = '{
var sum = 0
${ map(arr, x => '{sum += $x}) }
sum
}
Output (click arrow to expand)
-- Error: /Users/jamie/workspace/dotty/local/foo/App.scala:15:6 ----------------
15 | var sum = 0
| ^
|pickling reference to as yet undefined (sum : Int) with symbol variable sum
exception occurred while compiling /Users/jamie/workspace/dotty/local/foo/App.scala
Exception in thread "main" java.lang.AssertionError: assertion failed: unresolved symbols: variable sum (line 14) #14827 when pickling /Users/jamie/workspace/dotty/local/foo/App.scala
java.lang.AssertionError: assertion failed: unresolved symbols: variable sum (line 14) #14827 when pickling /Users/jamie/workspace/dotty/local/foo/App.scala while compiling /Users/jamie/workspace/dotty/local/foo/App.scala
at scala.runtime.Scala3RunTime$.assertFailed(Scala3RunTime.scala:8)
at dotty.tools.dotc.core.tasty.TreePickler.pickle(TreePickler.scala:770)
at dotty.tools.dotc.quoted.PickledQuotes$.pickle(PickledQuotes.scala:220)
at dotty.tools.dotc.quoted.PickledQuotes$.pickleQuote(PickledQuotes.scala:32)
at dotty.tools.dotc.transform.PickleQuotes$.pickleAsTasty$1(PickleQuotes.scala:294)
at dotty.tools.dotc.transform.PickleQuotes$.apply(PickleQuotes.scala:380)
at dotty.tools.dotc.transform.PickleQuotes$$anon$1.transform(PickleQuotes.scala:106)
at dotty.tools.dotc.ast.Trees$Instance$TreeMap.transform$$anonfun$1(Trees.scala:1513)
at scala.collection.immutable.List.mapConserve(List.scala:472)
at dotty.tools.dotc.ast.Trees$Instance$TreeMap.transform(Trees.scala:1513)
at dotty.tools.dotc.ast.Trees$Instance$TreeMap.transform(Trees.scala:1418)
at dotty.tools.dotc.transform.MacroTransform$Transformer.transform(MacroTransform.scala:49)
at dotty.tools.dotc.transform.PickleQuotes$$anon$1.transform(PickleQuotes.scala:123)
at dotty.tools.dotc.ast.Trees$Instance$TreeMap.transform$$anonfun$1(Trees.scala:1513)
at scala.collection.immutable.List.mapConserve(List.scala:472)
at dotty.tools.dotc.ast.Trees$Instance$TreeMap.transform(Trees.scala:1513)
at dotty.tools.dotc.ast.Trees$Instance$TreeMap.transform(Trees.scala:1418)
at dotty.tools.dotc.transform.MacroTransform$Transformer.transform(MacroTransform.scala:49)
at dotty.tools.dotc.transform.PickleQuotes$$anon$1.transform(PickleQuotes.scala:123)
at dotty.tools.dotc.ast.Trees$Instance$TreeMap.transform$$anonfun$1(Trees.scala:1513)
at scala.collection.immutable.List.mapConserve(List.scala:472)
at dotty.tools.dotc.ast.Trees$Instance$TreeMap.transform(Trees.scala:1513)
at dotty.tools.dotc.ast.Trees$Instance$TreeMap.transform(Trees.scala:1418)
at dotty.tools.dotc.transform.MacroTransform$Transformer.transform(MacroTransform.scala:49)
at dotty.tools.dotc.transform.PickleQuotes$$anon$1.transform(PickleQuotes.scala:123)
at dotty.tools.dotc.ast.Trees$Instance$TreeMap.transform(Trees.scala:1412)
at dotty.tools.dotc.transform.MacroTransform$Transformer.transform(MacroTransform.scala:49)
at dotty.tools.dotc.transform.PickleQuotes$$anon$1.transform(PickleQuotes.scala:123)
at dotty.tools.dotc.ast.Trees$Instance$TreeMap.transform(Trees.scala:1420)
at dotty.tools.dotc.transform.MacroTransform$Transformer.transform(MacroTransform.scala:49)
at dotty.tools.dotc.transform.PickleQuotes$$anon$1.transform(PickleQuotes.scala:123)
at dotty.tools.dotc.ast.Trees$Instance$TreeMap.transform(Trees.scala:1484)
at dotty.tools.dotc.transform.MacroTransform$Transformer.transform(MacroTransform.scala:40)
at dotty.tools.dotc.transform.PickleQuotes$$anon$1.transform(PickleQuotes.scala:123)
at dotty.tools.dotc.ast.tpd$TreeMapWithPreciseStatContexts.loop$2(tpd.scala:1212)
at dotty.tools.dotc.ast.tpd$TreeMapWithPreciseStatContexts.transformStats(tpd.scala:1212)
at dotty.tools.dotc.ast.tpd$TreeMapWithPreciseStatContexts.transformBlock(tpd.scala:1217)
at dotty.tools.dotc.ast.Trees$Instance$TreeMap.transform(Trees.scala:1432)
at dotty.tools.dotc.transform.MacroTransform$Transformer.transform(MacroTransform.scala:49)
at dotty.tools.dotc.transform.PickleQuotes$$anon$1.transform(PickleQuotes.scala:123)
at dotty.tools.dotc.ast.Trees$Instance$TreeMap.transform(Trees.scala:1412)
at dotty.tools.dotc.transform.MacroTransform$Transformer.transform(MacroTransform.scala:49)
at dotty.tools.dotc.transform.PickleQuotes$$anon$1.transform(PickleQuotes.scala:123)
at dotty.tools.dotc.ast.Trees$Instance$TreeMap.transform(Trees.scala:1418)
at dotty.tools.dotc.transform.MacroTransform$Transformer.transform(MacroTransform.scala:49)
at dotty.tools.dotc.transform.PickleQuotes$$anon$1.transform(PickleQuotes.scala:123)
at dotty.tools.dotc.ast.Trees$Instance$TreeMap.transform(Trees.scala:1484)
at dotty.tools.dotc.transform.MacroTransform$Transformer.transform(MacroTransform.scala:40)
at dotty.tools.dotc.transform.PickleQuotes$$anon$1.transform(PickleQuotes.scala:123)
at dotty.tools.dotc.ast.tpd$TreeMapWithPreciseStatContexts.loop$2(tpd.scala:1212)
at dotty.tools.dotc.ast.tpd$TreeMapWithPreciseStatContexts.transformStats(tpd.scala:1212)
at dotty.tools.dotc.ast.tpd$TreeMapWithPreciseStatContexts.transformBlock(tpd.scala:1217)
at dotty.tools.dotc.ast.Trees$Instance$TreeMap.transform(Trees.scala:1432)
at dotty.tools.dotc.transform.MacroTransform$Transformer.transform(MacroTransform.scala:49)
at dotty.tools.dotc.transform.PickleQuotes$$anon$1.transform(PickleQuotes.scala:123)
at dotty.tools.dotc.ast.Trees$Instance$TreeMap.transform$$anonfun$1(Trees.scala:1513)
at scala.collection.immutable.List.mapConserve(List.scala:472)
at dotty.tools.dotc.ast.Trees$Instance$TreeMap.transform(Trees.scala:1513)
at dotty.tools.dotc.ast.Trees$Instance$TreeMap.transform(Trees.scala:1418)
at dotty.tools.dotc.transform.MacroTransform$Transformer.transform(MacroTransform.scala:49)
at dotty.tools.dotc.transform.PickleQuotes$$anon$1.transform(PickleQuotes.scala:123)
at dotty.tools.dotc.ast.Trees$Instance$TreeMap.transform(Trees.scala:1484)
at dotty.tools.dotc.transform.MacroTransform$Transformer.transform(MacroTransform.scala:40)
at dotty.tools.dotc.transform.PickleQuotes$$anon$1.transform(PickleQuotes.scala:123)
at dotty.tools.dotc.ast.tpd$TreeMapWithPreciseStatContexts.loop$2(tpd.scala:1212)
at dotty.tools.dotc.ast.tpd$TreeMapWithPreciseStatContexts.transformStats(tpd.scala:1212)
at dotty.tools.dotc.ast.tpd$TreeMapWithPreciseStatContexts.transformBlock(tpd.scala:1217)
at dotty.tools.dotc.ast.Trees$Instance$TreeMap.transform(Trees.scala:1432)
at dotty.tools.dotc.transform.MacroTransform$Transformer.transform(MacroTransform.scala:49)
at dotty.tools.dotc.transform.PickleQuotes$$anon$1.transform(PickleQuotes.scala:123)
at dotty.tools.dotc.ast.Trees$Instance$TreeMap.transform$$anonfun$1(Trees.scala:1513)
at scala.collection.immutable.List.mapConserve(List.scala:472)
at dotty.tools.dotc.ast.Trees$Instance$TreeMap.transform(Trees.scala:1513)
at dotty.tools.dotc.ast.Trees$Instance$TreeMap.transform(Trees.scala:1418)
at dotty.tools.dotc.transform.MacroTransform$Transformer.transform(MacroTransform.scala:49)
at dotty.tools.dotc.transform.PickleQuotes$$anon$1.transform(PickleQuotes.scala:123)
at dotty.tools.dotc.ast.Trees$Instance$TreeMap.transform(Trees.scala:1418)
at dotty.tools.dotc.transform.MacroTransform$Transformer.transform(MacroTransform.scala:49)
at dotty.tools.dotc.transform.PickleQuotes$$anon$1.transform(PickleQuotes.scala:123)
at dotty.tools.dotc.ast.Trees$Instance$TreeMap.transform(Trees.scala:1484)
at dotty.tools.dotc.transform.MacroTransform$Transformer.transform(MacroTransform.scala:40)
at dotty.tools.dotc.transform.PickleQuotes$$anon$1.transform(PickleQuotes.scala:123)
at dotty.tools.dotc.ast.tpd$TreeMapWithPreciseStatContexts.loop$2(tpd.scala:1212)
at dotty.tools.dotc.ast.tpd$TreeMapWithPreciseStatContexts.transformStats(tpd.scala:1212)
at dotty.tools.dotc.ast.tpd$TreeMapWithPreciseStatContexts.transformBlock(tpd.scala:1217)
at dotty.tools.dotc.ast.Trees$Instance$TreeMap.transform(Trees.scala:1432)
at dotty.tools.dotc.transform.MacroTransform$Transformer.transform(MacroTransform.scala:49)
at dotty.tools.dotc.transform.PickleQuotes$$anon$1.transform(PickleQuotes.scala:123)
at dotty.tools.dotc.ast.tpd$TreeMapWithPreciseStatContexts.transformBlock$$anonfun$1$$anonfun$1(tpd.scala:1217)
at dotty.tools.dotc.ast.tpd$TreeMapWithPreciseStatContexts.loop$2(tpd.scala:1199)
at dotty.tools.dotc.ast.tpd$TreeMapWithPreciseStatContexts.transformStats(tpd.scala:1212)
at dotty.tools.dotc.ast.tpd$TreeMapWithPreciseStatContexts.transformBlock(tpd.scala:1217)
at dotty.tools.dotc.ast.Trees$Instance$TreeMap.transform(Trees.scala:1432)
at dotty.tools.dotc.transform.MacroTransform$Transformer.transform(MacroTransform.scala:49)
at dotty.tools.dotc.transform.PickleQuotes$$anon$1.transform(PickleQuotes.scala:123)
at dotty.tools.dotc.ast.Trees$Instance$TreeMap.transform(Trees.scala:1412)
at dotty.tools.dotc.transform.MacroTransform$Transformer.transform(MacroTransform.scala:49)
at dotty.tools.dotc.transform.PickleQuotes$$anon$1.transform(PickleQuotes.scala:123)
at dotty.tools.dotc.ast.Trees$Instance$TreeMap.transform(Trees.scala:1418)
at dotty.tools.dotc.transform.MacroTransform$Transformer.transform(MacroTransform.scala:49)
at dotty.tools.dotc.transform.PickleQuotes$$anon$1.transform(PickleQuotes.scala:123)
at dotty.tools.dotc.ast.Trees$Instance$TreeMap.transform(Trees.scala:1484)
at dotty.tools.dotc.transform.MacroTransform$Transformer.transform(MacroTransform.scala:40)
at dotty.tools.dotc.transform.PickleQuotes$$anon$1.transform(PickleQuotes.scala:123)
at dotty.tools.dotc.ast.tpd$TreeMapWithPreciseStatContexts.loop$2(tpd.scala:1212)
at dotty.tools.dotc.ast.tpd$TreeMapWithPreciseStatContexts.transformStats(tpd.scala:1212)
at dotty.tools.dotc.ast.tpd$TreeMapWithPreciseStatContexts.transformBlock(tpd.scala:1217)
at dotty.tools.dotc.ast.Trees$Instance$TreeMap.transform(Trees.scala:1432)
at dotty.tools.dotc.transform.MacroTransform$Transformer.transform(MacroTransform.scala:49)
at dotty.tools.dotc.transform.PickleQuotes$$anon$1.transform(PickleQuotes.scala:123)
at dotty.tools.dotc.ast.Trees$Instance$TreeMap.transform$$anonfun$1(Trees.scala:1513)
at scala.collection.immutable.List.mapConserve(List.scala:472)
at dotty.tools.dotc.ast.Trees$Instance$TreeMap.transform(Trees.scala:1513)
at dotty.tools.dotc.ast.Trees$Instance$TreeMap.transform(Trees.scala:1418)
at dotty.tools.dotc.transform.MacroTransform$Transformer.transform(MacroTransform.scala:49)
at dotty.tools.dotc.transform.PickleQuotes$$anon$1.transform(PickleQuotes.scala:123)
at dotty.tools.dotc.ast.Trees$Instance$TreeMap.transform(Trees.scala:1484)
at dotty.tools.dotc.transform.MacroTransform$Transformer.transform(MacroTransform.scala:40)
at dotty.tools.dotc.transform.PickleQuotes$$anon$1.transform(PickleQuotes.scala:123)
at dotty.tools.dotc.ast.tpd$TreeMapWithPreciseStatContexts.loop$2(tpd.scala:1212)
at dotty.tools.dotc.ast.tpd$TreeMapWithPreciseStatContexts.transformStats(tpd.scala:1212)
at dotty.tools.dotc.ast.tpd$TreeMapWithPreciseStatContexts.transformStats(tpd.scala:1214)
at dotty.tools.dotc.transform.MacroTransform$Transformer.transform(MacroTransform.scala:47)
at dotty.tools.dotc.transform.PickleQuotes$$anon$1.transform(PickleQuotes.scala:123)
at dotty.tools.dotc.ast.Trees$Instance$TreeMap.transform(Trees.scala:1486)
at dotty.tools.dotc.transform.MacroTransform$Transformer.transform(MacroTransform.scala:40)
at dotty.tools.dotc.transform.PickleQuotes$$anon$1.transform(PickleQuotes.scala:123)
at dotty.tools.dotc.ast.tpd$TreeMapWithPreciseStatContexts.loop$2(tpd.scala:1212)
at dotty.tools.dotc.ast.tpd$TreeMapWithPreciseStatContexts.transformStats(tpd.scala:1212)
at dotty.tools.dotc.ast.tpd$TreeMapWithPreciseStatContexts.transformStats(tpd.scala:1214)
at dotty.tools.dotc.ast.Trees$Instance$TreeMap.transform(Trees.scala:1494)
at dotty.tools.dotc.transform.MacroTransform$Transformer.transform(MacroTransform.scala:40)
at dotty.tools.dotc.transform.PickleQuotes$$anon$1.transform(PickleQuotes.scala:123)
at dotty.tools.dotc.transform.MacroTransform.run(MacroTransform.scala:18)
at dotty.tools.dotc.transform.PickleQuotes.run(PickleQuotes.scala:96)
at dotty.tools.dotc.core.Phases$Phase.runOn$$anonfun$1(Phases.scala:311)
at scala.collection.immutable.List.map(List.scala:246)
at dotty.tools.dotc.core.Phases$Phase.runOn(Phases.scala:312)
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)