Skip to content

Incorrectly setting sources for macros from separate compilation #7342

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
anatoliykmetyuk opened this issue Sep 30, 2019 · 1 comment
Closed

Comments

@anatoliykmetyuk
Copy link
Contributor

Macros_1.scala:

import scala.quoted.{ QuoteContext, Expr }

inline def g(em: Expr[String])(given QuoteContext) = '{$em}

Macros_2.scala:

import scala.quoted.{ QuoteContext, Expr }

def h(m: Expr[String])(given QuoteContext): Expr[Any] = g(m)

Compile them separately and Macros_2.scala should be compiled with -Ycheck:all, e.g.:

sbt:dotty> ;dotty-bootstrapped/dotc ../pg/i2/Macros_1.scala ;dotty-bootstrapped/dotc -Ycheck:all -classpath . ../pg/i2/Macros_2.scala

You will get:

Ycheck failure
checking ../pg/i2/Macros_2.scala after phase inlinedPositions
*** error while checking ../pg/i2/Macros_2.scala after phase inlinedPositions ***
exception occurred while compiling ../pg/i2/Macros_2.scala
java.lang.AssertionError: assertion failed: wrong source set for {
  m
} # 2061 of class dotty.tools.dotc.ast.Trees$Inlined, set to /Users/anatolii/Projects/dotty/dotty/../pg/i2/Macros_1.scala but context had ../pg/i2/Macros_2.scala while compiling ../pg/i2/Macros_2.scala
Exception in thread "main" java.lang.AssertionError: assertion failed: wrong source set for {
  m
} # 2061 of class dotty.tools.dotc.ast.Trees$Inlined, set to /Users/anatolii/Projects/dotty/dotty/../pg/i2/Macros_1.scala but context had ../pg/i2/Macros_2.scala
	at dotty.DottyPredef$.assertFail(DottyPredef.scala:17)
	at dotty.tools.dotc.transform.YCheckPositions$$anon$1.traverse(YCheckPositions.scala:33)
	at dotty.tools.dotc.transform.YCheckPositions$$anon$1.traverse(YCheckPositions.scala:48)
	at dotty.tools.dotc.transform.YCheckPositions$$anon$1.traverse(YCheckPositions.scala:48)
	at dotty.tools.dotc.ast.Trees$Instance$TreeTraverser.apply(Trees.scala:1482)
	at dotty.tools.dotc.ast.Trees$Instance$TreeTraverser.apply(Trees.scala:1482)
	at dotty.tools.dotc.ast.Trees$Instance$TreeAccumulator.foldOver(Trees.scala:1449)
	at dotty.tools.dotc.ast.Trees$Instance$TreeTraverser.traverseChildren(Trees.scala:1483)
	at dotty.tools.dotc.transform.YCheckPositions$$anon$1.traverse(YCheckPositions.scala:50)
	at dotty.tools.dotc.ast.Trees$Instance$TreeTraverser.apply(Trees.scala:1482)
	at dotty.tools.dotc.ast.Trees$Instance$TreeTraverser.apply(Trees.scala:1482)
	at dotty.tools.dotc.ast.Trees$Instance$TreeAccumulator.apply$$anonfun$1(Trees.scala:1368)
	at scala.collection.LinearSeqOps.foldLeft(LinearSeq.scala:169)
	at scala.collection.LinearSeqOps.foldLeft$(LinearSeq.scala:165)
	at scala.collection.immutable.List.foldLeft(List.scala:79)
	at dotty.tools.dotc.ast.Trees$Instance$TreeAccumulator.apply(Trees.scala:1368)
	at dotty.tools.dotc.ast.Trees$Instance$TreeAccumulator.foldOver(Trees.scala:1454)
	at dotty.tools.dotc.ast.Trees$Instance$TreeTraverser.traverseChildren(Trees.scala:1483)
	at dotty.tools.dotc.transform.YCheckPositions$$anon$1.traverse(YCheckPositions.scala:50)
	at dotty.tools.dotc.ast.Trees$Instance$TreeTraverser.apply(Trees.scala:1482)
	at dotty.tools.dotc.ast.Trees$Instance$TreeTraverser.apply(Trees.scala:1482)
	at dotty.tools.dotc.ast.Trees$Instance$TreeAccumulator.foldOver(Trees.scala:1452)
	at dotty.tools.dotc.ast.Trees$Instance$TreeTraverser.traverseChildren(Trees.scala:1483)
	at dotty.tools.dotc.transform.YCheckPositions$$anon$1.traverse(YCheckPositions.scala:50)
	at dotty.tools.dotc.ast.Trees$Instance$TreeTraverser.apply(Trees.scala:1482)
	at dotty.tools.dotc.ast.Trees$Instance$TreeTraverser.apply(Trees.scala:1482)
	at dotty.tools.dotc.ast.Trees$Instance$TreeAccumulator.apply$$anonfun$1(Trees.scala:1368)
	at scala.collection.LinearSeqOps.foldLeft(LinearSeq.scala:169)
	at scala.collection.LinearSeqOps.foldLeft$(LinearSeq.scala:165)
	at scala.collection.immutable.List.foldLeft(List.scala:79)
	at dotty.tools.dotc.ast.Trees$Instance$TreeAccumulator.apply(Trees.scala:1368)
	at dotty.tools.dotc.ast.Trees$Instance$TreeAccumulator.foldOver(Trees.scala:1458)
	at dotty.tools.dotc.ast.Trees$Instance$TreeTraverser.traverseChildren(Trees.scala:1483)
	at dotty.tools.dotc.transform.YCheckPositions$$anon$1.traverse(YCheckPositions.scala:50)
	at dotty.tools.dotc.transform.YCheckPositions.checkPostCondition(YCheckPositions.scala:53)
	at dotty.tools.dotc.transform.TreeChecker.dotty$tools$dotc$transform$TreeChecker$Checker$$_$typedUnadapted$$anonfun$1(TreeChecker.scala:318)
	at dotty.runtime.function.JProcedure1.apply(JProcedure1.java:15)
	at dotty.runtime.function.JProcedure1.apply(JProcedure1.java:10)
	at scala.collection.immutable.List.foreach(List.scala:305)
	at dotty.tools.dotc.transform.TreeChecker$Checker.typedUnadapted(TreeChecker.scala:318)
	at dotty.tools.dotc.typer.Typer.typed(Typer.scala:2153)
	at dotty.tools.dotc.typer.Typer.typed(Typer.scala:2165)
	at dotty.tools.dotc.transform.TreeChecker$Checker.typed(TreeChecker.scala:286)
	at dotty.tools.dotc.typer.Typer.typedExpr(Typer.scala:2241)
	at dotty.tools.dotc.transform.TreeChecker.check(TreeChecker.scala:121)
	at dotty.tools.dotc.transform.TreeChecker.run(TreeChecker.scala:94)
	at dotty.tools.dotc.core.Phases$Phase.runOn$$anonfun$1(Phases.scala:315)
	at scala.collection.immutable.List.map(List.scala:219)
	at dotty.tools.dotc.core.Phases$Phase.runOn(Phases.scala:316)
	at dotty.tools.dotc.Run.runPhases$4$$anonfun$4(Run.scala:159)
	at dotty.runtime.function.JProcedure1.apply(JProcedure1.java:15)
	at dotty.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:169)
	at dotty.tools.dotc.Run.compileUnits$$anonfun$1(Run.scala:177)
	at dotty.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:184)
	at dotty.tools.dotc.Run.compileSources(Run.scala:121)
	at dotty.tools.dotc.Run.compile(Run.scala:104)
	at dotty.tools.dotc.Driver.doCompile(Driver.scala:35)
	at dotty.tools.dotc.Driver.process(Driver.scala:178)
	at dotty.tools.dotc.Driver.process(Driver.scala:147)
	at dotty.tools.dotc.Driver.process(Driver.scala:159)
	at dotty.tools.dotc.Driver.main(Driver.scala:186)
	at dotty.tools.dotc.Main.main(Main.scala)

This could be what is blocking #7333.

@anatoliykmetyuk anatoliykmetyuk self-assigned this Sep 30, 2019
anatoliykmetyuk added a commit to dotty-staging/dotty that referenced this issue Oct 3, 2019
…ta reduction

On beta reduction of lambdas, we should create a block
and not an inline node.
@anatoliykmetyuk
Copy link
Contributor Author

Related:

Macros_1.scala

inline def h(f: => Int => Int): Int = f(42)

Macros_2.scala

inline def m = h(x => x + x)

Macros_3.scala

def g = m

Separately compile all three with -Ycheck:all:

Fail on the third one
[info] Running (fork) dotty.tools.dotc.Main -classpath .:/Users/anatolii/.ivy2/cache/org.scala-lang/scala-library/jars/scala-library-2.13.1.jar:/Users/anatolii/Projects/dotty/dotty/library/../out/bootstrap/dotty-library-bootstrapped/scala-0.20/dotty-library_0.20-0.20.0-bin-SNAPSHOT.jar -Ycheck:all -Xprint:frontend,inlinedPositions -Yprint-pos -Yshow-tree-ids /Users/anatolii/Projects/dotty/pg/i7342/versions/t/Macros_3.scala
result of /Users/anatolii/Projects/dotty/pg/i7342/versions/t/Macros_3.scala after frontend:
package <empty>@<Macros_3.scala:1>#1028 {
  final lazy module val Macros_3$package:
    Macros_3$package$@<Macros_3.scala:1>#1035
   =
    new Macros_3$package$@<Macros_3.scala:1>#1035@<Macros_3.scala:1>#1036@<
      Macros_3.scala:1
    >#1037()@<Macros_3.scala:1>#1038
  @<Macros_3.scala:1>#1039
  final module class Macros_3$package$() extends Object#1136@<Macros_3.scala:1>#
    1137
  @<Macros_3.scala:1>#1138()@<Macros_3.scala:1>#1139, _root_@<Macros_3.scala:1>#
    1047
  .scala@<Macros_3.scala:1>#1048.Serializable@<Macros_3.scala:1>#1049 {
    this: Macros_3$package@<Macros_3.scala:1>#1040.type@<Macros_3.scala:1>#1041
       =>
    def g: Int#1025 =
      {
        {
          {
            val x: Int#3085 = 42@<Macros_1.scala:1>#3074@<Macros_1.scala:1>#3086
            x@<Macros_2.scala:1>#2102.+@<Macros_2.scala:1>#2103(
              x@<Macros_2.scala:1>#2104
            )@<Macros_2.scala:1>#2105
          }@<Macros_1.scala:1>#3087:Int@<Macros_1.scala:1>#3076@<
            Macros_1.scala:1
          >#3088
        }@<Macros_2.scala:1>#2106
      }@<Macros_3.scala:1>#1179
    @<Macros_3.scala:1>#1180
  }@<Macros_3.scala:1>#1182
}@<Macros_3.scala:1>#1183
checking /Users/anatolii/Projects/dotty/pg/i7342/versions/t/Macros_3.scala after phase frontend
result of /Users/anatolii/Projects/dotty/pg/i7342/versions/t/Macros_3.scala after inlinedPositions:
  Unchanged since frontend
checking /Users/anatolii/Projects/dotty/pg/i7342/versions/t/Macros_3.scala after phase inlinedPositions
*** error while checking /Users/anatolii/Projects/dotty/pg/i7342/versions/t/Macros_3.scala after phase inlinedPositions ***
exception occurred while compiling /Users/anatolii/Projects/dotty/pg/i7342/versions/t/Macros_3.scala
java.lang.AssertionError: assertion failed: wrong source set for x@<Macros_2.scala:1>#2102.+@<Macros_2.scala:1>#2103(x@<Macros_2.scala:1>#2104)@<
  Macros_2.scala:1
>#2105 # 2105 of class dotty.tools.dotc.ast.Trees$Apply, set to /Users/anatolii/Projects/dotty/pg/i7342/versions/t/Macros_2.scala but context had /Users/anatolii/Projects/dotty/pg/i7342/versions/t/Macros_3.scala while compiling /Users/anatolii/Projects/dotty/pg/i7342/versions/t/Macros_3.scala
Exception in thread "main" java.lang.AssertionError: assertion failed: wrong source set for x@<Macros_2.scala:1>#2102.+@<Macros_2.scala:1>#2103(x@<Macros_2.scala:1>#2104)@<
  Macros_2.scala:1
>#2105 # 2105 of class dotty.tools.dotc.ast.Trees$Apply, set to /Users/anatolii/Projects/dotty/pg/i7342/versions/t/Macros_2.scala but context had /Users/anatolii/Projects/dotty/pg/i7342/versions/t/Macros_3.scala
	at dotty.DottyPredef$.assertFail(DottyPredef.scala:17)
	at dotty.tools.dotc.transform.YCheckPositions$$anon$1.traverse(YCheckPositions.scala:33)
	at dotty.tools.dotc.transform.YCheckPositions$$anon$1.traverse(YCheckPositions.scala:48)
	at dotty.tools.dotc.ast.Trees$Instance$TreeTraverser.apply(Trees.scala:1482)
	at dotty.tools.dotc.ast.Trees$Instance$TreeTraverser.apply(Trees.scala:1482)
	at dotty.tools.dotc.ast.Trees$Instance$TreeAccumulator.foldOver(Trees.scala:1394)
	at dotty.tools.dotc.ast.Trees$Instance$TreeTraverser.traverseChildren(Trees.scala:1483)
	at dotty.tools.dotc.transform.YCheckPositions$$anon$1.traverse(YCheckPositions.scala:50)
	at dotty.tools.dotc.transform.YCheckPositions$$anon$1.traverse(YCheckPositions.scala:48)
	at dotty.tools.dotc.transform.YCheckPositions$$anon$1.traverse(YCheckPositions.scala:48)
	at dotty.tools.dotc.ast.Trees$Instance$TreeTraverser.apply(Trees.scala:1482)
	at dotty.tools.dotc.ast.Trees$Instance$TreeTraverser.apply(Trees.scala:1482)
	at dotty.tools.dotc.ast.Trees$Instance$TreeAccumulator.foldOver(Trees.scala:1449)
	at dotty.tools.dotc.ast.Trees$Instance$TreeTraverser.traverseChildren(Trees.scala:1483)
	at dotty.tools.dotc.transform.YCheckPositions$$anon$1.traverse(YCheckPositions.scala:50)
	at dotty.tools.dotc.ast.Trees$Instance$TreeTraverser.apply(Trees.scala:1482)
	at dotty.tools.dotc.ast.Trees$Instance$TreeTraverser.apply(Trees.scala:1482)
	at dotty.tools.dotc.ast.Trees$Instance$TreeAccumulator.apply$$anonfun$1(Trees.scala:1368)
	at scala.collection.LinearSeqOps.foldLeft(LinearSeq.scala:169)
	at scala.collection.LinearSeqOps.foldLeft$(LinearSeq.scala:165)
	at scala.collection.immutable.List.foldLeft(List.scala:79)
	at dotty.tools.dotc.ast.Trees$Instance$TreeAccumulator.apply(Trees.scala:1368)
	at dotty.tools.dotc.ast.Trees$Instance$TreeAccumulator.foldOver(Trees.scala:1454)
	at dotty.tools.dotc.ast.Trees$Instance$TreeTraverser.traverseChildren(Trees.scala:1483)
	at dotty.tools.dotc.transform.YCheckPositions$$anon$1.traverse(YCheckPositions.scala:50)
	at dotty.tools.dotc.ast.Trees$Instance$TreeTraverser.apply(Trees.scala:1482)
	at dotty.tools.dotc.ast.Trees$Instance$TreeTraverser.apply(Trees.scala:1482)
	at dotty.tools.dotc.ast.Trees$Instance$TreeAccumulator.foldOver(Trees.scala:1452)
	at dotty.tools.dotc.ast.Trees$Instance$TreeTraverser.traverseChildren(Trees.scala:1483)
	at dotty.tools.dotc.transform.YCheckPositions$$anon$1.traverse(YCheckPositions.scala:50)
	at dotty.tools.dotc.ast.Trees$Instance$TreeTraverser.apply(Trees.scala:1482)
	at dotty.tools.dotc.ast.Trees$Instance$TreeTraverser.apply(Trees.scala:1482)
	at dotty.tools.dotc.ast.Trees$Instance$TreeAccumulator.apply$$anonfun$1(Trees.scala:1368)
	at scala.collection.LinearSeqOps.foldLeft(LinearSeq.scala:169)
	at scala.collection.LinearSeqOps.foldLeft$(LinearSeq.scala:165)
	at scala.collection.immutable.List.foldLeft(List.scala:79)
	at dotty.tools.dotc.ast.Trees$Instance$TreeAccumulator.apply(Trees.scala:1368)
	at dotty.tools.dotc.ast.Trees$Instance$TreeAccumulator.foldOver(Trees.scala:1458)
	at dotty.tools.dotc.ast.Trees$Instance$TreeTraverser.traverseChildren(Trees.scala:1483)
	at dotty.tools.dotc.transform.YCheckPositions$$anon$1.traverse(YCheckPositions.scala:50)
	at dotty.tools.dotc.transform.YCheckPositions.checkPostCondition(YCheckPositions.scala:53)
	at dotty.tools.dotc.transform.TreeChecker.dotty$tools$dotc$transform$TreeChecker$Checker$$_$typedUnadapted$$anonfun$1(TreeChecker.scala:318)
	at dotty.runtime.function.JProcedure1.apply(JProcedure1.java:15)
	at dotty.runtime.function.JProcedure1.apply(JProcedure1.java:10)
	at scala.collection.immutable.List.foreach(List.scala:305)
	at dotty.tools.dotc.transform.TreeChecker$Checker.typedUnadapted(TreeChecker.scala:318)
	at dotty.tools.dotc.typer.Typer.typed(Typer.scala:2151)
	at dotty.tools.dotc.typer.Typer.typed(Typer.scala:2163)
	at dotty.tools.dotc.transform.TreeChecker$Checker.typed(TreeChecker.scala:286)
	at dotty.tools.dotc.typer.Typer.typedExpr(Typer.scala:2239)
	at dotty.tools.dotc.transform.TreeChecker.check(TreeChecker.scala:121)
	at dotty.tools.dotc.transform.TreeChecker.run(TreeChecker.scala:94)
	at dotty.tools.dotc.core.Phases$Phase.runOn$$anonfun$1(Phases.scala:315)
	at scala.collection.immutable.List.map(List.scala:219)
	at dotty.tools.dotc.core.Phases$Phase.runOn(Phases.scala:316)
	at dotty.tools.dotc.Run.runPhases$4$$anonfun$4(Run.scala:159)
	at dotty.runtime.function.JProcedure1.apply(JProcedure1.java:15)
	at dotty.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:169)
	at dotty.tools.dotc.Run.compileUnits$$anonfun$1(Run.scala:177)
	at dotty.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:184)
	at dotty.tools.dotc.Run.compileSources(Run.scala:121)
	at dotty.tools.dotc.Run.compile(Run.scala:104)
	at dotty.tools.dotc.Driver.doCompile(Driver.scala:35)
	at dotty.tools.dotc.Driver.process(Driver.scala:178)
	at dotty.tools.dotc.Driver.process(Driver.scala:147)
	at dotty.tools.dotc.Driver.process(Driver.scala:159)
	at dotty.tools.dotc.Driver.main(Driver.scala:186)
	at dotty.tools.dotc.Main.main(Main.scala)

@nicolasstucki nicolasstucki removed their assignment Nov 12, 2019
nicolasstucki pushed a commit to dotty-staging/dotty that referenced this issue Mar 9, 2020
…ta reduction

On beta reduction of lambdas, we should create a block
and not an inline node.
nicolasstucki added a commit that referenced this issue Mar 9, 2020
Fix #7342: Incorrectly setting sources for inlined lambdas on beta reduction
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

2 participants