Closed
Description
Compiler version
Latest Dotty nightly build version: 3.0.0-RC1-bin-20210128-ce684de-NIGHTLY
Minimized code
class X.scala
package x
import scala.quoted._
class SL:
inline def foo(inline step: Int => Int): SL =
val f = step
this
def run1(): Unit = ???
inline def run(): Unit =
run1()
object X:
inline def process[T](inline f:T) = ${
processImpl[T]('f)
}
def processImpl[T:Type](t:Expr[T])(using Quotes):Expr[T] =
import quotes.reflect._
val checker = new TreeMap() {}
checker.transformTerm(t.asTerm)(Symbol.spliceOwner)
t
Main.scala:
package x
object Main {
def main(args:Array[String]):Unit =
val sl = new SL()
X.process(
sl.foo(x=>x+1).run()
)
}
compile with -Ycheck:macros flag (flag is essential)
Output (click arrow to expand)
Latest Dotty nightly build version: 3.0.0-RC1-bin-20210128-ce684de-NIGHTLY
[info] loading settings for project root from build.sbt ...
[info] set current project to test (in build file:/Users/rssh/tests/dotty/crash-yycheck-macros-light/)
[info] compiling 2 Scala sources to /Users/rssh/tests/dotty/crash-yycheck-macros-light/target/scala-3.0.0-RC1/classes ..
[error] -- Error: /Users/rssh/tests/dotty/crash-yycheck-macros-light/src/main/scala/x/Main.scala:8:13
[error] 8 | X.process(
[error] | ^
[error] |Exception occurred while executing macro expansion.
[error] |java.lang.AssertionError: assertion failed: Tree had an unexpected owner for val f
[error] |Expected: val SL_this (x.Main$._$_$SL_this)
[error] |But was: val macro (x.Main$._$macro)
[error] |
[error] |
[error] |The code of the definition of val f is
[error] |val f: scala.Function1[scala.Int, scala.Int] = ((x: scala.Int) => x.+(1))
[error] |
[error] |which was found in the code
[error] |({
[error] | val f: scala.Function1[scala.Int, scala.Int] = ((x: scala.Int) => x.+(1))
[error] | SL_this
[error] |}: x.SL)
[error] |
[error] |which has the AST representation
[error] |Inlined(Some(Apply(Select(Ident("sl"), "foo"), List(Block(List(DefDef("$anonfun", List(TermParamClause(List(ValDef("x", Inferred(), None)))), Inferred(), Some(Apply(Select(Ident("x"), "+"), List(Literal(IntConstant(1))))))), Closure(Ident("$anonfun"), None))))), Nil, Typed(Block(List(ValDef("f", Inferred(), Some(Inlined(None, Nil, Block(List(DefDef("$anonfun", List(TermParamClause(List(ValDef("x", Inferred(), None)))), Inferred(), Some(Apply(Select(Ident("x"), "+"), List(Literal(IntConstant(1))))))), Closure(Ident("$anonfun"), None)))))), Inlined(None, Nil, Ident("SL_this"))), TypeIdent("SL")))
[error] |
[error] |
[error] | at scala.runtime.Scala3RunTime$.assertFailed(Scala3RunTime.scala:8)
[error] | at scala.quoted.runtime.impl.QuotesImpl$$anon$9.traverse(QuotesImpl.scala:2823)
[error] | at dotty.tools.dotc.ast.Trees$Instance$TreeTraverser.apply(Trees.scala:1563)
[error] | at dotty.tools.dotc.ast.Trees$Instance$TreeTraverser.apply(Trees.scala:1563)
[error] | at dotty.tools.dotc.ast.Trees$Instance$TreeAccumulator.fold$1(Trees.scala:1436)
[error] | at dotty.tools.dotc.ast.Trees$Instance$TreeAccumulator.apply(Trees.scala:1438)
[error] | at dotty.tools.dotc.ast.Trees$Instance$TreeAccumulator.foldOver(Trees.scala:1471)
[error] | at dotty.tools.dotc.ast.Trees$Instance$TreeTraverser.traverseChildren(Trees.scala:1564)
[error] | at scala.quoted.runtime.impl.QuotesImpl$$anon$9.traverse(QuotesImpl.scala:2826)
[error] | at dotty.tools.dotc.ast.Trees$Instance$TreeTraverser.apply(Trees.scala:1563)
[error] | at dotty.tools.dotc.ast.Trees$Instance$TreeTraverser.apply(Trees.scala:1563)
[error] | at dotty.tools.dotc.ast.Trees$Instance$TreeAccumulator.foldOver(Trees.scala:1465)
[error] | at dotty.tools.dotc.ast.Trees$Instance$TreeAccumulator.foldOver(Trees.scala:1442)
[error] | at dotty.tools.dotc.ast.Trees$Instance$TreeTraverser.traverseChildren(Trees.scala:1564)
[error] | at scala.quoted.runtime.impl.QuotesImpl$$anon$9.traverse(QuotesImpl.scala:2826)
[error] | at dotty.tools.dotc.ast.Trees$Instance$TreeTraverser.apply(Trees.scala:1563)
[error] | at dotty.tools.dotc.ast.Trees$Instance$TreeTraverser.apply(Trees.scala:1563)
[error] | at dotty.tools.dotc.ast.Trees$Instance$TreeAccumulator.foldOver(Trees.scala:1491)
[error] | at dotty.tools.dotc.ast.Trees$Instance$TreeTraverser.traverseChildren(Trees.scala:1564)
[error] | at scala.quoted.runtime.impl.QuotesImpl$$anon$9.traverse(QuotesImpl.scala:2826)
[error] | at scala.quoted.runtime.impl.QuotesImpl$reflect$.yCheckOwners(QuotesImpl.scala:2827)
[error] | at scala.quoted.runtime.impl.QuotesImpl$reflect$.scala$quoted$runtime$impl$QuotesImpl$reflect$$$yCheckedOwners(QuotesImpl.scala:2789)
[error] | at scala.quoted.runtime.impl.QuotesImpl$reflect$ValDef$.copy(QuotesImpl.scala:294)
[error] | at scala.quoted.runtime.impl.QuotesImpl$reflect$ValDef$.copy(QuotesImpl.scala:293)
[error] | at scala.quoted.Quotes$reflectModule$TreeMap.transformStatement(Quotes.scala:4266)
[error] | at scala.quoted.Quotes$reflectModule$TreeMap.transformStatement$(Quotes.scala:4229)
[error] | at x.X$$anon$1.transformStatement(X.scala:25)
[error] | at scala.quoted.Quotes$reflectModule$TreeMap.transformTree(Quotes.scala:4240)
[error] | at scala.quoted.Quotes$reflectModule$TreeMap.transformTree$(Quotes.scala:4229)
[error] | at x.X$$anon$1.transformTree(X.scala:25)
[error] | at scala.quoted.Quotes$reflectModule$TreeMap.transformTrees$$anonfun$1(Quotes.scala:4370)
[error] | at scala.collection.immutable.List.mapConserve(List.scala:472)
[error] | at scala.quoted.Quotes$reflectModule$TreeMap.transformTrees(Quotes.scala:4370)
[error] | at scala.quoted.Quotes$reflectModule$TreeMap.transformTrees$(Quotes.scala:4229)
[error] | at x.X$$anon$1.transformTrees(X.scala:25)
[error] | at scala.quoted.Quotes$reflectModule$TreeMap.transformSubTrees(Quotes.scala:4385)
[error] | at scala.quoted.Quotes$reflectModule$TreeMap.transformSubTrees$(Quotes.scala:4229)
[error] | at x.X$$anon$1.transformSubTrees(X.scala:25)
[error] | at scala.quoted.Quotes$reflectModule$TreeMap.transformTerm(Quotes.scala:4327)
[error] | at scala.quoted.Quotes$reflectModule$TreeMap.transformTerm$(Quotes.scala:4229)
[error] | at x.X$$anon$1.transformTerm(X.scala:25)
[error] | at scala.quoted.Quotes$reflectModule$TreeMap.transformTerm(Quotes.scala:4311)
[error] | at scala.quoted.Quotes$reflectModule$TreeMap.transformTerm$(Quotes.scala:4229)
[error] | at x.X$$anon$1.transformTerm(X.scala:25)
[error] | at scala.quoted.Quotes$reflectModule$TreeMap.transformTerm(Quotes.scala:4327)
[error] | at scala.quoted.Quotes$reflectModule$TreeMap.transformTerm$(Quotes.scala:4229)
[error] | at x.X$$anon$1.transformTerm(X.scala:25)
[error] | at x.X$.processImpl(X.scala:26)
[error] |
[error] | This location contains code that was inlined from Main.scala:8
[error] 9 | sl.foo(x=>x+1).run()
[error] 10 | )
[error] one error found
[error] one error found
[error] (Compile / compileIncremental) Compilation failed