Skip to content

Commit

Permalink
remove non-deterministic cancellation of async TASTy in sbt-test
Browse files Browse the repository at this point in the history
how-i-fixed-it:

Originally these tests were written before we
implemented async TASTy writing. This meant that we blocked the
main thread at the end of ExtractAPI until TASTy was written.

This meant that -Ystop-after:firstTransform would prevent the
compiler reaching the backend, but stop after we knew that TASTy
was written to a-early.jar

Originally we did this to explicitly communicate that TASTy comes
from a-early.jar, rather than genBCode output.
In reality, it doesn't assert anything stronger than a comment would,
because we manually fix the classpath to only be a-early.jar.

After we added async TASTy writing, this test became non-deterministic,
because we cancel async TASTy writing at the end of a run
without synchronizing. So its possible TASTy isn't written
by the time we cancel after firstTransform.

So instead, we remove -Ystop-after, guaranteeing that 'a/compile' does not
finish until we synchronize async TASTy in genBCode.
  • Loading branch information
bishabosha committed May 2, 2024
1 parent e6bc130 commit 8603146
Show file tree
Hide file tree
Showing 2 changed files with 7 additions and 4 deletions.
6 changes: 4 additions & 2 deletions sbt-test/pipelining/Yearly-tasty-output-inline/build.sbt
Original file line number Diff line number Diff line change
@@ -1,8 +1,10 @@
// defines a inline method
// NOTE: in this test, we are explictly fixing the classpath of project `b` to be `a-early.jar`
// to manually test pipelining without sbt/zinc managing the classpath.

// defines a inline method.
lazy val a = project.in(file("a"))
.settings(
scalacOptions ++= Seq("-Yearly-tasty-output", ((ThisBuild / baseDirectory).value / "a-early.jar").toString),
scalacOptions += "-Ystop-after:firstTransform",
scalacOptions += "-Ycheck:all",
)

Expand Down
5 changes: 3 additions & 2 deletions sbt-test/pipelining/Yearly-tasty-output/build.sbt
Original file line number Diff line number Diff line change
@@ -1,16 +1,17 @@
// NOTE: in this test, we are explictly fixing the classpath of project `c` to be `a-early.jar:b-early-out`
// to manually test pipelining without sbt/zinc managing the classpath.

// early out is a jar
lazy val a = project.in(file("a"))
.settings(
scalacOptions ++= Seq("-Yearly-tasty-output", ((ThisBuild / baseDirectory).value / "a-early.jar").toString),
scalacOptions += "-Ystop-after:firstTransform",
scalacOptions += "-Ycheck:all",
)

// early out is a directory
lazy val b = project.in(file("b"))
.settings(
scalacOptions ++= Seq("-Yearly-tasty-output", ((ThisBuild / baseDirectory).value / "b-early-out").toString),
scalacOptions += "-Ystop-after:firstTransform",
scalacOptions += "-Ycheck:all",
)

Expand Down

0 comments on commit 8603146

Please sign in to comment.