Skip to content

compiler crash: position not set in macro expansion #6535

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Closed
liufengyun opened this issue May 20, 2019 · 0 comments
Closed

compiler crash: position not set in macro expansion #6535

liufengyun opened this issue May 20, 2019 · 0 comments

Comments

@liufengyun
Copy link
Contributor

Given the following macro:

import scala.quoted._
import scala.tasty._

object scalatest {

  inline def assert(condition: => Boolean): Unit = ${ assertImpl('condition) }

  def assertImpl(cond: Expr[Boolean])(implicit refl: Reflection): Expr[Unit] = {
    import refl._
    import util._

    cond.unseal.underlyingArgument match {
      case t @ Apply(Select(lhs, op), rhs :: Nil) =>
        let(lhs) { left =>
          let(rhs) { right =>
            val app = Select.overloaded(left, op, Nil, right :: Nil)
            let(app) { result =>
              val l = left.seal
              val r = right.seal
              val b = result.seal.cast[Boolean]
              val code = '{ scala.Predef.assert($b) }
              code.unseal
            }
          }
        }.seal.cast[Unit]
    }
  }

}

The following code crashes the compiler:

object Test {
  import scalatest._

  def neverRuns(f: => Unit): Boolean = true

  def main(args: Array[String]): Unit = {
    assert(this.neverRuns(sys.error("Sad times 1")))
  }
}
java.lang.AssertionError: assertion failed: position not set for sys.package
*** error while checking tests/run-macros/reflect-pos-fun/test_2.scala after phase posttyper ***
java.lang.AssertionError: assertion failed: position not set for sys.package # 34901 of class dotty.tools.dotc.ast.Trees$Select in /Users/fliu/Documents/dotty/library/src-3.x/scala/tasty/reflect/utils/TreeUtils.scala while compiling tests/run-macros/reflect-pos-fun/test_2.scala
Fatal compiler crash when compiling: tests/run-macros/reflect-pos-fun:
assertion failed: position not set for sys.package # 34901 of class dotty.tools.dotc.ast.Trees$Select in /Users/fliu/Documents/dotty/library/src-3.x/scala/tasty/reflect/utils/TreeUtils.scala
dotty.DottyPredef$.assertFail(DottyPredef.scala:16)
dotty.tools.dotc.typer.Typer$.assertPositioned(Typer.scala:62)
dotty.tools.dotc.typer.Typer.typed(Typer.scala:2215)
dotty.tools.dotc.typer.Typer.typed(Typer.scala:2231)
dotty.tools.dotc.transform.TreeChecker$Checker.typed(TreeChecker.scala:255)
dotty.tools.dotc.typer.ReTyper.typedSelect(ReTyper.scala:41)
dotty.tools.dotc.transform.TreeChecker$Checker.typedSelect(TreeChecker.scala:341)
dotty.tools.dotc.typer.Typer.typedNamed$1(Typer.scala:2111)
dotty.tools.dotc.typer.Typer.typedUnadapted(Typer.scala:2184)
dotty.tools.dotc.typer.ReTyper.typedUnadapted(ReTyper.scala:124)
dotty.tools.dotc.transform.TreeChecker$Checker.typedUnadapted(TreeChecker.scala:267)
dotty.tools.dotc.typer.Typer.typed(Typer.scala:2219)
dotty.tools.dotc.typer.Typer.typed(Typer.scala:2217)
dotty.tools.dotc.typer.Typer.typed(Typer.scala:2231)
dotty.tools.dotc.transform.TreeChecker$Checker.typed(TreeChecker.scala:255)
dotty.tools.dotc.typer.Typer.typedExpr(Typer.scala:2307)
dotty.tools.dotc.typer.ReTyper.typedFunPart(ReTyper.scala:72)
dotty.tools.dotc.typer.Applications.realApply$1(Applications.scala:807)
dotty.tools.dotc.typer.Applications.typedApply(Applications.scala:910)
dotty.tools.dotc.typer.Typer.typedApply(Typer.scala:87)
dotty.tools.dotc.typer.Typer.typedUnnamed$1(Typer.scala:2131)
dotty.tools.dotc.typer.Typer.typedUnadapted(Typer.scala:2185)
dotty.tools.dotc.typer.ReTyper.typedUnadapted(ReTyper.scala:124)
dotty.tools.dotc.transform.TreeChecker$Checker.typedUnadapted(TreeChecker.scala:267)
dotty.tools.dotc.typer.Typer.typed(Typer.scala:2219)
dotty.tools.dotc.typer.Typer.typed(Typer.scala:2231)
dotty.tools.dotc.transform.TreeChecker$Checker.typed(TreeChecker.scala:255)
dotty.tools.dotc.typer.Typer.typedInlined(Typer.scala:1229)
dotty.tools.dotc.transform.TreeChecker$Checker.typedInlined$$anonfun$1(TreeChecker.scala:414)
dotty.tools.dotc.transform.TreeChecker$Checker.withDefinedSyms(TreeChecker.scala:169)
dotty.tools.dotc.transform.TreeChecker$Checker.typedInlined(TreeChecker.scala:414)
dotty.tools.dotc.typer.Typer.typedUnnamed$1(Typer.scala:2151)
dotty.tools.dotc.typer.Typer.typedUnadapted(Typer.scala:2185)
dotty.tools.dotc.typer.ReTyper.typedUnadapted(ReTyper.scala:124)
dotty.tools.dotc.transform.TreeChecker$Checker.typedUnadapted(TreeChecker.scala:267)
dotty.tools.dotc.typer.Typer.typed(Typer.scala:2219)
dotty.tools.dotc.typer.Typer.typed(Typer.scala:2231)
dotty.tools.dotc.transform.TreeChecker$Checker.typed(TreeChecker.scala:255)
dotty.tools.dotc.typer.Typer.typedExpr(Typer.scala:2307)
dotty.tools.dotc.typer.Typer.typedValDef(Typer.scala:1470)
dotty.tools.dotc.typer.Typer.typedNamed$1(Typer.scala:2115)
dotty.tools.dotc.typer.Typer.typedUnadapted(Typer.scala:2184)
dotty.tools.dotc.typer.ReTyper.typedUnadapted(ReTyper.scala:124)
dotty.tools.dotc.transform.TreeChecker$Checker.typedUnadapted(TreeChecker.scala:267)
dotty.tools.dotc.typer.Typer.typed(Typer.scala:2219)
dotty.tools.dotc.typer.Typer.typed(Typer.scala:2231)
dotty.tools.dotc.transform.TreeChecker$Checker.typed(TreeChecker.scala:255)
dotty.tools.dotc.typer.Typer.traverse$1(Typer.scala:2250)
dotty.tools.dotc.typer.Typer.typedStats(Typer.scala:2296)
dotty.tools.dotc.transform.TreeChecker$Checker.typedStats(TreeChecker.scala:429)
dotty.tools.dotc.typer.Typer.typedBlockStats(Typer.scala:700)
dotty.tools.dotc.typer.Typer.typedBlock(Typer.scala:703)
dotty.tools.dotc.transform.TreeChecker$Checker.typedBlock$$anonfun$1(TreeChecker.scala:411)
dotty.tools.dotc.transform.TreeChecker$Checker.withDefinedSyms(TreeChecker.scala:169)
dotty.tools.dotc.transform.TreeChecker$Checker.typedBlock(TreeChecker.scala:411)
dotty.tools.dotc.typer.Typer.typedUnnamed$1(Typer.scala:2138)
dotty.tools.dotc.typer.Typer.typedUnadapted(Typer.scala:2185)
dotty.tools.dotc.typer.ReTyper.typedUnadapted(ReTyper.scala:124)
dotty.tools.dotc.transform.TreeChecker$Checker.typedUnadapted(TreeChecker.scala:267)
dotty.tools.dotc.typer.Typer.typed(Typer.scala:2219)
dotty.tools.dotc.typer.Typer.typed(Typer.scala:2231)
dotty.tools.dotc.transform.TreeChecker$Checker.typed(TreeChecker.scala:255)
dotty.tools.dotc.typer.Typer.typedExpr(Typer.scala:2307)
dotty.tools.dotc.typer.Typer.typedBlock(Typer.scala:704)
dotty.tools.dotc.transform.TreeChecker$Checker.typedBlock$$anonfun$1(TreeChecker.scala:411)
dotty.tools.dotc.transform.TreeChecker$Checker.withDefinedSyms(TreeChecker.scala:169)
dotty.tools.dotc.transform.TreeChecker$Checker.typedBlock(TreeChecker.scala:411)
dotty.tools.dotc.typer.Typer.typedUnnamed$1(Typer.scala:2138)
dotty.tools.dotc.typer.Typer.typedUnadapted(Typer.scala:2185)
dotty.tools.dotc.typer.ReTyper.typedUnadapted(ReTyper.scala:124)
dotty.tools.dotc.transform.TreeChecker$Checker.typedUnadapted(TreeChecker.scala:267)
dotty.tools.dotc.typer.Typer.typed(Typer.scala:2219)
dotty.tools.dotc.typer.Typer.typed(Typer.scala:2231)
dotty.tools.dotc.transform.TreeChecker$Checker.typed(TreeChecker.scala:255)
dotty.tools.dotc.typer.Typer.typedInlined(Typer.scala:1229)
dotty.tools.dotc.transform.TreeChecker$Checker.typedInlined$$anonfun$1(TreeChecker.scala:414)
dotty.tools.dotc.transform.TreeChecker$Checker.withDefinedSyms(TreeChecker.scala:169)
dotty.tools.dotc.transform.TreeChecker$Checker.typedInlined(TreeChecker.scala:414)
dotty.tools.dotc.typer.Typer.typedUnnamed$1(Typer.scala:2151)
dotty.tools.dotc.typer.Typer.typedUnadapted(Typer.scala:2185)
dotty.tools.dotc.typer.ReTyper.typedUnadapted(ReTyper.scala:124)
dotty.tools.dotc.transform.TreeChecker$Checker.typedUnadapted(TreeChecker.scala:267)
dotty.tools.dotc.typer.Typer.typed(Typer.scala:2219)
dotty.tools.dotc.typer.Typer.typed(Typer.scala:2231)
dotty.tools.dotc.transform.TreeChecker$Checker.typed(TreeChecker.scala:255)
dotty.tools.dotc.typer.Typer.typedInlined(Typer.scala:1229)
dotty.tools.dotc.transform.TreeChecker$Checker.typedInlined$$anonfun$1(TreeChecker.scala:414)
dotty.tools.dotc.transform.TreeChecker$Checker.withDefinedSyms(TreeChecker.scala:169)
dotty.tools.dotc.transform.TreeChecker$Checker.typedInlined(TreeChecker.scala:414)
dotty.tools.dotc.typer.Typer.typedUnnamed$1(Typer.scala:2151)
dotty.tools.dotc.typer.Typer.typedUnadapted(Typer.scala:2185)
dotty.tools.dotc.typer.ReTyper.typedUnadapted(ReTyper.scala:124)
dotty.tools.dotc.transform.TreeChecker$Checker.typedUnadapted(TreeChecker.scala:267)
dotty.tools.dotc.typer.Typer.typed(Typer.scala:2219)
dotty.tools.dotc.typer.Typer.typed(Typer.scala:2231)
dotty.tools.dotc.transform.TreeChecker$Checker.typed(TreeChecker.scala:255)
dotty.tools.dotc.typer.Typer.typedExpr(Typer.scala:2307)
dotty.tools.dotc.typer.Typer.typedBlock(Typer.scala:704)
dotty.tools.dotc.transform.TreeChecker$Checker.typedBlock$$anonfun$1(TreeChecker.scala:411)
dotty.tools.dotc.transform.TreeChecker$Checker.withDefinedSyms(TreeChecker.scala:169)
dotty.tools.dotc.transform.TreeChecker$Checker.typedBlock(TreeChecker.scala:411)
dotty.tools.dotc.typer.Typer.typedUnnamed$1(Typer.scala:2138)
dotty.tools.dotc.typer.Typer.typedUnadapted(Typer.scala:2185)
dotty.tools.dotc.typer.ReTyper.typedUnadapted(ReTyper.scala:124)
dotty.tools.dotc.transform.TreeChecker$Checker.typedUnadapted(TreeChecker.scala:267)
dotty.tools.dotc.typer.Typer.typed(Typer.scala:2219)
dotty.tools.dotc.typer.Typer.typed(Typer.scala:2231)
dotty.tools.dotc.transform.TreeChecker$Checker.typed(TreeChecker.scala:255)
dotty.tools.dotc.typer.Typer.typedExpr(Typer.scala:2307)
dotty.tools.dotc.typer.Typer.typedBlock(Typer.scala:704)
dotty.tools.dotc.transform.TreeChecker$Checker.typedBlock$$anonfun$1(TreeChecker.scala:411)
dotty.tools.dotc.transform.TreeChecker$Checker.withDefinedSyms(TreeChecker.scala:169)
dotty.tools.dotc.transform.TreeChecker$Checker.typedBlock(TreeChecker.scala:411)
dotty.tools.dotc.typer.Typer.typedUnnamed$1(Typer.scala:2138)
dotty.tools.dotc.typer.Typer.typedUnadapted(Typer.scala:2185)
dotty.tools.dotc.typer.ReTyper.typedUnadapted(ReTyper.scala:124)
dotty.tools.dotc.transform.TreeChecker$Checker.typedUnadapted(TreeChecker.scala:267)
dotty.tools.dotc.typer.Typer.typed(Typer.scala:2219)
dotty.tools.dotc.typer.Typer.typed(Typer.scala:2231)
dotty.tools.dotc.transform.TreeChecker$Checker.typed(TreeChecker.scala:255)
dotty.tools.dotc.typer.Typer.typedInlined(Typer.scala:1229)
dotty.tools.dotc.transform.TreeChecker$Checker.typedInlined$$anonfun$1(TreeChecker.scala:414)
dotty.tools.dotc.transform.TreeChecker$Checker.withDefinedSyms(TreeChecker.scala:169)
dotty.tools.dotc.transform.TreeChecker$Checker.typedInlined(TreeChecker.scala:414)
dotty.tools.dotc.typer.Typer.typedUnnamed$1(Typer.scala:2151)
dotty.tools.dotc.typer.Typer.typedUnadapted(Typer.scala:2185)
dotty.tools.dotc.typer.ReTyper.typedUnadapted(ReTyper.scala:124)
dotty.tools.dotc.transform.TreeChecker$Checker.typedUnadapted(TreeChecker.scala:267)
dotty.tools.dotc.typer.Typer.typed(Typer.scala:2219)
dotty.tools.dotc.typer.Typer.typed(Typer.scala:2217)
dotty.tools.dotc.typer.Typer.typed(Typer.scala:2231)
dotty.tools.dotc.transform.TreeChecker$Checker.typed(TreeChecker.scala:255)
dotty.tools.dotc.typer.ReTyper.typedTyped(ReTyper.scala:60)
dotty.tools.dotc.typer.Typer.typedUnnamed$1(Typer.scala:2135)
dotty.tools.dotc.typer.Typer.typedUnadapted(Typer.scala:2185)
dotty.tools.dotc.typer.ReTyper.typedUnadapted(ReTyper.scala:124)
dotty.tools.dotc.transform.TreeChecker$Checker.typedUnadapted(TreeChecker.scala:267)
dotty.tools.dotc.typer.Typer.typed(Typer.scala:2219)
dotty.tools.dotc.typer.Typer.typed(Typer.scala:2217)
dotty.tools.dotc.typer.Typer.typed(Typer.scala:2231)
dotty.tools.dotc.transform.TreeChecker$Checker.typed(TreeChecker.scala:255)
dotty.tools.dotc.typer.Typer.typedInlined(Typer.scala:1229)
dotty.tools.dotc.transform.TreeChecker$Checker.typedInlined$$anonfun$1(TreeChecker.scala:414)
dotty.tools.dotc.transform.TreeChecker$Checker.withDefinedSyms(TreeChecker.scala:169)
dotty.tools.dotc.transform.TreeChecker$Checker.typedInlined(TreeChecker.scala:414)
dotty.tools.dotc.typer.Typer.typedUnnamed$1(Typer.scala:2151)
dotty.tools.dotc.typer.Typer.typedUnadapted(Typer.scala:2185)
dotty.tools.dotc.typer.ReTyper.typedUnadapted(ReTyper.scala:124)
dotty.tools.dotc.transform.TreeChecker$Checker.typedUnadapted(TreeChecker.scala:267)
dotty.tools.dotc.typer.Typer.typed(Typer.scala:2219)
dotty.tools.dotc.typer.Typer.typed(Typer.scala:2231)
dotty.tools.dotc.transform.TreeChecker$Checker.typed(TreeChecker.scala:255)
dotty.tools.dotc.typer.Typer.typedExpr(Typer.scala:2307)
dotty.tools.dotc.typer.Typer.typedBlock(Typer.scala:704)
dotty.tools.dotc.transform.TreeChecker$Checker.typedBlock$$anonfun$1(TreeChecker.scala:411)
dotty.tools.dotc.transform.TreeChecker$Checker.withDefinedSyms(TreeChecker.scala:169)
dotty.tools.dotc.transform.TreeChecker$Checker.typedBlock(TreeChecker.scala:411)
dotty.tools.dotc.typer.Typer.typedUnnamed$1(Typer.scala:2138)
dotty.tools.dotc.typer.Typer.typedUnadapted(Typer.scala:2185)
dotty.tools.dotc.typer.ReTyper.typedUnadapted(ReTyper.scala:124)
dotty.tools.dotc.transform.TreeChecker$Checker.typedUnadapted(TreeChecker.scala:267)
dotty.tools.dotc.typer.Typer.typed(Typer.scala:2219)
dotty.tools.dotc.typer.Typer.typed(Typer.scala:2231)
dotty.tools.dotc.transform.TreeChecker$Checker.typed(TreeChecker.scala:255)
dotty.tools.dotc.typer.Typer.typedExpr(Typer.scala:2307)
dotty.tools.dotc.typer.Typer.typedDefDef(Typer.scala:1546)
dotty.tools.dotc.transform.TreeChecker$Checker.typedDefDef$$anonfun$2$$anonfun$1(TreeChecker.scala:398)
dotty.tools.dotc.transform.TreeChecker$Checker.withDefinedSyms(TreeChecker.scala:169)
dotty.tools.dotc.transform.TreeChecker$Checker.typedDefDef$$anonfun$1(TreeChecker.scala:401)
dotty.tools.dotc.transform.TreeChecker$Checker.withDefinedSyms(TreeChecker.scala:169)
dotty.tools.dotc.transform.TreeChecker$Checker.typedDefDef(TreeChecker.scala:402)
dotty.tools.dotc.typer.Typer.typedNamed$1(Typer.scala:2118)
dotty.tools.dotc.typer.Typer.typedUnadapted(Typer.scala:2184)
dotty.tools.dotc.typer.ReTyper.typedUnadapted(ReTyper.scala:124)
dotty.tools.dotc.transform.TreeChecker$Checker.typedUnadapted(TreeChecker.scala:267)
dotty.tools.dotc.typer.Typer.typed(Typer.scala:2219)
dotty.tools.dotc.typer.Typer.typed(Typer.scala:2231)
dotty.tools.dotc.transform.TreeChecker$Checker.typed(TreeChecker.scala:255)
dotty.tools.dotc.typer.Typer.traverse$1(Typer.scala:2250)
dotty.tools.dotc.typer.Typer.typedStats(Typer.scala:2296)
dotty.tools.dotc.transform.TreeChecker$Checker.typedStats(TreeChecker.scala:429)
dotty.tools.dotc.typer.Typer.typedClassDef(Typer.scala:1679)
dotty.tools.dotc.transform.TreeChecker$Checker.typedClassDef(TreeChecker.scala:382)
dotty.tools.dotc.typer.Typer.typedNamed$1(Typer.scala:2121)
dotty.tools.dotc.typer.Typer.typedUnadapted(Typer.scala:2184)
dotty.tools.dotc.typer.ReTyper.typedUnadapted(ReTyper.scala:124)
dotty.tools.dotc.transform.TreeChecker$Checker.typedUnadapted(TreeChecker.scala:267)
dotty.tools.dotc.typer.Typer.typed(Typer.scala:2219)
dotty.tools.dotc.typer.Typer.typed(Typer.scala:2231)
dotty.tools.dotc.transform.TreeChecker$Checker.typed(TreeChecker.scala:255)
dotty.tools.dotc.typer.Typer.traverse$1(Typer.scala:2250)
dotty.tools.dotc.typer.Typer.typedStats(Typer.scala:2296)
dotty.tools.dotc.transform.TreeChecker$Checker.typedStats(TreeChecker.scala:429)
dotty.tools.dotc.typer.Typer.typedPackageDef(Typer.scala:1798)
dotty.tools.dotc.typer.Typer.typedUnnamed$1(Typer.scala:2161)
dotty.tools.dotc.typer.Typer.typedUnadapted(Typer.scala:2185)
dotty.tools.dotc.typer.ReTyper.typedUnadapted(ReTyper.scala:124)
dotty.tools.dotc.transform.TreeChecker$Checker.typedUnadapted(TreeChecker.scala:267)
dotty.tools.dotc.typer.Typer.typed(Typer.scala:2219)
dotty.tools.dotc.typer.Typer.typed(Typer.scala:2231)
dotty.tools.dotc.transform.TreeChecker$Checker.typed(TreeChecker.scala:255)
dotty.tools.dotc.typer.Typer.typedExpr(Typer.scala:2307)
dotty.tools.dotc.transform.TreeChecker.check(TreeChecker.scala:122)
dotty.tools.dotc.transform.TreeChecker.run(TreeChecker.scala:94)
dotty.tools.dotc.core.Phases$Phase.runOn$$anonfun$1(Phases.scala:316)
scala.collection.immutable.List.map(List.scala:286)
dotty.tools.dotc.core.Phases$Phase.runOn(Phases.scala:318)
dotty.tools.dotc.Run.runPhases$4$$anonfun$4(Run.scala:158)
dotty.runtime.function.JProcedure1.apply(JProcedure1.java:15)
dotty.runtime.function.JProcedure1.apply(JProcedure1.java:10)
scala.collection.IndexedSeqOptimized.foreach(IndexedSeqOptimized.scala:36)
scala.collection.IndexedSeqOptimized.foreach$(IndexedSeqOptimized.scala:33)
scala.collection.mutable.ArrayOps$ofRef.foreach(ArrayOps.scala:198)
dotty.tools.dotc.Run.runPhases$5(Run.scala:170)
dotty.tools.dotc.Run.compileUnits$$anonfun$1(Run.scala:178)
dotty.runtime.function.JFunction0$mcV$sp.apply(JFunction0$mcV$sp.java:12)
dotty.tools.dotc.util.Stats$.maybeMonitored(Stats.scala:102)
dotty.tools.dotc.Run.compileUnits(Run.scala:185)
dotty.tools.dotc.Run.compileSources(Run.scala:120)
dotty.tools.dotc.Run.compile(Run.scala:104)
dotty.tools.dotc.Driver.doCompile(Driver.scala:34)
dotty.tools.dotc.Driver.process(Driver.scala:172)
dotty.tools.dotc.Driver.process(Driver.scala:141)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

No branches or pull requests

1 participant