-
Notifications
You must be signed in to change notification settings - Fork 1.1k
Open
Labels
area:match-typesitype:bugitype:compiler hangsIssues where the compiler hangs.Issues where the compiler hangs.stat:fixed in nextThe issue was fixed in Next and only still applies to LTS.The issue was fixed in Next and only still applies to LTS.
Description
Compiler version
3.3.5 LTS (3.6.4 works as expected)
Minimized code
//> using scala 3.3.5
import scala.compiletime.*
trait InlineFoldR[Acc[_ <: Tuple]]:
inline def apply[Elem, T <: Tuple](acc: Acc[T]): Acc[Elem *: T]
object InlineFoldR:
inline def fold[Acc[_ <: Tuple], T <: Tuple](
acc: Acc[EmptyTuple],
f: InlineFoldR[Acc]
): Acc[T] =
inline erasedValue[T] match
case _: EmptyTuple => acc.asInstanceOf[Acc[T]]
case _: (h1 *: h2 *: h3 *: h4 *: ts) =>
f[h1, h2 *: h3 *: h4 *: ts](
f[h2, h3 *: h4 *: ts](
f[h3, h4 *: ts](f[h4, ts](fold[Acc, ts](acc, f)))
)
).asInstanceOf[Acc[T]]
case _: (h *: ts) =>
f[h, ts](fold[Acc, ts](acc, f)).asInstanceOf[Acc[T]]
type DropUnits[A <: Tuple] <: Tuple = A match
case hd *: tl =>
hd match
case Unit => DropUnits[tl]
case Any => hd *: DropUnits[tl]
case EmptyTuple => EmptyTuple
object DropUnits:
object DropInlined extends InlineFoldR[[T <: Tuple] =>> T => DropUnits[T]]:
inline def apply[Elem, T <: Tuple](
acc: T => DropUnits[T]
): (Elem *: T) => DropUnits[Elem *: T] =
(elem: Elem *: T) =>
inline erasedValue[Elem & Matchable] match
case _: Unit => acc(elem.tail)
case _ => elem.head *: acc(elem.tail)
inline def drop[A <: Tuple](a: A): DropUnits[A] =
InlineFoldR
.fold[[T <: Tuple] =>> T => DropUnits[T], A](
(_: EmptyTuple) => EmptyTuple,
DropInlined
)(a)
val a: (
Int,
Int,
Int,
Int,
Int,
Int,
Int,
Int,
Int,
Int,
Int,
Int,
Int,
Int,
Int,
Int,
Int,
Int,
Int,
Int,
Int,
Int,
Int,
Int,
Int,
Int,
Int,
Int,
Unit,
Int,
Unit
) =
(1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1, 1, (), 1, ())
println(DropUnits.drop(a))
Output
Endless compilation
Expectation
Compilation succeeded.
Sorry, I don't know how to minimize it. Deferred inline InlineFoldR
and match type DropUnits
are required to show the bug.
Metadata
Metadata
Assignees
Labels
area:match-typesitype:bugitype:compiler hangsIssues where the compiler hangs.Issues where the compiler hangs.stat:fixed in nextThe issue was fixed in Next and only still applies to LTS.The issue was fixed in Next and only still applies to LTS.