scala3 icon indicating copy to clipboard operation
scala3 copied to clipboard

Possible regression to 3.3.1: unhandled exception while running pickleQuotes

Open hmf opened this issue 1 year ago • 4 comments

Compiler version

Was working in 3.3.0 but breaks in 3.3.1

Minimized code

Code taken from macro file that breaks (only very small part of it).

  import scala.quoted.*

  sealed trait IMap
  case object IEmpT extends IMap
  case class ICons[K <: Singleton, V, T <: IMap](key: K, value: V, tail: T) extends IMap

  type IEmpT = IEmpT.type
  // transparent inline def filterFast0[I <:IMap](inline l: I, q: String): Any = ${ filterFast0Impl('l,'q) }

  def filterX[I <: IMap, K](x: Expr[I], q: Expr[K])(using tp1: Type[I], tp2: Type[K], tq: Quotes): Expr[_ <: IMap] =
    import quotes.reflect.*
    x match
      case '{ $_ : IEmpT } => 
        '{ IEmpT }
      case '{ $y : ICons[k1,v1,t1] } => 
        val k: Expr[k1] = '{$y.key}
        val v: Expr[v1] = '{$y.value}
        val t: Expr[t1] = '{$y.tail}
        val tt =  filterX(t, q)
        val equals = '{$k == $q} 
        if equals.valueOrAbort
        then
          // Error here
          '{ ICons($y.key, $y.value, $tt) }
          // '{ ICons[k1, v1, IMap]($y.key, $y.value, $tt) }
        else
          tt
      case _ =>
        report.errorAndAbort(s"Cannot process ${Type.show[I]}: ${x.isExprOf[ICons[_,_,_]]}. Aborting")

Output

Error from compilation

unhandled exception while running pickleQuotes on /home/hmf/VSCodeProjects/sploty/meta/src/data/Macros4.scala

An unhandled exception was thrown in the compiler. Please file a crash report here: https://github.com/lampepfl/dotty/issues/new/choose

 while compiling: <no file>
    during phase: <no phase>
            mode: Mode(ImplicitsEnabled)
 library version: version 2.13.10
compiler version: version 3.3.1
        settings: -Yretain-trees true -bootclasspath /home/hmf/.cache/coursier/v1/https/repo1.maven.org/maven2/org/scala-lang/scala-library/2.13.10/scala-library-2.13.10.jar -classpath /home/hmf/.cache/coursier/v1/https/repo1.maven.org/maven2/org/scala-lang/scala3-library_3/3.3.1/scala3-library_3-3.3.1.jar:/home/hmf/VSCodeProjects/sploty/meta/compile-resources:/home/hmf/VSCodeProjects/sploty/out/meta/compile.dest/classes -d /home/hmf/VSCodeProjects/sploty/out/meta/compile.dest/classes -deprecation true -explain true -feature true

            tree: EmptyTree
   tree position: :<unknown>
       tree type: <notype>
          symbol: val <none>
       call site: package <root> in module class <root>

== Source file context for tree position ==

[error] ## Exception when compiling 39 sources to /home/hmf/VSCodeProjects/sploty/out/meta/compile.dest/classes [error] java.lang.AssertionError: assertion failed: unresolved symbols: type k1 (line 208) #40655, type v1 (line 208) #40657, type t1 (line 208) #40659, type I (line 188) #40640 when pickling /home/hmf/VSCodeProjects/sploty/meta/src/data/Macros4.scala [error] scala.runtime.Scala3RunTime$.assertFailed(Scala3RunTime.scala:8) [error] dotty.tools.dotc.core.tasty.TreePickler.pickle(TreePickler.scala:829) [error] dotty.tools.dotc.quoted.PickledQuotes$.pickle(PickledQuotes.scala:221) [error] dotty.tools.dotc.quoted.PickledQuotes$.pickleQuote(PickledQuotes.scala:33) [error] dotty.tools.dotc.transform.PickleQuotes$.pickleAsTasty$1(PickleQuotes.scala:332) [error] dotty.tools.dotc.transform.PickleQuotes$.pickle(PickleQuotes.scala:416) [error] dotty.tools.dotc.transform.PickleQuotes$$anon$1.transform(PickleQuotes.scala:99) [error] dotty.tools.dotc.ast.Trees$Instance$TreeMap.transform(Trees.scala:1520) [error] dotty.tools.dotc.transform.MacroTransform$Transformer.transform(MacroTransform.scala:49) [error] dotty.tools.dotc.transform.PickleQuotes$$anon$1.transform(PickleQuotes.scala:103) [error] dotty.tools.dotc.ast.Trees$Instance$TreeMap.transform(Trees.scala:1512) [error] dotty.tools.dotc.transform.MacroTransform$Transformer.transform(MacroTransform.scala:49) [error] dotty.tools.dotc.transform.PickleQuotes$$anon$1.transform(PickleQuotes.scala:103) [error] dotty.tools.dotc.ast.tpd$TreeMapWithPreciseStatContexts.transformBlock$$anonfun$1$$anonfun$1(tpd.scala:1249) [error] dotty.tools.dotc.ast.tpd$TreeMapWithPreciseStatContexts.loop$2(tpd.scala:1231) [error] dotty.tools.dotc.ast.tpd$TreeMapWithPreciseStatContexts.transformStats(tpd.scala:1244) [error] dotty.tools.dotc.ast.tpd$TreeMapWithPreciseStatContexts.transformBlock(tpd.scala:1249) [error] dotty.tools.dotc.ast.Trees$Instance$TreeMap.transform(Trees.scala:1518) [error] dotty.tools.dotc.transform.MacroTransform$Transformer.transform(MacroTransform.scala:49) [error] dotty.tools.dotc.transform.PickleQuotes$$anon$1.transform(PickleQuotes.scala:103) [error] dotty.tools.dotc.ast.Trees$Instance$TreeMap.transform(Trees.scala:1526) [error] dotty.tools.dotc.transform.MacroTransform$Transformer.transform(MacroTransform.scala:49) [error] dotty.tools.dotc.transform.PickleQuotes$$anon$1.transform(PickleQuotes.scala:103) [error] dotty.tools.dotc.ast.Trees$Instance$TreeMap.transform$$anonfun$1(Trees.scala:1605) [error] scala.collection.immutable.List.mapConserve(List.scala:472) [error] dotty.tools.dotc.ast.Trees$Instance$TreeMap.transform(Trees.scala:1605) [error] dotty.tools.dotc.ast.Trees$Instance$TreeMap.transformSub(Trees.scala:1609) [error] dotty.tools.dotc.ast.Trees$Instance$TreeMap.transform(Trees.scala:1524) [error] dotty.tools.dotc.transform.MacroTransform$Transformer.transform(MacroTransform.scala:49) [error] dotty.tools.dotc.transform.PickleQuotes$$anon$1.transform(PickleQuotes.scala:103) [error] dotty.tools.dotc.ast.tpd$TreeMapWithPreciseStatContexts.transformBlock$$anonfun$1$$anonfun$1(tpd.scala:1249) [error] dotty.tools.dotc.ast.tpd$TreeMapWithPreciseStatContexts.loop$2(tpd.scala:1231) [error] dotty.tools.dotc.ast.tpd$TreeMapWithPreciseStatContexts.transformStats(tpd.scala:1244) [error] dotty.tools.dotc.ast.tpd$TreeMapWithPreciseStatContexts.transformBlock(tpd.scala:1249) [error] dotty.tools.dotc.ast.Trees$Instance$TreeMap.transform(Trees.scala:1518) [error] dotty.tools.dotc.transform.MacroTransform$Transformer.transform(MacroTransform.scala:49) [error] dotty.tools.dotc.transform.PickleQuotes$$anon$1.transform(PickleQuotes.scala:103) [error] dotty.tools.dotc.ast.Trees$Instance$TreeMap.transform(Trees.scala:1570) [error] dotty.tools.dotc.transform.MacroTransform$Transformer.transform(MacroTransform.scala:40) [error] dotty.tools.dotc.transform.PickleQuotes$$anon$1.transform(PickleQuotes.scala:103) [error] dotty.tools.dotc.ast.tpd$TreeMapWithPreciseStatContexts.loop$2(tpd.scala:1244) [error] dotty.tools.dotc.ast.tpd$TreeMapWithPreciseStatContexts.transformStats(tpd.scala:1244) [error] dotty.tools.dotc.ast.tpd$TreeMapWithPreciseStatContexts.transformStats(tpd.scala:1246) [error] dotty.tools.dotc.transform.MacroTransform$Transformer.transform(MacroTransform.scala:47) [error] dotty.tools.dotc.transform.PickleQuotes$$anon$1.transform(PickleQuotes.scala:103) [error] dotty.tools.dotc.ast.Trees$Instance$TreeMap.transform(Trees.scala:1572) [error] dotty.tools.dotc.transform.MacroTransform$Transformer.transform(MacroTransform.scala:40) [error] dotty.tools.dotc.transform.PickleQuotes$$anon$1.transform(PickleQuotes.scala:103) [error] dotty.tools.dotc.ast.tpd$TreeMapWithPreciseStatContexts.loop$2(tpd.scala:1244) [error] dotty.tools.dotc.ast.tpd$TreeMapWithPreciseStatContexts.transformStats(tpd.scala:1244) [error] dotty.tools.dotc.ast.tpd$TreeMapWithPreciseStatContexts.transformStats(tpd.scala:1246) [error] dotty.tools.dotc.ast.Trees$Instance$TreeMap.transform(Trees.scala:1580) [error] dotty.tools.dotc.transform.MacroTransform$Transformer.transform(MacroTransform.scala:40) [error] dotty.tools.dotc.transform.PickleQuotes$$anon$1.transform(PickleQuotes.scala:103) [error] dotty.tools.dotc.transform.MacroTransform.run(MacroTransform.scala:18) [error] dotty.tools.dotc.transform.PickleQuotes.run(PickleQuotes.scala:90) [error] dotty.tools.dotc.core.Phases$Phase.runOn$$anonfun$1(Phases.scala:327) [error] scala.collection.immutable.List.map(List.scala:246) [error] dotty.tools.dotc.core.Phases$Phase.runOn(Phases.scala:331) [error] dotty.tools.dotc.Run.runPhases$1$$anonfun$1(Run.scala:246) [error] scala.runtime.function.JProcedure1.apply(JProcedure1.java:15) [error] scala.runtime.function.JProcedure1.apply(JProcedure1.java:10) [error] scala.collection.ArrayOps$.foreach$extension(ArrayOps.scala:1321) [error] dotty.tools.dotc.Run.runPhases$1(Run.scala:262) [error] dotty.tools.dotc.Run.compileUnits$$anonfun$1(Run.scala:270) [error] dotty.tools.dotc.Run.compileUnits$$anonfun$adapted$1(Run.scala:279) [error] dotty.tools.dotc.util.Stats$.maybeMonitored(Stats.scala:67) [error] dotty.tools.dotc.Run.compileUnits(Run.scala:279) [error] dotty.tools.dotc.Run.compileSources(Run.scala:194) [error] dotty.tools.dotc.Run.compile(Run.scala:179) [error] dotty.tools.dotc.Driver.doCompile(Driver.scala:37) [error] dotty.tools.xsbt.CompilerBridgeDriver.run(CompilerBridgeDriver.java:88) [error] dotty.tools.xsbt.CompilerBridge.run(CompilerBridge.java:22) [error] sbt.internal.inc.AnalyzingCompiler.compile(AnalyzingCompiler.scala:91) [error] sbt.internal.inc.MixedAnalyzingCompiler.$anonfun$compile$7(MixedAnalyzingCompiler.scala:193) [error] scala.runtime.java8.JFunction0$mcV$sp.apply(JFunction0$mcV$sp.scala:18) [error] sbt.internal.inc.MixedAnalyzingCompiler.timed(MixedAnalyzingCompiler.scala:248) [error] sbt.internal.inc.MixedAnalyzingCompiler.$anonfun$compile$4(MixedAnalyzingCompiler.scala:183) [error] sbt.internal.inc.MixedAnalyzingCompiler.$anonfun$compile$4$adapted(MixedAnalyzingCompiler.scala:163) [error] sbt.internal.inc.JarUtils$.withPreviousJar(JarUtils.scala:239) [error] sbt.internal.inc.MixedAnalyzingCompiler.compileScala$1(MixedAnalyzingCompiler.scala:163) [error] sbt.internal.inc.MixedAnalyzingCompiler.compile(MixedAnalyzingCompiler.scala:211) [error] sbt.internal.inc.IncrementalCompilerImpl.$anonfun$compileInternal$1(IncrementalCompilerImpl.scala:534) [error] sbt.internal.inc.IncrementalCompilerImpl.$anonfun$compileInternal$1$adapted(IncrementalCompilerImpl.scala:534) [error] sbt.internal.inc.Incremental$.$anonfun$apply$5(Incremental.scala:180) [error] sbt.internal.inc.Incremental$.$anonfun$apply$5$adapted(Incremental.scala:178) [error] sbt.internal.inc.Incremental$$anon$2.run(Incremental.scala:464) [error] sbt.internal.inc.IncrementalCommon$CycleState.next(IncrementalCommon.scala:116) [error] sbt.internal.inc.IncrementalCommon$$anon$1.next(IncrementalCommon.scala:56) [error] sbt.internal.inc.IncrementalCommon$$anon$1.next(IncrementalCommon.scala:52) [error] sbt.internal.inc.IncrementalCommon.cycle(IncrementalCommon.scala:263) [error] sbt.internal.inc.Incremental$.$anonfun$incrementalCompile$8(Incremental.scala:419) [error] sbt.internal.inc.Incremental$.withClassfileManager(Incremental.scala:506) [error] sbt.internal.inc.Incremental$.incrementalCompile(Incremental.scala:406) [error] sbt.internal.inc.Incremental$.apply(Incremental.scala:172) [error] sbt.internal.inc.IncrementalCompilerImpl.compileInternal(IncrementalCompilerImpl.scala:534) [error] sbt.internal.inc.IncrementalCompilerImpl.$anonfun$compileIncrementally$1(IncrementalCompilerImpl.scala:488) [error] sbt.internal.inc.IncrementalCompilerImpl.handleCompilationError(IncrementalCompilerImpl.scala:332) [error] sbt.internal.inc.IncrementalCompilerImpl.compileIncrementally(IncrementalCompilerImpl.scala:425) [error] sbt.internal.inc.IncrementalCompilerImpl.compile(IncrementalCompilerImpl.scala:137) [error] mill.scalalib.worker.ZincWorkerImpl.compileInternal(ZincWorkerImpl.scala:544) [error] mill.scalalib.worker.ZincWorkerImpl.$anonfun$compileMixed$1(ZincWorkerImpl.scala:334) [error] mill.api.FixSizedCache.withCachedValue(FixSizedCache.scala:66) [error] mill.scalalib.worker.ZincWorkerImpl.withCompilers(ZincWorkerImpl.scala:414) [error] mill.scalalib.worker.ZincWorkerImpl.compileMixed(ZincWorkerImpl.scala:333) [error] mill.scalalib.ScalaModule.$anonfun$compile$2(ScalaModule.scala:280) [error] mill.define.Task$TraverseCtx.evaluate(Task.scala:71) [error] mill.eval.GroupEvaluator.$anonfun$evaluateGroup$11(GroupEvaluator.scala:356) [error] scala.util.DynamicVariable.withValue(DynamicVariable.scala:59) [error] scala.Console$.withErr(Console.scala:193) [error] mill.api.SystemStreams$.$anonfun$withStreams$2(SystemStreams.scala:62) [error] scala.util.DynamicVariable.withValue(DynamicVariable.scala:59) [error] scala.Console$.withOut(Console.scala:164) [error] mill.api.SystemStreams$.$anonfun$withStreams$1(SystemStreams.scala:61) [error] scala.util.DynamicVariable.withValue(DynamicVariable.scala:59) [error] scala.Console$.withIn(Console.scala:227) [error] mill.api.SystemStreams$.withStreams(SystemStreams.scala:60) [error] mill.eval.GroupEvaluator.$anonfun$evaluateGroup$8(GroupEvaluator.scala:356) [error] mill.eval.GroupEvaluator.$anonfun$evaluateGroup$8$adapted(GroupEvaluator.scala:325) [error] scala.collection.immutable.Vector.foreach(Vector.scala:2124) [error] mill.eval.GroupEvaluator.computeAll$1(GroupEvaluator.scala:325) [error] mill.eval.GroupEvaluator.evaluateGroup(GroupEvaluator.scala:380) [error] mill.eval.GroupEvaluator.$anonfun$evaluateGroupCached$22(GroupEvaluator.scala:247) [error] scala.util.DynamicVariable.withValue(DynamicVariable.scala:59) [error] mill.eval.GroupEvaluator.$anonfun$evaluateGroupCached$2(GroupEvaluator.scala:238) [error] mill.eval.GroupEvaluator$synchronizedEval$.$anonfun$apply$1(GroupEvaluator.scala:65) [error] scala.util.Using$.resource(Using.scala:262) [error] mill.eval.GroupEvaluator$synchronizedEval$.apply(GroupEvaluator.scala:64) [error] mill.eval.GroupEvaluator.evaluateGroupCached(GroupEvaluator.scala:83) [error] mill.eval.GroupEvaluator.evaluateGroupCached$(GroupEvaluator.scala:71) [error] mill.eval.EvaluatorImpl.evaluateGroupCached(EvaluatorImpl.scala:15) [error] mill.eval.EvaluatorCore.$anonfun$evaluate0$2(EvaluatorCore.scala:116) [error] scala.concurrent.impl.Promise$Transformation.run(Promise.scala:467) [error] mill.eval.ExecutionContexts$RunNow$.execute(ExecutionContexts.scala:14) [error] scala.concurrent.impl.Promise$Transformation.submitWithValue(Promise.scala:429) [error] scala.concurrent.impl.Promise$DefaultPromise.submitWithValue(Promise.scala:338) [error] scala.concurrent.impl.Promise$DefaultPromise.dispatchOrAddCallbacks(Promise.scala:312) [error] scala.concurrent.impl.Promise$DefaultPromise.map(Promise.scala:182) [error] mill.eval.EvaluatorCore.$anonfun$evaluate0$1(EvaluatorCore.scala:92) [error] mill.eval.EvaluatorCore.$anonfun$evaluate0$1$adapted(EvaluatorCore.scala:90) [error] scala.collection.immutable.VectorStatics$.foreachRec(Vector.scala:2124) [error] scala.collection.immutable.Vector.foreach(Vector.scala:2130) [error] mill.eval.EvaluatorCore.evaluate0(EvaluatorCore.scala:90) [error] mill.eval.EvaluatorCore.$anonfun$evaluate$1(EvaluatorCore.scala:43) [error] scala.util.DynamicVariable.withValue(DynamicVariable.scala:59) [error] mill.eval.EvaluatorCore.evaluate(EvaluatorCore.scala:34) [error] mill.eval.EvaluatorCore.evaluate$(EvaluatorCore.scala:26) [error] mill.eval.EvaluatorImpl.evaluate(EvaluatorImpl.scala:15) [error] mill.main.RunScript$.evaluateNamed(RunScript.scala:38) [error] mill.main.RunScript$.$anonfun$evaluateTasksNamed$2(RunScript.scala:26) [error] scala.util.Either.map(Either.scala:382) [error] mill.main.RunScript$.evaluateTasksNamed(RunScript.scala:26) [error] mill.runner.MillBuildBootstrap$.evaluateWithWatches(MillBuildBootstrap.scala:399) [error] mill.runner.MillBuildBootstrap.$anonfun$processFinalTargets$3(MillBuildBootstrap.scala:308) [error] scala.util.DynamicVariable.withValue(DynamicVariable.scala:59) [error] mill.runner.MillBuildBootstrap.processFinalTargets(MillBuildBootstrap.scala:308) [error] mill.runner.MillBuildBootstrap.evaluateRec(MillBuildBootstrap.scala:196) [error] mill.runner.MillBuildBootstrap.$anonfun$evaluate$1(MillBuildBootstrap.scala:49) [error] scala.util.DynamicVariable.withValue(DynamicVariable.scala:59) [error] mill.runner.MillBuildBootstrap.evaluate(MillBuildBootstrap.scala:48) [error] mill.runner.MillMain$.$anonfun$main0$6(MillMain.scala:234) [error] mill.runner.Watching$.watchLoop(Watching.scala:27) [error] mill.runner.MillMain$.$anonfun$main0$1(MillMain.scala:219) [error] scala.util.DynamicVariable.withValue(DynamicVariable.scala:59) [error] scala.Console$.withErr(Console.scala:193) [error] mill.api.SystemStreams$.$anonfun$withStreams$2(SystemStreams.scala:62) [error] scala.util.DynamicVariable.withValue(DynamicVariable.scala:59) [error] scala.Console$.withOut(Console.scala:164) [error] mill.api.SystemStreams$.$anonfun$withStreams$1(SystemStreams.scala:61) [error] scala.util.DynamicVariable.withValue(DynamicVariable.scala:59) [error] scala.Console$.withIn(Console.scala:227) [error] mill.api.SystemStreams$.withStreams(SystemStreams.scala:60) [error] mill.runner.MillMain$.main0(MillMain.scala:101) [error] mill.runner.MillMain$.liftedTree1$1(MillMain.scala:78) [error] mill.runner.MillMain$.main(MillMain.scala:69) [error] mill.runner.MillMain.main(MillMain.scala) [error] java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) [error] java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) [error] java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) [error] java.base/java.lang.reflect.Method.invoke(Method.java:568) [error] mill.main.client.IsolatedMillMainLoader.runMain(IsolatedMillMainLoader.java:58) [error] mill.main.client.MillClientMain.main(MillClientMain.java:78) [error]
1 targets failed meta.compile java.lang.AssertionError: assertion failed: unresolved symbols: type k1 (line 208) #40655, type v1 (line 208) #40657, type t1 (line 208) #40659, type I (line 188) #40640 when pickling /home/hmf/VSCodeProjects/sploty/meta/src/data/Macros4.scala scala.runtime.Scala3RunTime$.assertFailed(Scala3RunTime.scala:8) dotty.tools.dotc.core.tasty.TreePickler.pickle(TreePickler.scala:829) dotty.tools.dotc.quoted.PickledQuotes$.pickle(PickledQuotes.scala:221) dotty.tools.dotc.quoted.PickledQuotes$.pickleQuote(PickledQuotes.scala:33) dotty.tools.dotc.transform.PickleQuotes$.pickleAsTasty$1(PickleQuotes.scala:332) dotty.tools.dotc.transform.PickleQuotes$.pickle(PickleQuotes.scala:416) dotty.tools.dotc.transform.PickleQuotes$$anon$1.transform(PickleQuotes.scala:99) dotty.tools.dotc.ast.Trees$Instance$TreeMap.transform(Trees.scala:1520) dotty.tools.dotc.transform.MacroTransform$Transformer.transform(MacroTransform.scala:49) dotty.tools.dotc.transform.PickleQuotes$$anon$1.transform(PickleQuotes.scala:103) dotty.tools.dotc.ast.Trees$Instance$TreeMap.transform(Trees.scala:1512) dotty.tools.dotc.transform.MacroTransform$Transformer.transform(MacroTransform.scala:49) dotty.tools.dotc.transform.PickleQuotes$$anon$1.transform(PickleQuotes.scala:103) dotty.tools.dotc.ast.tpd$TreeMapWithPreciseStatContexts.transformBlock$$anonfun$1$$anonfun$1(tpd.scala:1249) dotty.tools.dotc.ast.tpd$TreeMapWithPreciseStatContexts.loop$2(tpd.scala:1231) dotty.tools.dotc.ast.tpd$TreeMapWithPreciseStatContexts.transformStats(tpd.scala:1244) dotty.tools.dotc.ast.tpd$TreeMapWithPreciseStatContexts.transformBlock(tpd.scala:1249) dotty.tools.dotc.ast.Trees$Instance$TreeMap.transform(Trees.scala:1518) dotty.tools.dotc.transform.MacroTransform$Transformer.transform(MacroTransform.scala:49) dotty.tools.dotc.transform.PickleQuotes$$anon$1.transform(PickleQuotes.scala:103) dotty.tools.dotc.ast.Trees$Instance$TreeMap.transform(Trees.scala:1526) dotty.tools.dotc.transform.MacroTransform$Transformer.transform(MacroTransform.scala:49) dotty.tools.dotc.transform.PickleQuotes$$anon$1.transform(PickleQuotes.scala:103) dotty.tools.dotc.ast.Trees$Instance$TreeMap.transform$$anonfun$1(Trees.scala:1605) scala.collection.immutable.List.mapConserve(List.scala:472) dotty.tools.dotc.ast.Trees$Instance$TreeMap.transform(Trees.scala:1605) dotty.tools.dotc.ast.Trees$Instance$TreeMap.transformSub(Trees.scala:1609) dotty.tools.dotc.ast.Trees$Instance$TreeMap.transform(Trees.scala:1524) dotty.tools.dotc.transform.MacroTransform$Transformer.transform(MacroTransform.scala:49) dotty.tools.dotc.transform.PickleQuotes$$anon$1.transform(PickleQuotes.scala:103) dotty.tools.dotc.ast.tpd$TreeMapWithPreciseStatContexts.transformBlock$$anonfun$1$$anonfun$1(tpd.scala:1249) dotty.tools.dotc.ast.tpd$TreeMapWithPreciseStatContexts.loop$2(tpd.scala:1231) dotty.tools.dotc.ast.tpd$TreeMapWithPreciseStatContexts.transformStats(tpd.scala:1244) dotty.tools.dotc.ast.tpd$TreeMapWithPreciseStatContexts.transformBlock(tpd.scala:1249) dotty.tools.dotc.ast.Trees$Instance$TreeMap.transform(Trees.scala:1518) dotty.tools.dotc.transform.MacroTransform$Transformer.transform(MacroTransform.scala:49) dotty.tools.dotc.transform.PickleQuotes$$anon$1.transform(PickleQuotes.scala:103) dotty.tools.dotc.ast.Trees$Instance$TreeMap.transform(Trees.scala:1570) dotty.tools.dotc.transform.MacroTransform$Transformer.transform(MacroTransform.scala:40) dotty.tools.dotc.transform.PickleQuotes$$anon$1.transform(PickleQuotes.scala:103) dotty.tools.dotc.ast.tpd$TreeMapWithPreciseStatContexts.loop$2(tpd.scala:1244) dotty.tools.dotc.ast.tpd$TreeMapWithPreciseStatContexts.transformStats(tpd.scala:1244) dotty.tools.dotc.ast.tpd$TreeMapWithPreciseStatContexts.transformStats(tpd.scala:1246) dotty.tools.dotc.transform.MacroTransform$Transformer.transform(MacroTransform.scala:47) dotty.tools.dotc.transform.PickleQuotes$$anon$1.transform(PickleQuotes.scala:103) dotty.tools.dotc.ast.Trees$Instance$TreeMap.transform(Trees.scala:1572) dotty.tools.dotc.transform.MacroTransform$Transformer.transform(MacroTransform.scala:40) dotty.tools.dotc.transform.PickleQuotes$$anon$1.transform(PickleQuotes.scala:103) dotty.tools.dotc.ast.tpd$TreeMapWithPreciseStatContexts.loop$2(tpd.scala:1244) dotty.tools.dotc.ast.tpd$TreeMapWithPreciseStatContexts.transformStats(tpd.scala:1244) dotty.tools.dotc.ast.tpd$TreeMapWithPreciseStatContexts.transformStats(tpd.scala:1246) dotty.tools.dotc.ast.Trees$Instance$TreeMap.transform(Trees.scala:1580) dotty.tools.dotc.transform.MacroTransform$Transformer.transform(MacroTransform.scala:40) dotty.tools.dotc.transform.PickleQuotes$$anon$1.transform(PickleQuotes.scala:103) dotty.tools.dotc.transform.MacroTransform.run(MacroTransform.scala:18) dotty.tools.dotc.transform.PickleQuotes.run(PickleQuotes.scala:90) dotty.tools.dotc.core.Phases$Phase.runOn$$anonfun$1(Phases.scala:327) scala.collection.immutable.List.map(List.scala:246) dotty.tools.dotc.core.Phases$Phase.runOn(Phases.scala:331) dotty.tools.dotc.Run.runPhases$1$$anonfun$1(Run.scala:246) scala.runtime.function.JProcedure1.apply(JProcedure1.java:15) scala.runtime.function.JProcedure1.apply(JProcedure1.java:10) scala.collection.ArrayOps$.foreach$extension(ArrayOps.scala:1321) dotty.tools.dotc.Run.runPhases$1(Run.scala:262) dotty.tools.dotc.Run.compileUnits$$anonfun$1(Run.scala:270) dotty.tools.dotc.Run.compileUnits$$anonfun$adapted$1(Run.scala:279) dotty.tools.dotc.util.Stats$.maybeMonitored(Stats.scala:67) dotty.tools.dotc.Run.compileUnits(Run.scala:279) dotty.tools.dotc.Run.compileSources(Run.scala:194) dotty.tools.dotc.Run.compile(Run.scala:179) dotty.tools.dotc.Driver.doCompile(Driver.scala:37) dotty.tools.xsbt.CompilerBridgeDriver.run(CompilerBridgeDriver.java:88) dotty.tools.xsbt.CompilerBridge.run(CompilerBridge.java:22) sbt.internal.inc.AnalyzingCompiler.compile(AnalyzingCompiler.scala:91) sbt.internal.inc.MixedAnalyzingCompiler.$anonfun$compile$7(MixedAnalyzingCompiler.scala:193) scala.runtime.java8.JFunction0$mcV$sp.apply(JFunction0$mcV$sp.scala:18) sbt.internal.inc.MixedAnalyzingCompiler.timed(MixedAnalyzingCompiler.scala:248) sbt.internal.inc.MixedAnalyzingCompiler.$anonfun$compile$4(MixedAnalyzingCompiler.scala:183) sbt.internal.inc.MixedAnalyzingCompiler.$anonfun$compile$4$adapted(MixedAnalyzingCompiler.scala:163) sbt.internal.inc.JarUtils$.withPreviousJar(JarUtils.scala:239) sbt.internal.inc.MixedAnalyzingCompiler.compileScala$1(MixedAnalyzingCompiler.scala:163) sbt.internal.inc.MixedAnalyzingCompiler.compile(MixedAnalyzingCompiler.scala:211) sbt.internal.inc.IncrementalCompilerImpl.$anonfun$compileInternal$1(IncrementalCompilerImpl.scala:534) sbt.internal.inc.IncrementalCompilerImpl.$anonfun$compileInternal$1$adapted(IncrementalCompilerImpl.scala:534) sbt.internal.inc.Incremental$.$anonfun$apply$5(Incremental.scala:180) sbt.internal.inc.Incremental$.$anonfun$apply$5$adapted(Incremental.scala:178) sbt.internal.inc.Incremental$$anon$2.run(Incremental.scala:464) sbt.internal.inc.IncrementalCommon$CycleState.next(IncrementalCommon.scala:116) sbt.internal.inc.IncrementalCommon$$anon$1.next(IncrementalCommon.scala:56) sbt.internal.inc.IncrementalCommon$$anon$1.next(IncrementalCommon.scala:52) sbt.internal.inc.IncrementalCommon.cycle(IncrementalCommon.scala:263) sbt.internal.inc.Incremental$.$anonfun$incrementalCompile$8(Incremental.scala:419) sbt.internal.inc.Incremental$.withClassfileManager(Incremental.scala:506) sbt.internal.inc.Incremental$.incrementalCompile(Incremental.scala:406) sbt.internal.inc.Incremental$.apply(Incremental.scala:172) sbt.internal.inc.IncrementalCompilerImpl.compileInternal(IncrementalCompilerImpl.scala:534) sbt.internal.inc.IncrementalCompilerImpl.$anonfun$compileIncrementally$1(IncrementalCompilerImpl.scala:488) sbt.internal.inc.IncrementalCompilerImpl.handleCompilationError(IncrementalCompilerImpl.scala:332) sbt.internal.inc.IncrementalCompilerImpl.compileIncrementally(IncrementalCompilerImpl.scala:425) sbt.internal.inc.IncrementalCompilerImpl.compile(IncrementalCompilerImpl.scala:137) mill.scalalib.worker.ZincWorkerImpl.compileInternal(ZincWorkerImpl.scala:544) mill.scalalib.worker.ZincWorkerImpl.$anonfun$compileMixed$1(ZincWorkerImpl.scala:334) mill.api.FixSizedCache.withCachedValue(FixSizedCache.scala:66) mill.scalalib.worker.ZincWorkerImpl.withCompilers(ZincWorkerImpl.scala:414) mill.scalalib.worker.ZincWorkerImpl.compileMixed(ZincWorkerImpl.scala:333) mill.scalalib.ScalaModule.$anonfun$compile$2(ScalaModule.scala:280) mill.define.Task$TraverseCtx.evaluate(Task.scala:71)

Expectation

If we use explcit typing '{ ICons[k1, v1, IMap]($y.key, $y.value, $tt) } no error occurs. I am assuming the explicit typing is not required. The IDE (VSCode + Metals) shows the very same type parameters shown here.

hmf avatar Feb 22 '24 16:02 hmf

Test result: 3.3.1-RC1-bin-20230403-b0ad1e1-NIGHTLY is a bad release

Last good release: 3.3.1-RC1-bin-20230331-7262437-NIGHTLY First bad release: 3.3.1-RC1-bin-20230403-b0ad1e1-NIGHTLY

nicolasstucki avatar Feb 23 '24 08:02 nicolasstucki

First bad commit f035f102069bbbb6b438b0d18f871a68cfa29987

nicolasstucki avatar Feb 23 '24 09:02 nicolasstucki

Minimization

import scala.quoted.*

class ICons[K <: Singleton](val key: K)

def filterX(using Quotes): Unit =
  (??? : Expr[Any]) match
    case '{ $y : ICons[k1] } => '{ ICons($y.key) }

nicolasstucki avatar Feb 23 '24 09:02 nicolasstucki

Seems to be related to the <: Singleton bound.

nicolasstucki avatar Feb 23 '24 09:02 nicolasstucki