Skip to content

Commit 5d0c47a

Browse files
committed
Fix infinite loop in Mirror synthesis of unreducible match type
This regressed in f7e2e7c (present in 3.4.0).
1 parent 133e709 commit 5d0c47a

File tree

2 files changed

+10
-1
lines changed

2 files changed

+10
-1
lines changed

compiler/src/dotty/tools/dotc/typer/Synthesizer.scala

+1-1
Original file line numberDiff line numberDiff line change
@@ -379,7 +379,7 @@ class Synthesizer(typer: Typer)(using @constructorOnly c: Context):
379379
// avoid type aliases for tuples
380380
Right(MirrorSource.GenericTuple(types))
381381
case _ => reduce(tp.underlying)
382-
case tp: MatchType => reduce(tp.normalized)
382+
case tp: MatchType => reduce(tp.tryNormalize.orElse(tp.superType))
383383
case _ => reduce(tp.superType)
384384
case tp @ AndType(l, r) =>
385385
for

tests/neg/i19198.scala

+9
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
import deriving.Mirror
2+
import compiletime.summonInline
3+
4+
type DoesNotReduce[T] = T match
5+
case String => Any
6+
7+
class Foo
8+
@main def Test: Unit =
9+
summonInline[Mirror.Of[DoesNotReduce[Option[Int]]]] // error

0 commit comments

Comments
 (0)