diff --git a/compiler/src/dotty/tools/dotc/core/Types.scala b/compiler/src/dotty/tools/dotc/core/Types.scala index dc54d14b0d4b..39c8f3cc4f3b 100644 --- a/compiler/src/dotty/tools/dotc/core/Types.scala +++ b/compiler/src/dotty/tools/dotc/core/Types.scala @@ -7124,7 +7124,15 @@ object Types extends TypeUtils { class TypeSizeAccumulator(using Context) extends TypeAccumulator[Int] { var seen = util.HashSet[Type](initialCapacity = 8) def apply(n: Int, tp: Type): Int = - tp match { + + val canonicTp = tp match + case AppliedType(_, args) if defn.isTupleNType(tp) => + args.foldRight(defn.EmptyTupleClass.typeRef: Type) { (elemType, acc) => + defn.PairClass.typeRef.appliedTo(elemType, acc) + } + case _ => tp + + canonicTp match { case tp: AppliedType => val tpNorm = tp.tryNormalize if tpNorm.exists then apply(n, tpNorm) diff --git a/compiler/test/dotty/tools/dotc/core/TypesTest.scala b/compiler/test/dotty/tools/dotc/core/TypesTest.scala new file mode 100644 index 000000000000..00336dca2b2c --- /dev/null +++ b/compiler/test/dotty/tools/dotc/core/TypesTest.scala @@ -0,0 +1,18 @@ +package dotty.tools.dotc.core + +import dotty.tools.DottyTest +import dotty.tools.dotc.core.Symbols.defn +import dotty.tools.dotc.core.TypeOps + +import org.junit.Test +import org.junit.Assert.assertEquals + +class TypesTest extends DottyTest: + + @Test def tuple3TypeSize = + val tpe = defn.TupleType(3).nn.appliedTo(List(defn.IntType, defn.BooleanType, defn.DoubleType)) + assertEquals(3, tpe.typeSize) + + @Test def tuple3ConsTypeSize = + val tpe = TypeOps.nestedPairs(List(defn.IntType, defn.BooleanType, defn.DoubleType)) + assertEquals(3, tpe.typeSize) \ No newline at end of file diff --git a/compiler/test/dotty/tools/dotc/typer/DivergenceChecker.scala b/compiler/test/dotty/tools/dotc/typer/DivergenceChecker.scala index 520b3d2de57e..da3482a43d27 100644 --- a/compiler/test/dotty/tools/dotc/typer/DivergenceChecker.scala +++ b/compiler/test/dotty/tools/dotc/typer/DivergenceChecker.scala @@ -50,8 +50,8 @@ class DivergenceCheckerTests extends DottyTest { 1, 1, 1, - 3, - 5 + 4, + 6 ) tpes.lazyZip(expectedSizes).lazyZip(expectedCoveringSets).foreach {