rssh/dotty-cps-async

New compilation failure when for-loop and match both used in async (after upgrading 0.9.5→0.9.7)

ScoreUnder opened this issue · 5 comments

I found a compile-time error in my project which I bisected to one of these commits in dotty-cps-async:

There are only 'skip'ped commits left to test.
The first bad commit could be any of:
a74c5d9
afa62ed
2e7794c
dd3ddf9
070ac89
2f744f2
b3d9feb
We cannot bisect more!

I had to skip some which either would not build on my machine or which did not run in my project for other reasons (class version mismatch).

I have tried to minimise the code which triggers the bug, but here are a few pieces of code that all trigger it:

Import statements
import cps.*
import cps.monads.FutureAsyncMonad
import scala.concurrent.ExecutionContext.Implicits.global
import scala.concurrent.Future
    def thing(): Future[String] =
      async {
        for _ <- Nil do
          ???

        Option("") match
          case None =>
          case Some(_) =>
            await(??? : Future[Unit])

        "Test"
      }
    def thing(): Future[String] =
      async {
        for _ <- Nil do
          ???

        Option("") match
          case None =>
            await(??? : Future[String])
          case Some(_) =>
            await(??? : Future[String])
      }
    def thing(): Future[String] =
      async {
        for _ <- Nil do
          ???

        await({
          Option("") match
            case None =>
              ??? : Future[String]
            case Some(_) =>
              ??? : Future[String]
        })
      }

(Pick whichever is the simpler example for your internals)

Notably, removing the foreach-loop (which is not using await) somehow makes it work again, as does collapsing the match. In the 3rd example, if you extract the argument to await into a variable and await on the variable instead, that works too.

real-life code where I worked around it: ScoreUnder/canti-bot@a92a67c

rssh commented

Hi, thanks - will look.
It's with 0.9.8 and dotty-3.1.1 ?

It's with 0.9.8 and dotty-3.1.1 ?

It's with 0.9.7 and dotty 3.1.1. The issue still does happen on the latest master too (d82a36a).

Thanks for looking into this

rssh commented

should be fixed now.