Skip to content

Commit 89222e4

Browse files
Backport "Do match type reduction atPhaseNoLater than ElimOpaque" to LTS (#21023)
Backports #20017 to the LTS branch. PR submitted by the release tooling. [skip ci]
2 parents 5cdcf6a + f4381a9 commit 89222e4

File tree

3 files changed

+16
-1
lines changed

3 files changed

+16
-1
lines changed

compiler/src/dotty/tools/dotc/core/Phases.scala

+4
Original file line numberDiff line numberDiff line change
@@ -219,6 +219,7 @@ object Phases {
219219
private var myPatmatPhase: Phase = _
220220
private var myElimRepeatedPhase: Phase = _
221221
private var myElimByNamePhase: Phase = _
222+
private var myElimOpaquePhase: Phase = _
222223
private var myExtensionMethodsPhase: Phase = _
223224
private var myExplicitOuterPhase: Phase = _
224225
private var myGettersPhase: Phase = _
@@ -244,6 +245,7 @@ object Phases {
244245
final def patmatPhase: Phase = myPatmatPhase
245246
final def elimRepeatedPhase: Phase = myElimRepeatedPhase
246247
final def elimByNamePhase: Phase = myElimByNamePhase
248+
final def elimOpaquePhase: Phase = myElimOpaquePhase
247249
final def extensionMethodsPhase: Phase = myExtensionMethodsPhase
248250
final def explicitOuterPhase: Phase = myExplicitOuterPhase
249251
final def gettersPhase: Phase = myGettersPhase
@@ -271,6 +273,7 @@ object Phases {
271273
myRefChecksPhase = phaseOfClass(classOf[RefChecks])
272274
myElimRepeatedPhase = phaseOfClass(classOf[ElimRepeated])
273275
myElimByNamePhase = phaseOfClass(classOf[ElimByName])
276+
myElimOpaquePhase = phaseOfClass(classOf[ElimOpaque])
274277
myExtensionMethodsPhase = phaseOfClass(classOf[ExtensionMethods])
275278
myErasurePhase = phaseOfClass(classOf[Erasure])
276279
myElimErasedValueTypePhase = phaseOfClass(classOf[ElimErasedValueType])
@@ -489,6 +492,7 @@ object Phases {
489492
def refchecksPhase(using Context): Phase = ctx.base.refchecksPhase
490493
def elimRepeatedPhase(using Context): Phase = ctx.base.elimRepeatedPhase
491494
def elimByNamePhase(using Context): Phase = ctx.base.elimByNamePhase
495+
def elimOpaquePhase(using Context): Phase = ctx.base.elimOpaquePhase
492496
def extensionMethodsPhase(using Context): Phase = ctx.base.extensionMethodsPhase
493497
def explicitOuterPhase(using Context): Phase = ctx.base.explicitOuterPhase
494498
def gettersPhase(using Context): Phase = ctx.base.gettersPhase

compiler/src/dotty/tools/dotc/core/Types.scala

+1-1
Original file line numberDiff line numberDiff line change
@@ -4936,7 +4936,7 @@ object Types extends TypeUtils {
49364936
case ex: Throwable =>
49374937
handleRecursive("normalizing", s"${scrutinee.show} match ..." , ex)
49384938

4939-
def reduced(using Context): Type = {
4939+
def reduced(using Context): Type = atPhaseNoLater(elimOpaquePhase) {
49404940

49414941
def contextInfo(tp: Type): Type = tp match {
49424942
case tp: TypeParamRef =>

tests/pos/i19434.scala

+11
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
2+
object Test:
3+
4+
object Named:
5+
opaque type Named[name <: String & Singleton, A] >: A = A
6+
7+
type DropNames[T <: Tuple] = T match
8+
case Named.Named[_, x] *: xs => x *: DropNames[xs]
9+
case _ => T
10+
11+
def f[T <: Tuple]: DropNames[T] = ???

0 commit comments

Comments
 (0)