Skip to content

Instantly share code, notes, and snippets.

@justinhj
Created January 25, 2021 18:23
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save justinhj/16c45cfc5ac247b08e169213c661fbcd to your computer and use it in GitHub Desktop.
Save justinhj/16c45cfc5ac247b08e169213c661fbcd to your computer and use it in GitHub Desktop.
Macro that crashes the compiler
// Macro that crashes the compiler
import scala.quoted._
def takeOptionImpl[T](o: Expr[Option[T]], default: Expr[T])(using Quotes, Type[T]): Expr[T] = '{
$o match {
case Some(t1) => t1
case None: Option[T] => $default
}
}
inline def takeOption[T](inline o: Option[T], inline default: T) = ${takeOptionImpl('o, 'default)}
// In another file
println(s"takeOption ${MapNMacro.takeOption(Option(15), 10)}")
// Output
scalac: Error: assertion failed: unresolved symbols: type T (line 11) #5806 when pickling /Users/justinhj/evalexample/src/main/scala/MapNMacro.scala
java.lang.AssertionError: assertion failed: unresolved symbols: type T (line 11) #5806 when pickling /Users/justinhj/evalexample/src/main/scala/MapNMacro.scala
at scala.runtime.Scala3RunTime$.assertFailed(Scala3RunTime.scala:8)
at dotty.tools.dotc.core.tasty.TreePickler.pickle(TreePickler.scala:778)
at dotty.tools.dotc.quoted.PickledQuotes$.pickle(PickledQuotes.scala:166)
at dotty.tools.dotc.quoted.PickledQuotes$.pickleQuote(PickledQuotes.scala:37)
at dotty.tools.dotc.transform.PickleQuotes$QuoteReifier.pickleAsTasty$1(PickleQuotes.scala:222)
at dotty.tools.dotc.transform.PickleQuotes$QuoteReifier.pickledQuote(PickleQuotes.scala:305)
at dotty.tools.dotc.transform.PickleQuotes$QuoteReifier.transformQuotation(PickleQuotes.scala:142)
at dotty.tools.dotc.transform.TreeMapWithStages.transform(TreeMapWithStages.scala:114)
at dotty.tools.dotc.transform.PickleQuotes$QuoteReifier.transform(PickleQuotes.scala:514)
at dotty.tools.dotc.ast.Trees$Instance$TreeMap.transform(Trees.scala:1287)
at dotty.tools.dotc.ast.TreeMapWithImplicits.transform(TreeMapWithImplicits.scala:121)
at dotty.tools.dotc.transform.TreeMapWithStages.mapOverTree$1(TreeMapWithStages.scala:85)
at dotty.tools.dotc.transform.TreeMapWithStages.transform(TreeMapWithStages.scala:148)
at dotty.tools.dotc.transform.PickleQuotes$QuoteReifier.transform(PickleQuotes.scala:514)
at dotty.tools.dotc.ast.Trees$Instance$TreeMap.transform(Trees.scala:1293)
at dotty.tools.dotc.ast.TreeMapWithImplicits.transform(TreeMapWithImplicits.scala:121)
at dotty.tools.dotc.transform.TreeMapWithStages.mapOverTree$1(TreeMapWithStages.scala:85)
at dotty.tools.dotc.transform.TreeMapWithStages.transform(TreeMapWithStages.scala:148)
at dotty.tools.dotc.transform.PickleQuotes$QuoteReifier.transform(PickleQuotes.scala:514)
at dotty.tools.dotc.ast.TreeMapWithImplicits.transform(TreeMapWithImplicits.scala:100)
at dotty.tools.dotc.transform.TreeMapWithStages.mapOverTree$1(TreeMapWithStages.scala:85)
at dotty.tools.dotc.transform.TreeMapWithStages.transform(TreeMapWithStages.scala:148)
at dotty.tools.dotc.transform.PickleQuotes$QuoteReifier.transform(PickleQuotes.scala:514)
at dotty.tools.dotc.ast.TreeMapWithImplicits.traverse$1(TreeMapWithImplicits.scala:53)
at dotty.tools.dotc.ast.TreeMapWithImplicits.transformStats(TreeMapWithImplicits.scala:60)
at dotty.tools.dotc.ast.TreeMapWithImplicits.transform(TreeMapWithImplicits.scala:112)
at dotty.tools.dotc.transform.TreeMapWithStages.mapOverTree$1(TreeMapWithStages.scala:85)
at dotty.tools.dotc.transform.TreeMapWithStages.transform(TreeMapWithStages.scala:148)
at dotty.tools.dotc.transform.PickleQuotes$QuoteReifier.transform(PickleQuotes.scala:514)
at dotty.tools.dotc.ast.Trees$Instance$TreeMap.transform(Trees.scala:1370)
at dotty.tools.dotc.ast.TreeMapWithImplicits.transform(TreeMapWithImplicits.scala:105)
at dotty.tools.dotc.transform.TreeMapWithStages.mapOverTree$1(TreeMapWithStages.scala:85)
at dotty.tools.dotc.transform.TreeMapWithStages.transform(TreeMapWithStages.scala:148)
at dotty.tools.dotc.transform.PickleQuotes$QuoteReifier.transform(PickleQuotes.scala:514)
at dotty.tools.dotc.ast.Trees$Instance$TreeMap.transform$$anonfun$2(Trees.scala:1394)
at scala.collection.immutable.List.mapConserve(List.scala:472)
at dotty.tools.dotc.ast.Trees$Instance$TreeMap.transform(Trees.scala:1394)
at dotty.tools.dotc.ast.Trees$Instance$TreeMap.transformStats(Trees.scala:1392)
at dotty.tools.dotc.ast.Trees$Instance$TreeMap.transform(Trees.scala:1379)
at dotty.tools.dotc.ast.TreeMapWithImplicits.transform(TreeMapWithImplicits.scala:105)
at dotty.tools.dotc.transform.TreeMapWithStages.mapOverTree$1(TreeMapWithStages.scala:85)
at dotty.tools.dotc.transform.TreeMapWithStages.transform(TreeMapWithStages.scala:148)
at dotty.tools.dotc.transform.PickleQuotes$QuoteReifier.transform(PickleQuotes.scala:514)
at dotty.tools.dotc.transform.PickleQuotes$$anon$1.transform(PickleQuotes.scala:95)
at dotty.tools.dotc.transform.MacroTransform.run(MacroTransform.scala:21)
at dotty.tools.dotc.transform.PickleQuotes.run(PickleQuotes.scala:91)
at dotty.tools.dotc.core.Phases$Phase.runOn$$anonfun$1(Phases.scala:296)
at scala.collection.immutable.List.map(List.scala:246)
at dotty.tools.dotc.core.Phases$Phase.runOn(Phases.scala:297)
at dotty.tools.dotc.Run.runPhases$4$$anonfun$4(Run.scala:185)
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:1323)
at dotty.tools.dotc.Run.runPhases$5(Run.scala:195)
at dotty.tools.dotc.Run.compileUnits$$anonfun$1(Run.scala:203)
at scala.runtime.function.JFunction0$mcV$sp.apply(JFunction0$mcV$sp.java:12)
at dotty.tools.dotc.util.Stats$.maybeMonitored(Stats.scala:67)
at dotty.tools.dotc.Run.compileUnits(Run.scala:210)
at dotty.tools.dotc.Run.compileSources(Run.scala:146)
at dotty.tools.dotc.Run.compile(Run.scala:130)
at dotty.tools.dotc.Driver.doCompile(Driver.scala:39)
at dotty.tools.dotc.Driver.process(Driver.scala:186)
at dotty.tools.dotc.Main.process(Main.scala)
at xsbt.CachedCompilerImpl.run(CachedCompilerImpl.java:69)
at xsbt.CompilerInterface.run(CompilerInterface.java:41)
at jdk.internal.reflect.GeneratedMethodAccessor174.invoke(Unknown Source)
at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.base/java.lang.reflect.Method.invoke(Method.java:566)
at sbt.internal.inc.AnalyzingCompiler.invoke(AnalyzingCompiler.scala:315)
at sbt.internal.inc.AnalyzingCompiler.compile(AnalyzingCompiler.scala:110)
at org.jetbrains.jps.incremental.scala.local.IdeaIncrementalCompiler.compile(IdeaIncrementalCompiler.scala:57)
at org.jetbrains.jps.incremental.scala.local.LocalServer.compile(LocalServer.scala:43)
at org.jetbrains.jps.incremental.scala.remote.Main$.compileLogic(Main.scala:158)
at org.jetbrains.jps.incremental.scala.remote.Main$.$anonfun$handleCommand$1(Main.scala:141)
at org.jetbrains.jps.incremental.scala.remote.Main$.decorated$1(Main.scala:131)
at org.jetbrains.jps.incremental.scala.remote.Main$.handleCommand(Main.scala:138)
at org.jetbrains.jps.incremental.scala.remote.Main$.serverLogic(Main.scala:115)
at org.jetbrains.jps.incremental.scala.remote.Main$.nailMain(Main.scala:71)
at org.jetbrains.jps.incremental.scala.remote.Main.nailMain(Main.scala)
at jdk.internal.reflect.GeneratedMethodAccessor169.invoke(Unknown Source)
at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.base/java.lang.reflect.Method.invoke(Method.java:566)
at com.martiansoftware.nailgun.NGSession.run(NGSession.java:319)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment