Skip to content

Commit

Permalink
Fix scala#10867: Normalize after applyIfParameterized in superType
Browse files Browse the repository at this point in the history
  • Loading branch information
OlivierBlanvillain authored and olsdavis committed Apr 4, 2022
1 parent 4590a3d commit d2b64f2
Show file tree
Hide file tree
Showing 2 changed files with 50 additions and 1 deletion.
2 changes: 1 addition & 1 deletion compiler/src/dotty/tools/dotc/core/Types.scala
Original file line number Diff line number Diff line change
Expand Up @@ -4114,7 +4114,7 @@ object Types {
cachedSuper = tycon match {
case tycon: HKTypeLambda => defn.AnyType
case tycon: TypeRef if tycon.symbol.isClass => tycon
case tycon: TypeProxy => tycon.superType.applyIfParameterized(args)
case tycon: TypeProxy => tycon.superType.applyIfParameterized(args).normalized
case _ => defn.AnyType
}
validSuper = if (tycon.isProvisional) Nowhere else ctx.period
Expand Down
49 changes: 49 additions & 0 deletions tests/pos/10867.scala
Original file line number Diff line number Diff line change
@@ -0,0 +1,49 @@
object Test {
type inserts[a, as <: Tuple] <: Tuple =
as match
case EmptyTuple => (a *: EmptyTuple) *: EmptyTuple
case y *: ys => (a *: y *: ys) *: Tuple.Map[inserts[a, ys], [t <: Tuple] =>> y *: t]

type inserts2[a] =
[as <: Tuple] =>> inserts[a, as]

type A = inserts [1, EmptyTuple]
type B = inserts2[1][EmptyTuple]

summon[A =:= ((1 *: EmptyTuple) *: EmptyTuple)]
summon[B =:= ((1 *: EmptyTuple) *: EmptyTuple)]
summon[A =:= B]

type H[t <: Tuple] = Tuple.Concat[t, EmptyTuple]

summon[H[A] =:= H[B]]

summon[Tuple.Concat[A, EmptyTuple] =:= Tuple.Concat[B, EmptyTuple]]
}

object Minimized {
type Concombre[X <: Tuple, +Y <: Tuple] <: Tuple = X match {
case EmptyTuple => Y
case x1 *: xs1 => X
}

type inserts[a, as <: Tuple] <: Tuple =
as match
case EmptyTuple => a *: EmptyTuple

type inserts2[a] =
[as <: Tuple] =>> inserts[a, as]

type A = inserts [1, EmptyTuple]
type B = inserts2[1][EmptyTuple]
type C = 1 *: EmptyTuple

summon[A =:= B]
summon[A =:= C]
summon[B =:= C]

type H[t <: Tuple] = Concombre[t, EmptyTuple]

summon[H[C] =:= H[A]]
summon[H[C] =:= H[B]]
}

0 comments on commit d2b64f2

Please sign in to comment.