New compilation failure when for-loop and match both used in async (after upgrading 0.9.5→0.9.7)
See original GitHub issueI 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: a74c5d997806a37d164cfd0a9d8da9f4f1dbe522 afa62ed96da96b0b7619165bee4d64abc052f2b4 2e7794c0d10aa54ff4ad3c8563e999020873ab1e dd3ddf950b20138a0f845a2ba571fc6ccdfe06ce 070ac891bb87d0f767065ed65dfaf94dbe0fc1f0 2f744f2b73003d3d819c5a93bfc622c5f6e9a05d b3d9feb2a2e9c2305e2f65d0a55a9f22753d5c46 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.
Issue Analytics
- State:
- Created 2 years ago
- Comments:5 (3 by maintainers)
should be fixed now.
It’s with 0.9.7 and dotty 3.1.1. The issue still does happen on the latest master too (d82a36a5fce247eeeb6658cd92112f649f0825c9).
Thanks for looking into this