diff --git a/compiler/src/dotty/tools/dotc/core/TypeErasure.scala b/compiler/src/dotty/tools/dotc/core/TypeErasure.scala index 64f97f8a7c1f..f259d9eec08d 100644 --- a/compiler/src/dotty/tools/dotc/core/TypeErasure.scala +++ b/compiler/src/dotty/tools/dotc/core/TypeErasure.scala @@ -331,8 +331,10 @@ object TypeErasure { val candidates = takeUntil(tp2superclasses)(!_.is(Trait)) // Candidates st "no other common superclass or trait derives from S" + // Also, drop `PairClass` since it is not valid after erasue val minimums = candidates.filter { cand => - candidates.forall(x => !x.derivesFrom(cand) || x.eq(cand)) + cand != defn.PairClass + && candidates.forall(x => !x.derivesFrom(cand) || x.eq(cand)) } // Pick the last minimum to prioritise classes over traits diff --git a/tests/pos/i9788.scala b/tests/pos/i9788.scala new file mode 100644 index 000000000000..c9cea78b4ac7 --- /dev/null +++ b/tests/pos/i9788.scala @@ -0,0 +1 @@ +case class A(x: (Unit, Unit) | (Unit, Unit, Unit))