diff --git a/compiler/src/dotty/tools/dotc/typer/Typer.scala b/compiler/src/dotty/tools/dotc/typer/Typer.scala index 882f112ef47c..643faf24e0c6 100644 --- a/compiler/src/dotty/tools/dotc/typer/Typer.scala +++ b/compiler/src/dotty/tools/dotc/typer/Typer.scala @@ -1794,22 +1794,21 @@ class Typer extends Namer /** Translate tuples of all arities */ def typedTuple(tree: untpd.Tuple, pt: Type)(implicit ctx: Context): Tree = { - val elems = tree.trees - val arity = elems.length + val arity = tree.trees.length if (arity <= Definitions.MaxTupleArity) typed(desugar.smallTuple(tree).withPos(tree.pos), pt) else { val pts = if (arity == pt.tupleArity) pt.tupleElementTypes - else elems.map(_ => defn.AnyType) - val elems1 = (tree.trees, pts).zipped.map(typed(_, _)) + else List.fill(arity)(defn.AnyType) + val elems = (tree.trees, pts).zipped.map(typed(_, _)) if (ctx.mode.is(Mode.Type)) - (elems1 :\ (TypeTree(defn.UnitType): Tree))((elemTpt, elemTpts) => + (elems :\ (TypeTree(defn.UnitType): Tree))((elemTpt, elemTpts) => AppliedTypeTree(TypeTree(defn.PairType), List(elemTpt, elemTpts))) .withPos(tree.pos) else { val tupleXXLobj = untpd.ref(defn.TupleXXLModule.termRef) - val app = untpd.cpy.Apply(tree)(tupleXXLobj, elems1.map(untpd.TypedSplice(_))) + val app = untpd.cpy.Apply(tree)(tupleXXLobj, elems.map(untpd.TypedSplice(_))) .withPos(tree.pos) val app1 = typed(app, defn.TupleXXLType) if (ctx.mode.is(Mode.Pattern)) app1 diff --git a/tests/pos/i5271.scala b/tests/pos/i5271.scala new file mode 100644 index 000000000000..7bf03771c8f4 --- /dev/null +++ b/tests/pos/i5271.scala @@ -0,0 +1,6 @@ +class Foo { + def foo: Unit = { + val (_, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _) = + (1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, List(2, 1), 22, 23) + } +} diff --git a/tests/pending/tuple-patmat-extract.scala b/tests/run/tuple-patmat-extract.scala similarity index 100% rename from tests/pending/tuple-patmat-extract.scala rename to tests/run/tuple-patmat-extract.scala